diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/HomeAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/HomeAdapter.kt index 89661111..390a2d0a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/HomeAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/HomeAdapter.kt @@ -15,20 +15,27 @@ import code.name.monkey.retromusic.adapter.song.SongAdapter import code.name.monkey.retromusic.loaders.PlaylistSongsLoader import code.name.monkey.retromusic.model.Album import code.name.monkey.retromusic.model.Artist -import code.name.monkey.retromusic.model.Home import code.name.monkey.retromusic.model.Playlist +import code.name.monkey.retromusic.providers.interfaces.Repository import code.name.monkey.retromusic.util.PreferenceUtil import com.google.android.material.textview.MaterialTextView class HomeAdapter( private val activity: AppCompatActivity, - private var homes: List, - private val displayMetrics: DisplayMetrics + private val displayMetrics: DisplayMetrics, + private val repository: Repository ) : RecyclerView.Adapter() { override fun getItemViewType(position: Int): Int { - return homes[position].homeSection + return when (position) { + 0 -> TOP_ARTISTS + 1 -> TOP_ALBUMS + 2 -> RECENT_ARTISTS + 3 -> RECENT_ALBUMS + 4 -> PLAYLISTS + else -> -1 + } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { @@ -43,87 +50,92 @@ class HomeAdapter( } override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - val home = homes[position] + println(getItemViewType(position)) when (getItemViewType(position)) { - - RECENT_ALBUMS, TOP_ALBUMS -> { + RECENT_ALBUMS -> { val viewHolder = holder as AlbumViewHolder - viewHolder.bindView(home) + viewHolder.bindView(repository.recentAlbums(), R.string.recent_albums, R.string.recent_added_albums) } - RECENT_ARTISTS, TOP_ARTISTS -> { + TOP_ALBUMS -> { + val viewHolder = holder as AlbumViewHolder + + viewHolder.bindView(repository.topAlbums(), R.string.top_albums, R.string.most_played_albums) + } + RECENT_ARTISTS -> { val viewHolder = holder as ArtistViewHolder - viewHolder.bindView(home) + viewHolder.bindView(repository.recentArtists(), R.string.recent_artists, R.string.recent_added_artists) + } + TOP_ARTISTS -> { + val viewHolder = holder as ArtistViewHolder + + viewHolder.bindView(repository.recentArtists(), R.string.top_artists, R.string.most_played_artists) } PLAYLISTS -> { val viewHolder = holder as PlaylistViewHolder - viewHolder.bindView(home) + viewHolder.bindView(repository.favoritePlaylist, R.string.favorites, R.string.favorites_songs) } } } override fun getItemCount(): Int { - return homes.size - } - - fun swapData(finalList: List) { - homes = finalList - notifyDataSetChanged() + return 5 } companion object { - @IntDef(RECENT_ALBUMS, TOP_ALBUMS, RECENT_ARTISTS, TOP_ARTISTS, GENRES, PLAYLISTS) + @IntDef(RECENT_ALBUMS, TOP_ALBUMS, RECENT_ARTISTS, TOP_ARTISTS, PLAYLISTS) @Retention(AnnotationRetention.SOURCE) annotation class HomeSection - const val RECENT_ALBUMS = 0 + const val RECENT_ALBUMS = 3 const val TOP_ALBUMS = 1 const val RECENT_ARTISTS = 2 - const val TOP_ARTISTS = 3 - const val GENRES = 4 - const val PLAYLISTS = 5 + const val TOP_ARTISTS = 0 + const val PLAYLISTS = 4 } private inner class AlbumViewHolder(view: View) : AbsHomeViewItem(view) { - fun bindView(home: Home) { + fun bindView(list: ArrayList, titleRes: Int, subtitleRes: Int) { recyclerView.apply { - adapter = AlbumFullWidthAdapter(activity, home.arrayList as ArrayList, displayMetrics) + adapter = AlbumFullWidthAdapter(activity, list, displayMetrics) } - title.text = activity.getString(home.title) - text.text = activity.getString(home.subTitle) + title.text = activity.getString(titleRes) + text.text = activity.getString(subtitleRes) } } - private inner class ArtistViewHolder(view: View) : AbsHomeViewItem(view) { - fun bindView(home: Home) { + inner class ArtistViewHolder(view: View) : AbsHomeViewItem(view) { + fun bindView(list: ArrayList, titleRes: Int, subtitleRes: Int) { recyclerView.apply { layoutManager = GridLayoutManager(activity, 1, GridLayoutManager.HORIZONTAL, false) - val artistAdapter = ArtistAdapter(activity, home.arrayList as ArrayList, + val artistAdapter = ArtistAdapter(activity, list, PreferenceUtil.getInstance(activity).getHomeGridStyle(activity), false, null) adapter = artistAdapter } - title.text = activity.getString(home.title) - text.text = activity.getString(home.subTitle) + title.text = activity.getString(titleRes) + text.text = activity.getString(subtitleRes) } } private inner class PlaylistViewHolder(view: View) : AbsHomeViewItem(view) { - fun bindView(home: Home) { - val songs = PlaylistSongsLoader.getPlaylistSongList(activity, home.arrayList[0] as Playlist) - recyclerView.apply { - val songAdapter = SongAdapter(activity, songs, R.layout.item_album_card, false, null) - layoutManager = GridLayoutManager(activity, 1, GridLayoutManager.HORIZONTAL, false) - adapter = songAdapter + fun bindView(arrayList: ArrayList, titleRes: Int, subtitleRes: Int) { + if (arrayList.isNotEmpty()) { + val songs = PlaylistSongsLoader.getPlaylistSongList(activity, arrayList[0]) + recyclerView.apply { + val songAdapter = SongAdapter(activity, songs, R.layout.item_album_card, false, null) + layoutManager = GridLayoutManager(activity, 1, GridLayoutManager.HORIZONTAL, false) + adapter = songAdapter + } + title.text = activity.getString(titleRes) + text.text = activity.getString(subtitleRes) } - title.text = activity.getString(home.title) - text.text = activity.getString(home.subTitle) } } - private open inner class AbsHomeViewItem(itemView: View) : RecyclerView.ViewHolder(itemView) { + open inner class AbsHomeViewItem(itemView: View) : RecyclerView.ViewHolder(itemView) { val recyclerView: RecyclerView = itemView.findViewById(R.id.recyclerView) val title: MaterialTextView = itemView.findViewById(R.id.title) val text: MaterialTextView = itemView.findViewById(R.id.text) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt index 433282e6..667d5646 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt @@ -28,8 +28,8 @@ import code.name.monkey.retromusic.model.Home import code.name.monkey.retromusic.model.smartplaylist.HistoryPlaylist import code.name.monkey.retromusic.model.smartplaylist.LastAddedPlaylist import code.name.monkey.retromusic.model.smartplaylist.MyTopTracksPlaylist -import code.name.monkey.retromusic.mvp.presenter.HomePresenter import code.name.monkey.retromusic.mvp.presenter.HomeView +import code.name.monkey.retromusic.providers.interfaces.Repository import code.name.monkey.retromusic.util.Compressor import code.name.monkey.retromusic.util.NavigationUtil import code.name.monkey.retromusic.util.PreferenceUtil @@ -48,17 +48,14 @@ import javax.inject.Inject class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallbacks, HomeView { private lateinit var homeAdapter: HomeAdapter - @Inject - lateinit var homePresenter: HomePresenter + lateinit var repository: Repository private var disposable: CompositeDisposable = CompositeDisposable() private lateinit var toolbar: Toolbar override fun sections(sections: ArrayList) { val finalList = sections.sortedWith(compareBy { it.priority }) - homeAdapter.swapData(finalList) - if (sections.isEmpty()) { showEmptyView() @@ -67,7 +64,6 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba } } - override fun onCreateView(inflater: LayoutInflater, viewGroup: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(if (PreferenceUtil.getInstance(requireContext()).isHomeBanner) R.layout.fragment_banner_home else R.layout.fragment_home, viewGroup, false) } @@ -137,10 +133,7 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba titleWelcome.text = String.format("%s", PreferenceUtil.getInstance(requireContext()).userName) App.musicComponent.inject(this) - homePresenter.attachView(this) - homePresenter.loadSections() - - homeAdapter = HomeAdapter(mainActivity, ArrayList(), displayMetrics) + homeAdapter = HomeAdapter(mainActivity, displayMetrics, repository) recyclerView.apply { layoutManager = LinearLayoutManager(mainActivity) @@ -183,7 +176,6 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba override fun onDestroyView() { super.onDestroyView() disposable.dispose() - homePresenter.detachView() } override fun showEmptyView() { diff --git a/app/src/main/res/layout/section_recycler_view.xml b/app/src/main/res/layout/section_recycler_view.xml index c71446a4..f68e7dda 100644 --- a/app/src/main/res/layout/section_recycler_view.xml +++ b/app/src/main/res/layout/section_recycler_view.xml @@ -60,7 +60,6 @@ android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="16dp" android:nestedScrollingEnabled="false" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"