From d2804bdcd4c53f946b9a9e8f82dd37fbd2afb200 Mon Sep 17 00:00:00 2001 From: h4h13 Date: Sat, 22 Jun 2019 23:14:21 +0530 Subject: [PATCH] Added show empty in home --- app/build.gradle | 2 +- .../mainactivity/home/BannerHomeFragment.kt | 34 +++++++--------- .../TopAndRecentlyPlayedTracksLoader.kt | 8 ++-- .../retromusic/mvp/presenter/HomePresenter.kt | 12 ++---- .../retromusic/providers/RepositoryImpl.kt | 40 +++++++++++++++++++ .../providers/SongPlayCountStore.java | 5 ++- app/src/main/res/layout/fragment_library.xml | 7 ++-- app/src/main/res/layout/home_content.xml | 7 ++-- app/src/main/res/values/strings.xml | 1 + appthemehelper/build.gradle | 6 +-- build.gradle | 10 +---- 11 files changed, 77 insertions(+), 55 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 5ccf5d413..4ae663271 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -147,7 +147,7 @@ dependencies { implementation 'com.github.bumptech.glide:okhttp3-integration:4.8.0' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' - implementation 'io.reactivex.rxjava2:rxjava:2.2.8' + implementation 'io.reactivex.rxjava2:rxjava:2.2.9' implementation('com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:0.11.0@aar') { transitive = true 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 34281a592..279a79882 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 @@ -17,6 +17,7 @@ import code.name.monkey.retromusic.Constants import code.name.monkey.retromusic.Constants.USER_BANNER import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.HomeAdapter +import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -31,7 +32,7 @@ import code.name.monkey.retromusic.mvp.presenter.HomePresenter import code.name.monkey.retromusic.util.* import com.bumptech.glide.load.engine.DiskCacheStrategy import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.disposables.CompositeDisposable +import io.reactivex.disposables.Disposable import io.reactivex.schedulers.Schedulers import kotlinx.android.synthetic.main.abs_playlists.* import kotlinx.android.synthetic.main.fragment_banner_home.* @@ -42,16 +43,12 @@ import kotlin.collections.ArrayList class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallbacks, HomeContract.HomeView { override fun showEmpty() { - + emptyContainer.show() + emptyText.setText(R.string.start_play_music) } - private lateinit var disposable: CompositeDisposable + private var disposable: Disposable? = null private lateinit var homePresenter: HomePresenter - private lateinit var contentContainerView: View - private lateinit var lastAdded: View - private lateinit var topPlayed: View - private lateinit var actionShuffle: View - private lateinit var history: View private lateinit var toolbar: Toolbar override fun onCreateView(inflater: LayoutInflater, viewGroup: ViewGroup?, savedInstanceState: Bundle?): View? { @@ -59,7 +56,10 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba } private fun loadImageFromStorage() { - disposable.add(Compressor(context!!) + if (disposable != null) { + disposable?.dispose() + } + disposable = Compressor(context!!) .setMaxHeight(300) .setMaxWidth(300) .setQuality(75) @@ -75,7 +75,7 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba } }) { userImage.setImageDrawable(ContextCompat.getDrawable(context!!, R.drawable.ic_person_flat)) - }) + } } private val displayMetrics: DisplayMetrics @@ -101,30 +101,25 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba if (!PreferenceUtil.getInstance().isHomeBanner) setStatusbarColorAuto(view) - lastAdded = view.findViewById(R.id.lastAdded) lastAdded.setOnClickListener { NavigationUtil.goToPlaylistNew(mainActivity, LastAddedPlaylist(mainActivity)) } - topPlayed = view.findViewById(R.id.topPlayed) topPlayed.setOnClickListener { NavigationUtil.goToPlaylistNew(mainActivity, MyTopTracksPlaylist(mainActivity)) } - actionShuffle = view.findViewById(R.id.actionShuffle) actionShuffle.setOnClickListener { MusicPlayerRemote.openAndShuffleQueue(SongLoader.getAllSongs(mainActivity).blockingFirst(), true) } - history = view.findViewById(R.id.history) history.setOnClickListener { NavigationUtil.goToPlaylistNew(mainActivity, HistoryPlaylist(mainActivity)) } homePresenter = HomePresenter(this) - contentContainerView = view.findViewById(R.id.contentContainer) - contentContainerView.setBackgroundColor(ThemeStore.primaryColor(context!!)) + contentContainer.setBackgroundColor(ThemeStore.primaryColor(context!!)) setupToolbar() homeAdapter = HomeAdapter(mainActivity, ArrayList(), displayMetrics) @@ -176,13 +171,12 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba override fun onResume() { super.onResume() - disposable = CompositeDisposable() getTimeOfTheDay() } override fun onDestroyView() { super.onDestroyView() - disposable.dispose() + disposable?.dispose() homePresenter.unsubscribe() } @@ -268,13 +262,13 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba .diskCacheStrategy(DiskCacheStrategy.ALL) .into(bannerImage!!) } else { - disposable.add(Compressor(context!!) + disposable = Compressor(context!!) .setQuality(100) .setCompressFormat(Bitmap.CompressFormat.WEBP) .compressToBitmapAsFlowable(File(PreferenceUtil.getInstance().bannerImage, USER_BANNER)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe { bannerImage!!.setImageBitmap(it) }) + .subscribe { bannerImage?.setImageBitmap(it) } } } loadImageFromStorage() diff --git a/app/src/main/java/code/name/monkey/retromusic/loaders/TopAndRecentlyPlayedTracksLoader.kt b/app/src/main/java/code/name/monkey/retromusic/loaders/TopAndRecentlyPlayedTracksLoader.kt index c6676a271..8cb39e7ce 100644 --- a/app/src/main/java/code/name/monkey/retromusic/loaders/TopAndRecentlyPlayedTracksLoader.kt +++ b/app/src/main/java/code/name/monkey/retromusic/loaders/TopAndRecentlyPlayedTracksLoader.kt @@ -87,11 +87,9 @@ object TopAndRecentlyPlayedTracksLoader { val songs = SongPlayCountStore.getInstance(context) .getTopPlayedResults(NUMBER_OF_TOP_TRACKS) - try { - return makeSortedCursor(context, songs, - songs!!.getColumnIndex(SongPlayCountStore.SongPlayCountColumns.ID)) - } finally { - songs?.close() + songs.use { localSongs -> + return makeSortedCursor(context, localSongs, + localSongs.getColumnIndex(SongPlayCountStore.SongPlayCountColumns.ID)) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/HomePresenter.kt b/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/HomePresenter.kt index 31d132919..c8020fdd6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/HomePresenter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/HomePresenter.kt @@ -15,15 +15,15 @@ package code.name.monkey.retromusic.mvp.presenter import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.model.Home -import code.name.monkey.retromusic.mvp.Presenter -import code.name.monkey.retromusic.mvp.contract.HomeContract import code.name.monkey.retromusic.adapter.HomeAdapter.Companion.GENRES import code.name.monkey.retromusic.adapter.HomeAdapter.Companion.PLAYLISTS import code.name.monkey.retromusic.adapter.HomeAdapter.Companion.RECENT_ALBUMS import code.name.monkey.retromusic.adapter.HomeAdapter.Companion.RECENT_ARTISTS import code.name.monkey.retromusic.adapter.HomeAdapter.Companion.TOP_ALBUMS import code.name.monkey.retromusic.adapter.HomeAdapter.Companion.TOP_ARTISTS +import code.name.monkey.retromusic.model.Home +import code.name.monkey.retromusic.mvp.Presenter +import code.name.monkey.retromusic.mvp.contract.HomeContract import code.name.monkey.retromusic.util.PreferenceUtil import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable @@ -55,7 +55,6 @@ class HomePresenter(private val view: HomeContract.HomeView) : Presenter(), Home private fun loadRecentArtists() { disposable += repository.recentArtists - .observeOn(AndroidSchedulers.mainThread()) .subscribe({ if (it.isNotEmpty()) hashSet.add(Home(0, R.string.recent_artists, 0, it, RECENT_ARTISTS, R.drawable.ic_artist_white_24dp)) view.showData(ArrayList(hashSet)) @@ -66,7 +65,6 @@ class HomePresenter(private val view: HomeContract.HomeView) : Presenter(), Home private fun loadRecentAlbums() { disposable += repository.recentAlbums - .observeOn(AndroidSchedulers.mainThread()) .subscribe({ if (it.isNotEmpty()) hashSet.add(Home(1, R.string.recent_albums, 0, it, RECENT_ALBUMS, R.drawable.ic_album_white_24dp)) view.showData(ArrayList(hashSet)) @@ -77,7 +75,6 @@ class HomePresenter(private val view: HomeContract.HomeView) : Presenter(), Home private fun loadATopAlbums() { disposable += repository.topAlbums - .observeOn(AndroidSchedulers.mainThread()) .subscribe({ if (it.isNotEmpty()) hashSet.add(Home(3, R.string.top_albums, 0, it, TOP_ALBUMS, R.drawable.ic_album_white_24dp)) view.showData(ArrayList(hashSet)) @@ -88,7 +85,6 @@ class HomePresenter(private val view: HomeContract.HomeView) : Presenter(), Home private fun loadTopArtists() { disposable += repository.topArtists - .observeOn(AndroidSchedulers.mainThread()) .subscribe({ if (it.isNotEmpty()) hashSet.add(Home(2, R.string.top_artists, 0, it, TOP_ARTISTS, R.drawable.ic_artist_white_24dp)) view.showData(ArrayList(hashSet)) @@ -99,7 +95,6 @@ class HomePresenter(private val view: HomeContract.HomeView) : Presenter(), Home private fun loadFavorite() { disposable += repository.favoritePlaylist - .observeOn(AndroidSchedulers.mainThread()) .subscribe({ if (it.isNotEmpty()) hashSet.add(Home(4, R.string.favorites, 0, it, PLAYLISTS, R.drawable.ic_favorite_white_24dp)) view.showData(ArrayList(hashSet)) @@ -110,7 +105,6 @@ class HomePresenter(private val view: HomeContract.HomeView) : Presenter(), Home private fun loadGenre() { disposable += repository.allGenres - .observeOn(AndroidSchedulers.mainThread()) .subscribe({ if (it.isNotEmpty()) hashSet.add(Home(6, R.string.genres, 0, it, GENRES, R.drawable.ic_guitar_acoustic_white_24dp)) view.showData(ArrayList(hashSet)) diff --git a/app/src/main/java/code/name/monkey/retromusic/providers/RepositoryImpl.kt b/app/src/main/java/code/name/monkey/retromusic/providers/RepositoryImpl.kt index 70ba5853e..ec46adf1b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/providers/RepositoryImpl.kt +++ b/app/src/main/java/code/name/monkey/retromusic/providers/RepositoryImpl.kt @@ -21,70 +21,110 @@ import code.name.monkey.retromusic.model.* import code.name.monkey.retromusic.model.smartplaylist.AbsSmartPlaylist import code.name.monkey.retromusic.providers.interfaces.Repository import io.reactivex.Observable +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.schedulers.Schedulers class RepositoryImpl(private val context: Context) : Repository { override val favoritePlaylist: Observable> get() = PlaylistLoader.getFavoritePlaylist(context) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) override val allSongs: Observable> get() = SongLoader.getAllSongs(context) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) override val suggestionSongs: Observable> get() = SongLoader.suggestSongs(context) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) override val allAlbums: Observable> get() = AlbumLoader.getAllAlbums(context) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) override val recentAlbums: Observable> get() = LastAddedSongsLoader.getLastAddedAlbums(context) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) override val topAlbums: Observable> get() = TopAndRecentlyPlayedTracksLoader.getTopAlbums(context) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) override val allArtists: Observable> get() = ArtistLoader.getAllArtists(context) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) override val recentArtists: Observable> get() = LastAddedSongsLoader.getLastAddedArtists(context) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) override val topArtists: Observable> get() = TopAndRecentlyPlayedTracksLoader.getTopArtists(context) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) override val allPlaylists: Observable> get() = PlaylistLoader.getAllPlaylists(context) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) override val homeList: Observable> get() = HomeLoader.getHomeLoader(context) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) override val allThings: Observable> get() = HomeLoader.getRecentAndTopThings(context) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) override val allGenres: Observable> get() = GenreLoader.getAllGenres(context) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) override fun getSong(id: Int): Observable { return SongLoader.getSong(context, id) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) } override fun getAlbum(albumId: Int): Observable { return AlbumLoader.getAlbum(context, albumId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) } override fun getArtistById(artistId: Long): Observable { return ArtistLoader.getArtist(context, artistId.toInt()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) } override fun search(query: String?): Observable> { return SearchLoader.searchAll(context, query) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) } override fun getPlaylistSongs(playlist: Playlist): Observable> { return PlaylistSongsLoader.getPlaylistSongList(context, playlist) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) } override fun getGenre(genreId: Int): Observable> { return GenreLoader.getSongs(context, genreId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) } diff --git a/app/src/main/java/code/name/monkey/retromusic/providers/SongPlayCountStore.java b/app/src/main/java/code/name/monkey/retromusic/providers/SongPlayCountStore.java index 3506ef073..6201e5a09 100644 --- a/app/src/main/java/code/name/monkey/retromusic/providers/SongPlayCountStore.java +++ b/app/src/main/java/code/name/monkey/retromusic/providers/SongPlayCountStore.java @@ -19,11 +19,12 @@ import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import android.view.animation.AccelerateInterpolator; import android.view.animation.Interpolator; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + /** * This database tracks the number of play counts for an individual song. This is used to drive * the top played tracks as well as the playlist images diff --git a/app/src/main/res/layout/fragment_library.xml b/app/src/main/res/layout/fragment_library.xml index e61a13f04..fe5f533e2 100644 --- a/app/src/main/res/layout/fragment_library.xml +++ b/app/src/main/res/layout/fragment_library.xml @@ -30,13 +30,14 @@ app:elevation="0dp"> + app:layout_scrollFlags="scroll|enterAlways" + app:strokeWidth="1dp"> + android:orientation="vertical" + android:visibility="gone"> + android:textColor="?android:textColorSecondary" /> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 85d453c17..8293786e0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -623,4 +623,5 @@ Get Premium Now playing themes, Carousel effect, Color theme and more.. Play all + Start playing music. diff --git a/appthemehelper/build.gradle b/appthemehelper/build.gradle index fd8c5f1ad..408fc4866 100644 --- a/appthemehelper/build.gradle +++ b/appthemehelper/build.gradle @@ -26,9 +26,9 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'androidx.appcompat:appcompat:1.1.0-alpha05' - implementation 'com.google.android.material:material:1.1.0-alpha05' - implementation 'androidx.preference:preference:1.1.0-alpha05' + implementation 'androidx.appcompat:appcompat:1.1.0-beta01' + implementation 'com.google.android.material:material:1.1.0-alpha07' + implementation 'androidx.preference:preference:1.1.0-beta01' implementation 'androidx.cardview:cardview:1.0.0' // Used for the list preference classes implementation 'com.afollestad.material-dialogs:core:3.0.0-alpha1' diff --git a/build.gradle b/build.gradle index a3bc94add..549d596a1 100644 --- a/build.gradle +++ b/build.gradle @@ -1,19 +1,13 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.3.31' - ext { - supportLibVersion = '1.1.0-alpha05' - firebase = "11.8.0" - retrofit = "2.3.0" - materialDialog = "2.0.0" - } + ext.kotlin_version = '1.3.40' repositories { jcenter() google() } dependencies { - classpath 'com.android.tools.build:gradle:3.3.1' + classpath 'com.android.tools.build:gradle:3.3.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } }