diff --git a/app/build.gradle b/app/build.gradle index 74796219..143dd68d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,8 +13,8 @@ android { vectorDrawables.useSupportLibrary = true applicationId "code.name.monkey.retromusic" - versionCode 379 - versionName '3.4.400-beta05' + versionCode 380 + versionName '3.4.400-beta06' multiDexEnabled true diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt index 9aad95d3..eb740960 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt @@ -244,6 +244,7 @@ class MainActivity : AbsSlidingMusicPanelActivity(), SharedPreferences.OnSharedP 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() diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt index 0692f740..902ad982 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt @@ -12,6 +12,7 @@ import android.view.ViewGroup import android.widget.TextView import android.widget.Toast import androidx.annotation.LayoutRes +import androidx.appcompat.widget.AppCompatImageView import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -22,7 +23,6 @@ import code.name.monkey.retromusic.BuildConfig import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsBaseActivity import code.name.monkey.retromusic.extensions.applyToolbar -import code.name.monkey.retromusic.views.IconImageView import com.anjlab.android.iab.v3.BillingProcessor import com.anjlab.android.iab.v3.SkuDetails import com.anjlab.android.iab.v3.TransactionDetails @@ -161,7 +161,10 @@ private class SkuDetailsLoadAsyncTask internal constructor(supportDevelopmentAct } } -class SkuDetailsAdapter(private var donationsDialog: SupportDevelopmentActivity, objects: List) : RecyclerView.Adapter() { +class SkuDetailsAdapter( + private var donationsDialog: SupportDevelopmentActivity, + objects: List +) : RecyclerView.Adapter() { private var skuDetailsList: List = ArrayList() init { @@ -218,7 +221,7 @@ class SkuDetailsAdapter(private var donationsDialog: SupportDevelopmentActivity, var title: TextView = view.findViewById(R.id.itemTitle) var text: TextView = view.findViewById(R.id.itemText) var price: TextView = view.findViewById(R.id.itemPrice) - var image: IconImageView = view.findViewById(R.id.itemImage) + var image: AppCompatImageView = view.findViewById(R.id.itemImage) } companion object { 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/java/code/name/monkey/retromusic/fragments/settings/ThemeSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ThemeSettingsFragment.kt index 4adff377..67185f8c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ThemeSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ThemeSettingsFragment.kt @@ -86,6 +86,16 @@ class ThemeSettingsFragment : AbsSettingsFragment() { true } + val desaturatedColor: ATESwitchPreference? = findPreference(PreferenceUtil.DESATURATED_COLOR) + desaturatedColor?.setOnPreferenceChangeListener { _, value -> + val desaturated = value as Boolean + ThemeStore.prefs(requireContext()).edit().putBoolean("desaturated_color", desaturated).apply() + PreferenceUtil.getInstance(requireContext()).setDesaturatedColor(desaturated) + requireActivity().recreate() + true + } + + val colorAppShortcuts: TwoStatePreference = findPreference("should_color_app_shortcuts")!! if (!VersionUtils.hasNougatMR()) { colorAppShortcuts.isVisible = false diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.java index 5017139f..49ad9f1e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.java @@ -59,6 +59,7 @@ import code.name.monkey.retromusic.transform.VerticalStackTransformer; public final class PreferenceUtil { public static final String LIBRARY_CATEGORIES = "library_categories"; + public static final String DESATURATED_COLOR = "desaturated_color"; public static final String BLACK_THEME = "black_theme"; public static final String DIALOG_CORNER = "dialog_corner"; public static final String KEEP_SCREEN_ON = "keep_screen_on"; @@ -181,6 +182,16 @@ public final class PreferenceUtil { } } + public boolean desaturatedColor() { + return mPreferences.getBoolean(DESATURATED_COLOR, false); + } + + public void setDesaturatedColor(boolean value) { + final SharedPreferences.Editor editor = mPreferences.edit(); + editor.putBoolean(DESATURATED_COLOR, value); + editor.apply(); + } + public boolean getSleepTimerFinishMusic() { return mPreferences.getBoolean(SLEEP_TIMER_FINISH_SONG, false); } diff --git a/app/src/main/java/code/name/monkey/retromusic/views/ColorIconsImageView.kt b/app/src/main/java/code/name/monkey/retromusic/views/ColorIconsImageView.kt index 7f16a611..8663e3ba 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/ColorIconsImageView.kt +++ b/app/src/main/java/code/name/monkey/retromusic/views/ColorIconsImageView.kt @@ -22,6 +22,7 @@ import androidx.appcompat.widget.AppCompatImageView import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.RetroColorUtil @@ -49,7 +50,7 @@ class ColorIconsImageView : AppCompatImageView { private fun setIconBackgroundColor(color: Int) { setBackgroundResource(R.drawable.color_circle_gradient) - if (ATHUtil.isWindowBackgroundDark(context)) { + if (ATHUtil.isWindowBackgroundDark(context) && PreferenceUtil.getInstance(context).desaturatedColor()) { val desaturatedColor = RetroColorUtil.desaturateColor(color, 0.4f) backgroundTintList = ColorStateList.valueOf(desaturatedColor) imageTintList = ColorStateList.valueOf(ATHUtil.resolveColor(context, R.attr.colorPrimary)) @@ -61,5 +62,4 @@ class ColorIconsImageView : AppCompatImageView { invalidate() } - } diff --git a/app/src/main/res/layout-land/fragment_banner_home.xml b/app/src/main/res/layout-land/fragment_banner_home.xml index dad7c6ba..8eadef8d 100644 --- a/app/src/main/res/layout-land/fragment_banner_home.xml +++ b/app/src/main/res/layout-land/fragment_banner_home.xml @@ -115,6 +115,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" app:cardElevation="8dp" + app:cardBackgroundColor="?colorPrimary" app:shapeAppearanceOverlay="@style/TopCornerCardView"> diff --git a/app/src/main/res/layout-xlarge-land/fragment_banner_home.xml b/app/src/main/res/layout-xlarge-land/fragment_banner_home.xml index fb5c53ad..d283285d 100644 --- a/app/src/main/res/layout-xlarge-land/fragment_banner_home.xml +++ b/app/src/main/res/layout-xlarge-land/fragment_banner_home.xml @@ -111,6 +111,7 @@ android:layout_height="wrap_content" android:layout_marginStart="@dimen/toolbar_margin_horizontal" android:layout_marginEnd="@dimen/toolbar_margin_horizontal" + app:cardBackgroundColor="?colorPrimary" app:cardElevation="8dp" app:shapeAppearanceOverlay="@style/TopCornerCardView"> diff --git a/app/src/main/res/layout-xlarge/fragment_banner_home.xml b/app/src/main/res/layout-xlarge/fragment_banner_home.xml index f858195c..7b125b7a 100644 --- a/app/src/main/res/layout-xlarge/fragment_banner_home.xml +++ b/app/src/main/res/layout-xlarge/fragment_banner_home.xml @@ -112,6 +112,7 @@ android:layout_marginStart="@dimen/toolbar_margin_horizontal" android:layout_marginEnd="@dimen/toolbar_margin_horizontal" app:cardElevation="8dp" + app:cardBackgroundColor="?colorPrimary" app:shapeAppearanceOverlay="@style/TopCornerCardView"> diff --git a/app/src/main/res/layout/fragment_banner_home.xml b/app/src/main/res/layout/fragment_banner_home.xml index 4048fec3..f66cf72a 100644 --- a/app/src/main/res/layout/fragment_banner_home.xml +++ b/app/src/main/res/layout/fragment_banner_home.xml @@ -104,6 +104,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" app:cardElevation="8dp" + app:cardBackgroundColor="?colorPrimary" app:shapeAppearanceOverlay="@style/TopCornerCardView"> diff --git a/app/src/main/res/layout/home_content.xml b/app/src/main/res/layout/home_content.xml index c2ecf56a..852ef0c4 100644 --- a/app/src/main/res/layout/home_content.xml +++ b/app/src/main/res/layout/home_content.xml @@ -20,7 +20,6 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="?colorPrimary" android:descendantFocusability="blocksDescendants" android:focusable="true" android:focusableInTouchMode="true" 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" diff --git a/app/src/main/res/xml/pref_general.xml b/app/src/main/res/xml/pref_general.xml index 4a498530..6da39af5 100755 --- a/app/src/main/res/xml/pref_general.xml +++ b/app/src/main/res/xml/pref_general.xml @@ -23,6 +23,7 @@ android:key="category_color" android:layout="@layout/preference_category_title" android:title="@string/colors"> + + +