Code refactor ArrayList to List

main
h4h13 2020-02-17 16:50:08 +05:30
parent 67f4b4ecf2
commit 87954b43f2
43 changed files with 236 additions and 305 deletions

View File

@ -214,12 +214,12 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsView, C
albumDetailsPresenter.aboutAlbum(album.artistName!!, album.title!!) albumDetailsPresenter.aboutAlbum(album.artistName!!, album.title!!)
} }
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.artistName) moreTitle.text = String.format(getString(R.string.label_more_from), album.artistName)
val albumAdapter = HorizontalAlbumAdapter(this, albums, false, null) val albumAdapter = HorizontalAlbumAdapter(this, albums, null)
moreRecyclerView.layoutManager = GridLayoutManager( moreRecyclerView.layoutManager = GridLayoutManager(
this, this,
1, 1,

View File

@ -154,7 +154,7 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailsView,
} }
private fun setupRecyclerView() { private fun setupRecyclerView() {
albumAdapter = HorizontalAlbumAdapter(this, ArrayList(), false, null) albumAdapter = HorizontalAlbumAdapter(this, ArrayList(), null)
albumRecyclerView.apply { albumRecyclerView.apply {
itemAnimator = DefaultItemAnimator() itemAnimator = DefaultItemAnimator()
layoutManager = GridLayoutManager(this.context, 1, GridLayoutManager.HORIZONTAL, false) layoutManager = GridLayoutManager(this.context, 1, GridLayoutManager.HORIZONTAL, false)

View File

@ -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)
} }

View File

@ -220,8 +220,20 @@ class MainActivity : AbsSlidingMusicPanelActivity(), SharedPreferences.OnSharedP
} }
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) { override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) {
if (key == PreferenceUtil.GENERAL_THEME || key == PreferenceUtil.BLACK_THEME || key == PreferenceUtil.ADAPTIVE_COLOR_APP || key == PreferenceUtil.DOMINANT_COLOR || key == PreferenceUtil.USER_NAME || key == PreferenceUtil.TOGGLE_FULL_SCREEN || key == PreferenceUtil.TOGGLE_VOLUME || key == PreferenceUtil.ROUND_CORNERS || key == PreferenceUtil.CAROUSEL_EFFECT || key == PreferenceUtil.NOW_PLAYING_SCREEN_ID || key == PreferenceUtil.TOGGLE_GENRE || key == PreferenceUtil.BANNER_IMAGE_PATH || key == PreferenceUtil.PROFILE_IMAGE_PATH || key == PreferenceUtil.CIRCULAR_ALBUM_ART || key == PreferenceUtil.KEEP_SCREEN_ON || key == PreferenceUtil.TOGGLE_SEPARATE_LINE || key == PreferenceUtil.ALBUM_GRID_STYLE || key == PreferenceUtil.ARTIST_GRID_STYLE || key == PreferenceUtil.TOGGLE_HOME_BANNER || key == PreferenceUtil.TOGGLE_ADD_CONTROLS || key == PreferenceUtil.ALBUM_COVER_STYLE || key == PreferenceUtil.HOME_ARTIST_GRID_STYLE || key == PreferenceUtil.ALBUM_COVER_TRANSFORM || key == PreferenceUtil.DESATURATED_COLOR || key == PreferenceUtil.TAB_TEXT_MODE || key == PreferenceUtil.LIBRARY_CATEGORIES if (key == PreferenceUtil.GENERAL_THEME || key == PreferenceUtil.BLACK_THEME ||
) postRecreate() key == PreferenceUtil.ADAPTIVE_COLOR_APP || key == PreferenceUtil.DOMINANT_COLOR ||
key == PreferenceUtil.USER_NAME || key == PreferenceUtil.TOGGLE_FULL_SCREEN ||
key == PreferenceUtil.TOGGLE_VOLUME || key == PreferenceUtil.ROUND_CORNERS ||
key == PreferenceUtil.CAROUSEL_EFFECT || key == PreferenceUtil.NOW_PLAYING_SCREEN_ID ||
key == PreferenceUtil.TOGGLE_GENRE || key == PreferenceUtil.BANNER_IMAGE_PATH ||
key == PreferenceUtil.PROFILE_IMAGE_PATH || key == PreferenceUtil.CIRCULAR_ALBUM_ART ||
key == PreferenceUtil.KEEP_SCREEN_ON || key == PreferenceUtil.TOGGLE_SEPARATE_LINE ||
key == PreferenceUtil.TOGGLE_HOME_BANNER || key == PreferenceUtil.TOGGLE_ADD_CONTROLS ||
key == PreferenceUtil.ALBUM_COVER_STYLE || key == PreferenceUtil.HOME_ARTIST_GRID_STYLE ||
key == PreferenceUtil.ALBUM_COVER_TRANSFORM || key == PreferenceUtil.DESATURATED_COLOR ||
key == PreferenceUtil.TAB_TEXT_MODE || key == PreferenceUtil.LIBRARY_CATEGORIES
)
postRecreate()
} }
private fun selectedFragment(itemId: Int) { private fun selectedFragment(itemId: Int) {

View File

@ -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)
} }

View File

@ -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,16 +17,10 @@ import java.util.Locale
class GenreAdapter( class GenreAdapter(
private val activity: Activity, private val activity: Activity,
dataSet: ArrayList<Genre>, var dataSet: List<Genre>,
private val mItemLayoutRes: Int private val mItemLayoutRes: Int
) : RecyclerView.Adapter<GenreAdapter.ViewHolder>() { ) : RecyclerView.Adapter<GenreAdapter.ViewHolder>() {
var dataSet = ArrayList<Genre>()
private set
init {
this.dataSet = dataSet
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(LayoutInflater.from(activity).inflate(mItemLayoutRes, parent, false)) return ViewHolder(LayoutInflater.from(activity).inflate(mItemLayoutRes, parent, false))
@ -48,7 +41,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()
} }

View File

@ -27,7 +27,7 @@ class HomeAdapter(
private val displayMetrics: DisplayMetrics private val displayMetrics: DisplayMetrics
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() { ) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private var list = ArrayList<Home>() private var list = listOf<Home>()
override fun getItemViewType(position: Int): Int { override fun getItemViewType(position: Int): Int {
return list[position].homeSection return list[position].homeSection
@ -81,7 +81,7 @@ class HomeAdapter(
return list.size return list.size
} }
fun swapData(sections: ArrayList<Home>) { fun swapData(sections: List<Home>) {
list = sections list = sections
notifyDataSetChanged() notifyDataSetChanged()
} }
@ -121,7 +121,6 @@ class HomeAdapter(
activity, activity,
list, list,
PreferenceUtil.getInstance(activity).getHomeGridStyle(activity), PreferenceUtil.getInstance(activity).getHomeGridStyle(activity),
false,
null null
) )
adapter = artistAdapter adapter = artistAdapter

View File

@ -29,9 +29,8 @@ import me.zhanghai.android.fastscroll.PopupTextProvider
open class AlbumAdapter( open class AlbumAdapter(
protected val activity: AppCompatActivity, protected val activity: AppCompatActivity,
dataSet: ArrayList<Album>, var dataSet: List<Album>,
protected var itemLayoutRes: Int, protected var itemLayoutRes: Int,
usePalette: Boolean,
cabHolder: CabHolder? cabHolder: CabHolder?
) : AbsMultiSelectAdapter<AlbumAdapter.ViewHolder, Album>( ) : AbsMultiSelectAdapter<AlbumAdapter.ViewHolder, Album>(
activity, activity,
@ -39,28 +38,11 @@ open class AlbumAdapter(
R.menu.menu_media_selection R.menu.menu_media_selection
), PopupTextProvider { ), PopupTextProvider {
var dataSet: ArrayList<Album>
protected set
protected var usePalette = false
init { init {
this.dataSet = dataSet
this.usePalette = usePalette
this.setHasStableIds(true) this.setHasStableIds(true)
} }
fun useItemLayout(itemLayoutRes: Int) { fun swapDataSet(dataSet: List<Album>) {
this.itemLayoutRes = itemLayoutRes
notifyDataSetChanged()
}
fun usePalette(usePalette: Boolean) {
this.usePalette = usePalette
notifyDataSetChanged()
}
fun swapDataSet(dataSet: ArrayList<Album>) {
this.dataSet = dataSet this.dataSet = dataSet
notifyDataSetChanged() notifyDataSetChanged()
} }

View File

@ -32,7 +32,7 @@ import com.bumptech.glide.Glide
class AlbumFullWidthAdapter( class AlbumFullWidthAdapter(
private val activity: Activity, private val activity: Activity,
private val dataSet: ArrayList<Album>, private val dataSet: List<Album>,
metrics: DisplayMetrics metrics: DisplayMetrics
) : MetalRecyclerViewPager.MetalAdapter<AlbumFullWidthAdapter.FullMetalViewHolder>(metrics) { ) : MetalRecyclerViewPager.MetalAdapter<AlbumFullWidthAdapter.FullMetalViewHolder>(metrics) {

View File

@ -12,15 +12,13 @@ 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>,
usePalette: Boolean,
cabHolder: CabHolder? cabHolder: CabHolder?
) : AlbumAdapter( ) : AlbumAdapter(
activity, dataSet, HorizontalAdapterHelper.LAYOUT_RES, usePalette, cabHolder activity, dataSet, HorizontalAdapterHelper.LAYOUT_RES, cabHolder
) { ) {
override fun createViewHolder(view: View, viewType: Int): ViewHolder { override fun createViewHolder(view: View, viewType: Int): ViewHolder {
@ -45,8 +43,7 @@ class HorizontalAlbumAdapter(
} }
override fun onColorReady(color: Int) { override fun onColorReady(color: Int) {
if (usePalette) setColors(color, holder) setColors(color, holder)
else setColors(albumArtistFooterColor, holder)
} }
}) })
} }

View File

@ -28,24 +28,18 @@ 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,
var usePalette: Boolean,
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()
} }
fun usePalette(usePalette: Boolean) {
this.usePalette = usePalette
notifyDataSetChanged()
}
override fun getItemId(position: Int): Long { override fun getItemId(position: Int): Long {
return dataSet[position].id.toLong() return dataSet[position].id.toLong()
} }

View File

@ -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>(
@ -43,13 +43,12 @@ class PlaylistAdapter(
R.menu.menu_playlists_selection R.menu.menu_playlists_selection
) { ) {
var songs = ArrayList<Song>()
init { init {
setHasStableIds(true) setHasStableIds(true)
} }
fun swapDataSet(dataSet: ArrayList<Playlist>) { fun swapDataSet(dataSet: List<Playlist>) {
this.dataSet = dataSet this.dataSet = dataSet
notifyDataSetChanged() notifyDataSetChanged()
} }

View File

@ -9,11 +9,10 @@ import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.interfaces.CabHolder import code.name.monkey.retromusic.interfaces.CabHolder
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import java.util.ArrayList
abstract class AbsOffsetSongAdapter( abstract class AbsOffsetSongAdapter(
activity: AppCompatActivity, activity: AppCompatActivity,
dataSet: ArrayList<Song>, dataSet: MutableList<Song>,
@LayoutRes itemLayoutRes: Int, @LayoutRes itemLayoutRes: Int,
cabHolder: CabHolder? cabHolder: CabHolder?
) : SongAdapter(activity, dataSet, itemLayoutRes, cabHolder) { ) : SongAdapter(activity, dataSet, itemLayoutRes, cabHolder) {

View File

@ -96,7 +96,7 @@ class OrderablePlaylistSongAdapter(
private var mDragStateFlags: Int = 0 private var mDragStateFlags: Int = 0
override var songMenuRes: Int override var songMenuRes: Int
get() = code.name.monkey.retromusic.R.menu.menu_item_playlist_song get() = R.menu.menu_item_playlist_song
set(value) { set(value) {
super.songMenuRes = value super.songMenuRes = value
} }
@ -113,7 +113,7 @@ class OrderablePlaylistSongAdapter(
override fun onSongMenuItemClick(item: MenuItem): Boolean { override fun onSongMenuItemClick(item: MenuItem): Boolean {
when (item.itemId) { when (item.itemId) {
code.name.monkey.retromusic.R.id.action_remove_from_playlist -> { R.id.action_remove_from_playlist -> {
RemoveFromPlaylistDialog.create(song as PlaylistSong) RemoveFromPlaylistDialog.create(song as PlaylistSong)
.show(activity.supportFragmentManager, "REMOVE_FROM_PLAYLIST") .show(activity.supportFragmentManager, "REMOVE_FROM_PLAYLIST")
return true return true

View File

@ -10,11 +10,10 @@ import code.name.monkey.retromusic.interfaces.CabHolder
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.NavigationUtil import code.name.monkey.retromusic.util.NavigationUtil
import com.google.android.material.button.MaterialButton import com.google.android.material.button.MaterialButton
import java.util.ArrayList
open class PlaylistSongAdapter( open class PlaylistSongAdapter(
activity: AppCompatActivity, activity: AppCompatActivity,
dataSet: ArrayList<Song>, dataSet: MutableList<Song>,
itemLayoutRes: Int, itemLayoutRes: Int,
cabHolder: CabHolder? cabHolder: CabHolder?
) : AbsOffsetSongAdapter(activity, dataSet, itemLayoutRes, cabHolder) { ) : AbsOffsetSongAdapter(activity, dataSet, itemLayoutRes, cabHolder) {

View File

@ -7,11 +7,10 @@ import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.interfaces.CabHolder import code.name.monkey.retromusic.interfaces.CabHolder
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import com.google.android.material.button.MaterialButton import com.google.android.material.button.MaterialButton
import java.util.ArrayList
class ShuffleButtonSongAdapter( class ShuffleButtonSongAdapter(
activity: AppCompatActivity, activity: AppCompatActivity,
dataSet: ArrayList<Song>, dataSet: MutableList<Song>,
itemLayoutRes: Int, itemLayoutRes: Int,
cabHolder: CabHolder? cabHolder: CabHolder?
) : AbsOffsetSongAdapter(activity, dataSet, itemLayoutRes, cabHolder) { ) : AbsOffsetSongAdapter(activity, dataSet, itemLayoutRes, cabHolder) {

View File

@ -15,9 +15,8 @@ class SimpleSongAdapter(
cabHolder: CabHolder? cabHolder: CabHolder?
) : SongAdapter(context, songs, layoutRes, cabHolder) { ) : SongAdapter(context, songs, layoutRes, cabHolder) {
override fun swapDataSet(dataSet: ArrayList<Song>) { override fun swapDataSet(dataSet: List<Song>) {
this.dataSet.clear() this.dataSet = dataSet.toMutableList()
this.dataSet = dataSet
notifyDataSetChanged() notifyDataSetChanged()
} }

View File

@ -34,25 +34,25 @@ import java.util.ArrayList
open class SongAdapter( open class SongAdapter(
protected val activity: AppCompatActivity, protected val activity: AppCompatActivity,
dataSet: ArrayList<Song>, var dataSet: MutableList<Song>,
protected var itemLayoutRes: Int, protected var itemLayoutRes: Int,
cabHolder: CabHolder?, cabHolder: CabHolder?,
showSectionName: Boolean = true showSectionName: Boolean = true
) : AbsMultiSelectAdapter<SongAdapter.ViewHolder, Song>( ) : AbsMultiSelectAdapter<SongAdapter.ViewHolder, Song>(
activity, cabHolder, R.menu.menu_media_selection activity,
cabHolder,
R.menu.menu_media_selection
), MaterialCab.Callback, PopupTextProvider { ), MaterialCab.Callback, PopupTextProvider {
var dataSet: ArrayList<Song>
private var showSectionName = true private var showSectionName = true
init { init {
this.dataSet = dataSet
this.showSectionName = showSectionName this.showSectionName = showSectionName
this.setHasStableIds(true) this.setHasStableIds(true)
} }
open fun swapDataSet(dataSet: ArrayList<Song>) { open fun swapDataSet(dataSet: List<Song>) {
this.dataSet = dataSet this.dataSet = dataSet.toMutableList()
notifyDataSetChanged() notifyDataSetChanged()
} }

View File

@ -27,11 +27,10 @@ import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.bottomsheets.BottomSheet import com.afollestad.materialdialogs.bottomsheets.BottomSheet
import com.afollestad.materialdialogs.list.listItems import com.afollestad.materialdialogs.list.listItems
class AddToPlaylistDialog : DialogFragment() { class AddToPlaylistDialog : DialogFragment() {
override fun onCreateDialog( override fun onCreateDialog(
savedInstanceState: Bundle? savedInstanceState: Bundle?
): Dialog { ): Dialog {
val playlists = PlaylistLoader.getAllPlaylists(requireContext()) val playlists = PlaylistLoader.getAllPlaylists(requireContext())
val playlistNames: MutableList<String> = mutableListOf() val playlistNames: MutableList<String> = mutableListOf()
@ -47,7 +46,9 @@ class AddToPlaylistDialog : DialogFragment() {
val songs = arguments!!.getParcelableArrayList<Song>("songs") ?: return@listItems val songs = arguments!!.getParcelableArrayList<Song>("songs") ?: return@listItems
if (index == 0) { if (index == 0) {
dialog.dismiss() dialog.dismiss()
activity?.supportFragmentManager?.let { CreatePlaylistDialog.create(songs).show(it, "ADD_TO_PLAYLIST") } activity?.supportFragmentManager?.let {
CreatePlaylistDialog.create(songs).show(it, "ADD_TO_PLAYLIST")
}
} else { } else {
dialog.dismiss() dialog.dismiss()
PlaylistsUtil.addToPlaylist(requireContext(), songs, playlists[index - 1].id, true) PlaylistsUtil.addToPlaylist(requireContext(), songs, playlists[index - 1].id, true)
@ -64,10 +65,10 @@ class AddToPlaylistDialog : DialogFragment() {
return create(list) return create(list)
} }
fun create(songs: ArrayList<Song>): AddToPlaylistDialog { fun create(songs: List<Song>): AddToPlaylistDialog {
val dialog = AddToPlaylistDialog() val dialog = AddToPlaylistDialog()
val args = Bundle() val args = Bundle()
args.putParcelableArrayList("songs", songs) args.putParcelableArrayList("songs", ArrayList(songs))
dialog.arguments = args dialog.arguments = args
return dialog return dialog
} }

View File

@ -104,10 +104,10 @@ class DeleteSongsDialog : DialogFragment() {
return create(list) return create(list)
} }
fun create(songs: ArrayList<Song>): DeleteSongsDialog { fun create(songs: List<Song>): DeleteSongsDialog {
val dialog = DeleteSongsDialog() val dialog = DeleteSongsDialog()
val args = Bundle() val args = Bundle()
args.putParcelableArrayList("songs", songs) args.putParcelableArrayList("songs", ArrayList(songs))
dialog.arguments = args dialog.arguments = args
return dialog return dialog
} }

View File

@ -118,12 +118,6 @@ abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A : RecyclerVie
protected abstract fun saveGridSizeLand(gridColumns: Int) protected abstract fun saveGridSizeLand(gridColumns: Int)
protected abstract fun saveUsePalette(usePalette: Boolean)
protected abstract fun loadUsePalette(): Boolean
protected abstract fun setUsePalette(usePalette: Boolean)
protected abstract fun loadLayoutRes(): Int protected abstract fun loadLayoutRes(): Int
protected abstract fun saveLayoutRes(layoutRes: Int) protected abstract fun saveLayoutRes(layoutRes: Int)

View File

@ -13,7 +13,7 @@ import code.name.monkey.retromusic.mvp.presenter.AlbumsView
import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.PreferenceUtil
import javax.inject.Inject import javax.inject.Inject
open class AlbumsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<AlbumAdapter, GridLayoutManager>(), class AlbumsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<AlbumAdapter, GridLayoutManager>(),
AlbumsView { AlbumsView {
@Inject @Inject
@ -41,7 +41,7 @@ open class AlbumsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<Al
albumsPresenter.detachView() albumsPresenter.detachView()
} }
override fun albums(albums: java.util.ArrayList<Album>) { override fun albums(albums: List<Album>) {
adapter?.swapDataSet(albums) adapter?.swapDataSet(albums)
} }
@ -53,21 +53,13 @@ open class AlbumsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<Al
} }
override fun createAdapter(): AlbumAdapter { override fun createAdapter(): AlbumAdapter {
/* var itemLayoutRes = itemLayoutRes
notifyLayoutResChanged(itemLayoutRes)
if (itemLayoutRes != R.layout.item_list) {
itemLayoutRes = PreferenceUtil.getInstance(requireContext()).getAlbumGridStyle(requireContext())
}*/
val dataSet = if (adapter == null) ArrayList() else adapter!!.dataSet val dataSet = if (adapter == null) ArrayList() else adapter!!.dataSet
return AlbumAdapter(libraryFragment.mainActivity, dataSet, itemLayoutRes(), loadUsePalette(), libraryFragment) return AlbumAdapter(
} libraryFragment.mainActivity,
dataSet,
public override fun loadUsePalette(): Boolean { itemLayoutRes(),
return PreferenceUtil.getInstance(requireContext()).albumColoredFooters() libraryFragment
} )
override fun setUsePalette(usePalette: Boolean) {
adapter?.usePalette(usePalette)
} }
override fun setGridSize(gridSize: Int) { override fun setGridSize(gridSize: Int) {
@ -99,10 +91,6 @@ open class AlbumsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<Al
PreferenceUtil.getInstance(requireContext()).setAlbumGridSizeLand(gridColumns) PreferenceUtil.getInstance(requireContext()).setAlbumGridSizeLand(gridColumns)
} }
override fun saveUsePalette(usePalette: Boolean) {
PreferenceUtil.getInstance(requireContext()).setAlbumColoredFooters(usePalette)
}
override fun onMediaStoreChanged() { override fun onMediaStoreChanged() {
albumsPresenter.loadAlbums() albumsPresenter.loadAlbums()
} }
@ -116,7 +104,6 @@ open class AlbumsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<Al
} }
override fun setLayoutRes(layoutRes: Int) { override fun setLayoutRes(layoutRes: Int) {
//adapter?.itemCount?.let { adapter?.notifyItemRangeChanged(0, it) }
} }
override fun loadLayoutRes(): Int { override fun loadLayoutRes(): Int {

View File

@ -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)
} }
@ -66,7 +66,6 @@ class ArtistsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<Artist
libraryFragment.mainActivity, libraryFragment.mainActivity,
dataSet, dataSet,
itemLayoutRes(), itemLayoutRes(),
loadUsePalette(),
libraryFragment libraryFragment
) )
} }
@ -87,18 +86,6 @@ class ArtistsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<Artist
PreferenceUtil.getInstance(requireContext()).setArtistGridSizeLand(gridColumns) PreferenceUtil.getInstance(requireContext()).setArtistGridSizeLand(gridColumns)
} }
override fun saveUsePalette(usePalette: Boolean) {
PreferenceUtil.getInstance(requireContext()).setArtistColoredFooters(usePalette)
}
public override fun loadUsePalette(): Boolean {
return PreferenceUtil.getInstance(requireContext()).artistColoredFooters()
}
override fun setUsePalette(usePalette: Boolean) {
adapter?.usePalette(usePalette)
}
override fun setGridSize(gridSize: Int) { override fun setGridSize(gridSize: Int) {
layoutManager?.spanCount = gridSize layoutManager?.spanCount = gridSize
adapter?.notifyDataSetChanged() adapter?.notifyDataSetChanged()
@ -121,9 +108,7 @@ class ArtistsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<Artist
val TAG: String = ArtistsFragment::class.java.simpleName val TAG: String = ArtistsFragment::class.java.simpleName
fun newInstance(): ArtistsFragment { fun newInstance(): ArtistsFragment {
val args = Bundle() val args = Bundle()
val fragment = ArtistsFragment() val fragment = ArtistsFragment()
fragment.arguments = args fragment.arguments = args
return fragment return fragment
@ -140,4 +125,4 @@ class ArtistsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<Artist
override fun saveLayoutRes(layoutRes: Int) { override fun saveLayoutRes(layoutRes: Int) {
PreferenceUtil.getInstance(requireContext()).artistGridStyle = layoutRes PreferenceUtil.getInstance(requireContext()).artistGridStyle = layoutRes
} }
} }

View File

@ -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()) {

View File

@ -39,7 +39,7 @@ class PlaylistsFragment : AbsLibraryPagerRecyclerViewFragment<PlaylistAdapter, L
override fun createAdapter(): PlaylistAdapter { override fun createAdapter(): PlaylistAdapter {
return PlaylistAdapter(libraryFragment.mainActivity, ArrayList(), return PlaylistAdapter(libraryFragment.mainActivity, ArrayList(),
R.layout.item_list, libraryFragment) R.layout.item_list, libraryFragment)
} }
override fun onResume() { override fun onResume() {
@ -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)
} }

View File

@ -40,7 +40,7 @@ class SongsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<SongAdap
} }
override fun createAdapter(): SongAdapter { override fun createAdapter(): SongAdapter {
val dataSet = if (adapter == null) ArrayList() else adapter!!.dataSet val dataSet = if (adapter == null) mutableListOf() else adapter!!.dataSet
return ShuffleButtonSongAdapter( return ShuffleButtonSongAdapter(
libraryFragment.mainActivity, libraryFragment.mainActivity,
dataSet, dataSet,
@ -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)
} }
@ -73,26 +73,14 @@ class SongsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<SongAdap
PreferenceUtil.getInstance(requireContext()).setSongGridSizeLand(gridColumns) PreferenceUtil.getInstance(requireContext()).setSongGridSizeLand(gridColumns)
} }
public override fun saveUsePalette(usePalette: Boolean) {
PreferenceUtil.getInstance(requireContext()).setSongColoredFooters(usePalette)
}
public override fun loadUsePalette(): Boolean {
return PreferenceUtil.getInstance(requireContext()).songColoredFooters()
}
public override fun setUsePalette(usePalette: Boolean) {
}
override fun setGridSize(gridSize: Int) { override fun setGridSize(gridSize: Int) {
adapter?.notifyDataSetChanged() adapter?.notifyDataSetChanged()
} }
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
if (adapter!!.dataSet.isEmpty()) { if (adapter?.itemCount != 0)
songPresenter.loadSongs() songPresenter.loadSongs()
}
} }
override fun onDestroyView() { override fun onDestroyView() {

View File

@ -47,7 +47,6 @@ import kotlinx.android.synthetic.main.fragment_banner_home.userImage
import kotlinx.android.synthetic.main.home_content.emptyContainer import kotlinx.android.synthetic.main.home_content.emptyContainer
import kotlinx.android.synthetic.main.home_content.recyclerView import kotlinx.android.synthetic.main.home_content.recyclerView
import java.io.File import java.io.File
import java.util.ArrayList
import java.util.Calendar import java.util.Calendar
import java.util.Random import java.util.Random
import javax.inject.Inject import javax.inject.Inject
@ -59,7 +58,7 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba
private lateinit var homeAdapter: HomeAdapter private lateinit var homeAdapter: HomeAdapter
private lateinit var toolbar: Toolbar private lateinit var toolbar: Toolbar
override fun sections(sections: ArrayList<Home>) { override fun sections(sections: List<Home>) {
println(sections.size) println(sections.size)
homeAdapter.swapData(sections) homeAdapter.swapData(sections)
} }

View File

@ -29,7 +29,6 @@ import android.os.Environment
import android.os.IBinder import android.os.IBinder
import android.provider.DocumentsContract import android.provider.DocumentsContract
import android.provider.MediaStore import android.provider.MediaStore
import android.util.Log
import android.widget.Toast import android.widget.Toast
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import code.name.monkey.retromusic.loaders.SongLoader import code.name.monkey.retromusic.loaders.SongLoader
@ -158,7 +157,7 @@ object MusicPlayerRemote {
return cursor.getString(columnIndex) return cursor.getString(columnIndex)
} }
} catch (e: Exception) { } catch (e: Exception) {
Log.e(TAG, e.message) println(e.message)
} finally { } finally {
cursor?.close() cursor?.close()
} }
@ -166,65 +165,51 @@ object MusicPlayerRemote {
} }
fun getQueueDurationSongs(): Int { fun getQueueDurationSongs(): Int {
return if (musicService != null) { return musicService?.playingQueue?.size ?: -1
musicService!!.playingQueue!!.size
} else -1
} }
/** /**
* Async * Async
*/ */
fun playSongAt(position: Int) { fun playSongAt(position: Int) {
if (musicService != null) { musicService?.playSongAt(position)
musicService!!.playSongAt(position)
}
} }
fun pauseSong() { fun pauseSong() {
if (musicService != null) { musicService?.pause()
musicService!!.pause()
}
} }
/** /**
* Async * Async
*/ */
fun playNextSong() { fun playNextSong() {
if (musicService != null) { musicService?.playNextSong(true)
musicService!!.playNextSong(true)
}
} }
/** /**
* Async * Async
*/ */
fun playPreviousSong() { fun playPreviousSong() {
if (musicService != null) { musicService?.playPreviousSong(true)
musicService!!.playPreviousSong(true)
}
} }
/** /**
* Async * Async
*/ */
fun back() { fun back() {
if (musicService != null) { musicService?.back(true)
musicService!!.back(true)
}
} }
fun resumePlaying() { fun resumePlaying() {
if (musicService != null) { musicService?.play()
musicService!!.play()
}
} }
/** /**
* Async * Async
*/ */
fun openQueue(queue: ArrayList<Song>, startPosition: Int, startPlaying: Boolean) { fun openQueue(queue: List<Song>, startPosition: Int, startPlaying: Boolean) {
if (!tryToHandleOpenPlayingQueue(queue, startPosition, startPlaying) && musicService != null) { if (!tryToHandleOpenPlayingQueue(queue, startPosition, startPlaying) && musicService != null) {
musicService!!.openQueue(queue, startPosition, startPlaying) musicService?.openQueue(queue, startPosition, startPlaying)
if (PreferenceUtil.getInstance(musicService).isShuffleModeOn) if (PreferenceUtil.getInstance(musicService).isShuffleModeOn)
setShuffleMode(MusicService.SHUFFLE_MODE_NONE) setShuffleMode(MusicService.SHUFFLE_MODE_NONE)
} }
@ -233,7 +218,7 @@ object MusicPlayerRemote {
/** /**
* Async * Async
*/ */
fun openAndShuffleQueue(queue: ArrayList<Song>, startPlaying: Boolean) { fun openAndShuffleQueue(queue: List<Song>, startPlaying: Boolean) {
var startPosition = 0 var startPosition = 0
if (queue.isNotEmpty()) { if (queue.isNotEmpty()) {
startPosition = Random().nextInt(queue.size) startPosition = Random().nextInt(queue.size)
@ -246,7 +231,7 @@ object MusicPlayerRemote {
} }
private fun tryToHandleOpenPlayingQueue( private fun tryToHandleOpenPlayingQueue(
queue: ArrayList<Song>, queue: List<Song>,
startPosition: Int, startPosition: Int,
startPlaying: Boolean startPlaying: Boolean
): Boolean { ): Boolean {
@ -275,7 +260,7 @@ object MusicPlayerRemote {
fun cycleRepeatMode(): Boolean { fun cycleRepeatMode(): Boolean {
if (musicService != null) { if (musicService != null) {
musicService!!.cycleRepeatMode() musicService?.cycleRepeatMode()
return true return true
} }
return false return false
@ -283,7 +268,7 @@ object MusicPlayerRemote {
fun toggleShuffleMode(): Boolean { fun toggleShuffleMode(): Boolean {
if (musicService != null) { if (musicService != null) {
musicService!!.toggleShuffle() musicService?.toggleShuffle()
return true return true
} }
return false return false
@ -300,7 +285,7 @@ object MusicPlayerRemote {
fun playNext(song: Song): Boolean { fun playNext(song: Song): Boolean {
if (musicService != null) { if (musicService != null) {
if (playingQueue.size > 0) { if (playingQueue.size > 0) {
musicService!!.addSong(position + 1, song) musicService?.addSong(position + 1, song)
} else { } else {
val queue = ArrayList<Song>() val queue = ArrayList<Song>()
queue.add(song) queue.add(song)
@ -316,10 +301,10 @@ object MusicPlayerRemote {
return false return false
} }
fun playNext(songs: ArrayList<Song>): Boolean { fun playNext(songs: List<Song>): Boolean {
if (musicService != null) { if (musicService != null) {
if (playingQueue.size > 0) { if (playingQueue.size > 0) {
musicService!!.addSongs(position + 1, songs) musicService?.addSongs(position + 1, songs)
} else { } else {
openQueue(songs, 0, false) openQueue(songs, 0, false)
} }
@ -337,7 +322,7 @@ object MusicPlayerRemote {
fun enqueue(song: Song): Boolean { fun enqueue(song: Song): Boolean {
if (musicService != null) { if (musicService != null) {
if (playingQueue.size > 0) { if (playingQueue.size > 0) {
musicService!!.addSong(song) musicService?.addSong(song)
} else { } else {
val queue = ArrayList<Song>() val queue = ArrayList<Song>()
queue.add(song) queue.add(song)
@ -353,10 +338,10 @@ object MusicPlayerRemote {
return false return false
} }
fun enqueue(songs: ArrayList<Song>): Boolean { fun enqueue(songs: List<Song>): Boolean {
if (musicService != null) { if (musicService != null) {
if (playingQueue.size > 0) { if (playingQueue.size > 0) {
musicService!!.addSongs(songs) musicService?.addSongs(songs)
} else { } else {
openQueue(songs, 0, false) openQueue(songs, 0, false)
} }
@ -407,7 +392,7 @@ object MusicPlayerRemote {
fun playFromUri(uri: Uri) { fun playFromUri(uri: Uri) {
if (musicService != null) { if (musicService != null) {
var songs: ArrayList<Song>? = null var songs: List<Song>? = null
if (uri.scheme != null && uri.authority != null) { if (uri.scheme != null && uri.authority != null) {
if (uri.scheme == ContentResolver.SCHEME_CONTENT) { if (uri.scheme == ContentResolver.SCHEME_CONTENT) {
var songId: String? = null var songId: String? = null
@ -455,6 +440,7 @@ object MusicPlayerRemote {
openQueue(songs, 0, true) openQueue(songs, 0, true)
} else { } else {
//TODO the file is not listed in the media store //TODO the file is not listed in the media store
println("The file is not listed in the media store")
} }
} }
} }

View File

@ -19,5 +19,6 @@ package code.name.monkey.retromusic.mvp
*/ */
interface BaseView { interface BaseView {
fun showEmptyView() fun showEmptyView()
} }

View File

@ -40,9 +40,7 @@ interface AlbumDetailsView {
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)
} }
@ -51,6 +49,7 @@ interface AlbumDetailsPresenter : Presenter<AlbumDetailsView> {
fun loadAlbum(albumId: Int) fun loadAlbum(albumId: Int)
fun loadMore(artistId: Int) fun loadMore(artistId: Int)
fun aboutAlbum(artist: String, album: String) fun aboutAlbum(artist: String, album: String)
class AlbumDetailsPresenterImpl @Inject constructor( class AlbumDetailsPresenterImpl @Inject constructor(

View File

@ -14,7 +14,8 @@
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.Error
import code.name.monkey.retromusic.Result.Success
import code.name.monkey.retromusic.model.Album import code.name.monkey.retromusic.model.Album
import code.name.monkey.retromusic.mvp.BaseView import code.name.monkey.retromusic.mvp.BaseView
import code.name.monkey.retromusic.mvp.Presenter import code.name.monkey.retromusic.mvp.Presenter
@ -25,7 +26,6 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import java.util.ArrayList
import javax.inject.Inject import javax.inject.Inject
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
@ -33,35 +33,35 @@ import kotlin.coroutines.CoroutineContext
* Created by hemanths on 12/08/17. * Created by hemanths on 12/08/17.
*/ */
interface AlbumsView : BaseView { interface AlbumsView : BaseView {
fun albums(albums: ArrayList<Album>)
fun albums(albums: List<Album>)
} }
interface AlbumsPresenter : Presenter<AlbumsView> { interface AlbumsPresenter : Presenter<AlbumsView> {
fun loadAlbums() fun loadAlbums()
class AlbumsPresenterImpl @Inject constructor( class AlbumsPresenterImpl @Inject constructor(
private val repository: Repository private val repository: Repository
) : PresenterImpl<AlbumsView>(), AlbumsPresenter, CoroutineScope { ) : PresenterImpl<AlbumsView>(), AlbumsPresenter, CoroutineScope {
private val job = Job()
override val coroutineContext: CoroutineContext private val job = Job()
get() = Dispatchers.IO + job
override fun detachView() { override val coroutineContext: CoroutineContext
super.detachView() get() = Dispatchers.IO + job
job.cancel()
}
override fun loadAlbums() { override fun detachView() {
launch { super.detachView()
when (val result = repository.allAlbums()) { job.cancel()
is Result.Success -> withContext(Dispatchers.Main) { }
view?.albums(result.data)
} override fun loadAlbums() {
is Result.Error -> withContext(Dispatchers.Main) { view?.showEmptyView() } launch {
} when (val result = repository.allAlbums()) {
} is Success -> withContext(Dispatchers.Main) { view?.albums(result.data) }
} is Error -> withContext(Dispatchers.Main) { view?.showEmptyView() }
} }
}
}
}
} }

View File

@ -14,7 +14,8 @@
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.Error
import code.name.monkey.retromusic.Result.Success
import code.name.monkey.retromusic.model.Artist import code.name.monkey.retromusic.model.Artist
import code.name.monkey.retromusic.mvp.BaseView import code.name.monkey.retromusic.mvp.BaseView
import code.name.monkey.retromusic.mvp.Presenter import code.name.monkey.retromusic.mvp.Presenter
@ -36,7 +37,9 @@ import kotlin.coroutines.CoroutineContext
interface ArtistDetailsView : BaseView { interface ArtistDetailsView : BaseView {
fun artist(artist: Artist) fun artist(artist: Artist)
fun artistInfo(lastFmArtist: LastFmArtist?) fun artistInfo(lastFmArtist: LastFmArtist?)
fun complete() fun complete()
} }
@ -62,12 +65,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) {
}
} }
} }
} }
@ -75,13 +74,8 @@ interface ArtistDetailsPresenter : Presenter<ArtistDetailsView> {
override fun loadArtist(artistId: Int) { override fun loadArtist(artistId: Int) {
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()
}
} }
} }
} }

View File

@ -14,18 +14,23 @@
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.Error
import code.name.monkey.retromusic.Result.Success
import code.name.monkey.retromusic.model.Artist import code.name.monkey.retromusic.model.Artist
import code.name.monkey.retromusic.mvp.BaseView 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 +38,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
@ -48,8 +54,8 @@ interface ArtistsPresenter : Presenter<ArtistsView> {
override fun loadArtists() { override fun loadArtists() {
launch { launch {
when (val result = repository.allArtists()) { when (val result = repository.allArtists()) {
is Result.Success -> withContext(Dispatchers.Main) { view?.artists(result.data) } is Success -> withContext(Dispatchers.Main) { view?.artists(result.data) }
is Result.Error -> withContext(Dispatchers.Main) { view?.showEmptyView() } is Error -> withContext(Dispatchers.Main) { view?.showEmptyView() }
} }
} }
} }

View File

@ -14,32 +14,37 @@
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.Error
import code.name.monkey.retromusic.Result.Success
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.mvp.BaseView 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,16 +55,11 @@ 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)) {
is Result.Success -> withContext(Dispatchers.Main) { is Success -> withContext(Dispatchers.Main) { view?.songs(result.data) }
view?.songs(result.data) is Error -> withContext(Dispatchers.Main) { view?.showEmptyView() }
}
is Result.Error -> withContext(Dispatchers.Main) {
view?.showEmptyView()
}
} }
} }
} }

View File

@ -14,14 +14,18 @@
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.Error
import code.name.monkey.retromusic.Result.Success
import code.name.monkey.retromusic.model.Genre import code.name.monkey.retromusic.model.Genre
import code.name.monkey.retromusic.mvp.BaseView 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 +33,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
@ -51,10 +57,8 @@ interface GenresPresenter : Presenter<GenresView> {
override fun loadGenres() { override fun loadGenres() {
launch { launch {
when (val result = repository.allGenres()) { when (val result = repository.allGenres()) {
is Result.Success -> withContext(Dispatchers.Main) { is Success -> withContext(Dispatchers.Main) { view?.genres(result.data) }
view?.genres(result.data) is Error -> withContext(Dispatchers.Main) { view?.showEmptyView() }
}
is Result.Error -> withContext(Dispatchers.Main) { view?.showEmptyView() }
} }
} }
} }

View File

@ -29,7 +29,7 @@ import javax.inject.Inject
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
interface HomeView : BaseView { interface HomeView : BaseView {
fun sections(sections: ArrayList<Home>) fun sections(sections: List<Home>)
} }
interface HomePresenter : Presenter<HomeView> { interface HomePresenter : Presenter<HomeView> {

View File

@ -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()
@ -52,9 +58,7 @@ interface PlaylistsPresenter : Presenter<PlaylistView> {
override fun playlists() { override fun playlists() {
launch { launch {
when (val result = repository.allPlaylists()) { when (val result = repository.allPlaylists()) {
is Result.Success -> withContext(Dispatchers.Main) { is Result.Success -> withContext(Dispatchers.Main) { view?.playlists(result.data) }
view?.playlists(result.data)
}
is Result.Error -> withContext(Dispatchers.Main) { view?.showEmptyView() } is Result.Error -> withContext(Dispatchers.Main) { view?.showEmptyView() }
} }
} }

View File

@ -14,11 +14,19 @@
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.Error
import code.name.monkey.retromusic.model.* import code.name.monkey.retromusic.Result.Success
import code.name.monkey.retromusic.mvp.* import code.name.monkey.retromusic.model.Playlist
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 +34,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()
@ -44,10 +53,8 @@ interface PlaylistSongsPresenter : Presenter<PlaylistSongsView> {
override fun loadPlaylistSongs(playlist: Playlist) { override fun loadPlaylistSongs(playlist: Playlist) {
launch { launch {
when (val songs = repository.getPlaylistSongs(playlist)) { when (val songs = repository.getPlaylistSongs(playlist)) {
is Result.Success -> withContext(Dispatchers.Main) { is Success -> withContext(Dispatchers.Main) { view?.songs(songs.data) }
view?.songs(songs.data) is Error -> withContext(Dispatchers.Main) { view?.showEmptyView() }
}
is Result.Error -> withContext(Dispatchers.Main) { view?.showEmptyView() }
} }
} }
} }

View File

@ -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,39 @@ 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()
class SongPresenterImpl @Inject constructor(
private val repository: Repository
) : PresenterImpl<SongView>(), SongPresenter, CoroutineScope {
private var job: Job = Job() fun loadSongs()
override val coroutineContext: CoroutineContext class SongPresenterImpl @Inject constructor(
get() = Dispatchers.IO + job private val repository: Repository
) : PresenterImpl<SongView>(), SongPresenter, CoroutineScope {
override fun loadSongs() { private var job: Job = Job()
launch {
when (val songs = repository.allSongs()) {
is Result.Success -> withContext(Dispatchers.Main) { view?.songs(songs.data) }
is Result.Error -> withContext(Dispatchers.Main) { view?.showEmptyView() }
}
}
}
override fun detachView() { override val coroutineContext: CoroutineContext
super.detachView() get() = Dispatchers.IO + job
job.cancel();
} override fun loadSongs() {
} launch {
when (val songs = repository.allSongs()) {
is Result.Success -> withContext(Dispatchers.Main) { view?.songs(songs.data) }
is Result.Error -> withContext(Dispatchers.Main) { view?.showEmptyView() }
}
}
}
override fun detachView() {
super.detachView()
job.cancel()
}
}
} }

View File

@ -844,7 +844,7 @@ public class MusicService extends Service implements
return true; return true;
} }
public void openQueue(@Nullable final ArrayList<Song> playingQueue, final int startPosition, public void openQueue(@Nullable final List<Song> playingQueue, final int startPosition,
final boolean startPlaying) { final boolean startPlaying) {
if (playingQueue != null && !playingQueue.isEmpty() && startPosition >= 0 && startPosition < playingQueue if (playingQueue != null && !playingQueue.isEmpty() && startPosition >= 0 && startPosition < playingQueue
.size()) { .size()) {

View File

@ -12,8 +12,8 @@
android:id="@+id/imageContainer" android:id="@+id/imageContainer"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="156dp" android:layout_height="156dp"
app:cardCornerRadius="16dp" android:layout_margin="8dp"
app:cardUseCompatPadding="true"> app:cardCornerRadius="16dp">
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/image" android:id="@+id/image"

View File

@ -12,8 +12,8 @@
android:id="@+id/imageContainer" android:id="@+id/imageContainer"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="256dp" android:layout_height="256dp"
app:cardCornerRadius="16dp" android:layout_margin="8dp"
app:cardUseCompatPadding="true"> app:cardCornerRadius="16dp">
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/image" android:id="@+id/image"

View File

@ -12,8 +12,8 @@
android:id="@+id/imageContainer" android:id="@+id/imageContainer"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="196dp" android:layout_height="196dp"
app:cardCornerRadius="16dp" android:layout_margin="8dp"
app:cardUseCompatPadding="true"> app:cardCornerRadius="16dp">
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/image" android:id="@+id/image"