From a25c80a9bc2d6cf95803f83e8e18f6d926057d54 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Fri, 10 Sep 2021 18:20:08 +0530 Subject: [PATCH 001/149] Added placeholders for images --- .../retromusic/glide/RetroGlideExtension.kt | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.kt b/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.kt index 3f5edc8cb..f51a3cd05 100644 --- a/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.kt +++ b/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.kt @@ -34,11 +34,11 @@ import java.io.File @GlideExtension object RetroGlideExtension { - private const val DEFAULT_ERROR_ARTIST_IMAGE = + private const val DEFAULT_ARTIST_IMAGE = R.drawable.default_artist_art - private const val DEFAULT_ERROR_SONG_IMAGE: Int = R.drawable.default_audio_art - private const val DEFAULT_ERROR_ALBUM_IMAGE = R.drawable.default_album_art - private const val DEFAULT_ERROR_IMAGE_BANNER = R.drawable.material_design_default + private const val DEFAULT_SONG_IMAGE: Int = R.drawable.default_audio_art + private const val DEFAULT_ALBUM_IMAGE = R.drawable.default_album_art + private const val DEFAULT_IMAGE_BANNER = R.drawable.material_design_default private val DEFAULT_DISK_CACHE_STRATEGY_ARTIST = DiskCacheStrategy.RESOURCE private val DEFAULT_DISK_CACHE_STRATEGY = DiskCacheStrategy.NONE @@ -96,8 +96,9 @@ object RetroGlideExtension { return baseRequestOptions .diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY_ARTIST) .priority(Priority.LOW) - .error(DEFAULT_ERROR_ARTIST_IMAGE) + .error(DEFAULT_ARTIST_IMAGE) .override(SIZE_ORIGINAL, SIZE_ORIGINAL) + .placeholder(DEFAULT_ARTIST_IMAGE) .signature(createSignature(artist)) } @@ -108,7 +109,8 @@ object RetroGlideExtension { song: Song ): BaseRequestOptions<*> { return baseRequestOptions.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) - .error(DEFAULT_ERROR_SONG_IMAGE) + .error(DEFAULT_SONG_IMAGE) + .placeholder(DEFAULT_SONG_IMAGE) .signature(createSignature(song)) } @@ -119,7 +121,8 @@ object RetroGlideExtension { song: Song ): BaseRequestOptions<*> { return baseRequestOptions.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) - .error(DEFAULT_ERROR_ALBUM_IMAGE) + .error(DEFAULT_ALBUM_IMAGE) + .placeholder(DEFAULT_ALBUM_IMAGE) .signature(createSignature(song)) } @@ -141,8 +144,8 @@ object RetroGlideExtension { file: File ): BaseRequestOptions<*> { return baseRequestOptions.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) - .placeholder(DEFAULT_ERROR_IMAGE_BANNER) - .error(DEFAULT_ERROR_IMAGE_BANNER) + .placeholder(DEFAULT_IMAGE_BANNER) + .error(DEFAULT_IMAGE_BANNER) .signature(createSignature(file)) } @@ -152,7 +155,7 @@ object RetroGlideExtension { baseRequestOptions: BaseRequestOptions<*> ): BaseRequestOptions<*> { return baseRequestOptions.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) - .error(DEFAULT_ERROR_ALBUM_IMAGE) + .error(DEFAULT_ALBUM_IMAGE) } private fun createSignature(song: Song): Key { From f9c918234d9207a5159c7d637dd81ad66e482d47 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 11 Sep 2021 11:41:16 +0530 Subject: [PATCH 002/149] Fixed inconsistent transitions --- .../fragments/base/AbsRecyclerViewFragment.kt | 7 +++-- .../retromusic/fragments/home/HomeFragment.kt | 2 -- .../res/animator/nav_default_enter_anim.xml | 30 +++++++++++++++++++ .../res/animator/nav_default_exit_anim.xml | 9 ++++++ .../animator/nav_default_pop_enter_anim.xml | 30 +++++++++++++++++++ .../animator/nav_default_pop_exit_anim.xml | 9 ++++++ 6 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 app/src/main/res/animator/nav_default_enter_anim.xml create mode 100644 app/src/main/res/animator/nav_default_exit_anim.xml create mode 100644 app/src/main/res/animator/nav_default_pop_enter_anim.xml create mode 100644 app/src/main/res/animator/nav_default_pop_exit_anim.xml diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt index 87227dc9c..3167e9d49 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt @@ -18,6 +18,7 @@ import android.os.Bundle import android.view.* import androidx.annotation.NonNull import androidx.annotation.StringRes +import androidx.appcompat.widget.Toolbar import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.core.view.doOnPreDraw import androidx.core.view.updatePadding @@ -48,8 +49,6 @@ abstract class AbsRecyclerViewFragment, LM : Recycle override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = FragmentMainRecyclerBinding.bind(view) - enterTransition = MaterialFadeThrough() - exitTransition = MaterialFadeThrough() postponeEnterTransition() view.doOnPreDraw { startPostponedEnterTransition() } @@ -61,6 +60,10 @@ abstract class AbsRecyclerViewFragment, LM : Recycle setupToolbar() } + fun toolbar(): Toolbar { + return binding.toolbar + } + private fun setupToolbar() { binding.toolbar.setNavigationOnClickListener { exitTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true).addTarget(requireView()) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt index b35c90a40..d55f196b0 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt @@ -53,8 +53,6 @@ class HomeFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = getBinding(PreferenceUtil.isHomeBanner, view) - enterTransition = MaterialFadeThrough() - exitTransition = MaterialFadeThrough() mainActivity.setSupportActionBar(binding.toolbar) mainActivity.supportActionBar?.title = null setStatusBarColorAuto(view) diff --git a/app/src/main/res/animator/nav_default_enter_anim.xml b/app/src/main/res/animator/nav_default_enter_anim.xml new file mode 100644 index 000000000..c8663ea41 --- /dev/null +++ b/app/src/main/res/animator/nav_default_enter_anim.xml @@ -0,0 +1,30 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/animator/nav_default_exit_anim.xml b/app/src/main/res/animator/nav_default_exit_anim.xml new file mode 100644 index 000000000..079bd11a8 --- /dev/null +++ b/app/src/main/res/animator/nav_default_exit_anim.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/animator/nav_default_pop_enter_anim.xml b/app/src/main/res/animator/nav_default_pop_enter_anim.xml new file mode 100644 index 000000000..c8663ea41 --- /dev/null +++ b/app/src/main/res/animator/nav_default_pop_enter_anim.xml @@ -0,0 +1,30 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/animator/nav_default_pop_exit_anim.xml b/app/src/main/res/animator/nav_default_pop_exit_anim.xml new file mode 100644 index 000000000..079bd11a8 --- /dev/null +++ b/app/src/main/res/animator/nav_default_pop_exit_anim.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file From 2c380b9844154111c74b698f17355414902ff1b0 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 11 Sep 2021 12:03:12 +0530 Subject: [PATCH 003/149] Rename .java to .kt --- .../base/{AbsMultiSelectAdapter.java => AbsMultiSelectAdapter.kt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename app/src/main/java/code/name/monkey/retromusic/adapter/base/{AbsMultiSelectAdapter.java => AbsMultiSelectAdapter.kt} (100%) diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.java b/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt similarity index 100% rename from app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.java rename to app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt From 162e8ba2dcbdb3b2755fd15763977ca63d9baddb Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 11 Sep 2021 12:03:19 +0530 Subject: [PATCH 004/149] Removed cab updating animation --- .../adapter/base/AbsMultiSelectAdapter.kt | 274 +++++++----------- 1 file changed, 103 insertions(+), 171 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt index 581141bf5..3322d7519 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt @@ -1,182 +1,114 @@ -package code.name.monkey.retromusic.adapter.base; +package code.name.monkey.retromusic.adapter.base -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.Menu; -import android.view.MenuItem; +import android.content.Context +import android.view.Menu +import android.view.MenuItem +import androidx.annotation.MenuRes +import androidx.recyclerview.widget.RecyclerView +import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.interfaces.ICabHolder +import com.afollestad.materialcab.MaterialCab +import java.util.* -import androidx.annotation.MenuRes; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.widget.AppCompatTextView; -import androidx.appcompat.widget.Toolbar; -import androidx.recyclerview.widget.RecyclerView; - -import com.afollestad.materialcab.MaterialCab; - -import java.util.ArrayList; -import java.util.List; - -import code.name.monkey.retromusic.R; -import code.name.monkey.retromusic.interfaces.ICabHolder; - -public abstract class AbsMultiSelectAdapter - extends RecyclerView.Adapter implements MaterialCab.Callback { - - @Nullable - private final ICabHolder ICabHolder; - private final Context context; - private MaterialCab cab; - private final List checked; - private int menuRes; - private AppCompatTextView dummyText; - private int oldSize = 0; - - public AbsMultiSelectAdapter( - @NonNull Context context, @Nullable ICabHolder ICabHolder, @MenuRes int menuRes) { - this.ICabHolder = ICabHolder; - checked = new ArrayList<>(); - this.menuRes = menuRes; - this.context = context; - } - - @Override - public boolean onCabCreated(MaterialCab materialCab, Menu menu) { - playCreateAnim(materialCab); - createDummyTextView(); - return true; - } - - @Override - public boolean onCabFinished(MaterialCab materialCab) { - clearChecked(); - cab.getToolbar().removeView(dummyText); - oldSize = 0; - return true; - } - - @Override - public boolean onCabItemClicked(MenuItem menuItem) { - if (menuItem.getItemId() == R.id.action_multi_select_adapter_check_all) { - checkAll(); - } else { - onMultipleItemAction(menuItem, new ArrayList<>(checked)); - cab.finish(); - clearChecked(); +abstract class AbsMultiSelectAdapter( + context: Context, private val ICabHolder: ICabHolder?, @MenuRes menuRes: Int +) : RecyclerView.Adapter(), MaterialCab.Callback { + private val context: Context + private var cab: MaterialCab? = null + private val checked: MutableList + private var menuRes: Int + override fun onCabCreated(materialCab: MaterialCab, menu: Menu): Boolean { + return true } - return true; - } - protected void checkAll() { - if (ICabHolder != null) { - checked.clear(); - for (int i = 0; i < getItemCount(); i++) { - I identifier = getIdentifier(i); - if (identifier != null) { - checked.add(identifier); - } - } - notifyDataSetChanged(); - updateCab(); + override fun onCabFinished(materialCab: MaterialCab): Boolean { + clearChecked() + return true } - } - @Nullable - protected abstract I getIdentifier(int position); - - protected String getName(I object) { - return object.toString(); - } - - protected boolean isChecked(I identifier) { - return checked.contains(identifier); - } - - protected boolean isInQuickSelectMode() { - return cab != null && cab.isActive(); - } - - protected abstract void onMultipleItemAction(MenuItem menuItem, List selection); - - protected void setMultiSelectMenuRes(@MenuRes int menuRes) { - this.menuRes = menuRes; - } - - protected boolean toggleChecked(final int position) { - if (ICabHolder != null) { - I identifier = getIdentifier(position); - if (identifier == null) { - return false; - } - - if (!checked.remove(identifier)) { - checked.add(identifier); - } - - notifyItemChanged(position); - updateCab(); - return true; - } - return false; - } - - private void clearChecked() { - checked.clear(); - notifyDataSetChanged(); - } - - @SuppressLint({"StringFormatInvalid", "StringFormatMatches"}) - private void updateCab() { - if (ICabHolder != null) { - if (cab == null || !cab.isActive()) { - cab = ICabHolder.openCab(menuRes, this); - } - final int size = checked.size(); - if (size <= 0) { - cab.finish(); - } else if (size == 1) { - cab.setTitle(context.getString(R.string.x_selected, size)); - if (oldSize == 0) { - cab.getToolbar().addView(dummyText); - } - } else { - AppCompatTextView title = (AppCompatTextView) cab.getToolbar().getChildAt(2); - dummyText.setText(title.getText()); - - title.setAlpha(0); - - cab.setTitle(context.getString(R.string.x_selected, size)); - dummyText.setTranslationX(title.getLeft() - dummyText.getLeft()); - - dummyText.setAlpha(1); - - dummyText.setTranslationY(0); - if (oldSize > size) { - title.setTranslationY(40); - dummyText.animate().translationY(-40).alpha(0.0F).setDuration(300).start(); + override fun onCabItemClicked(menuItem: MenuItem): Boolean { + if (menuItem.itemId == R.id.action_multi_select_adapter_check_all) { + checkAll() } else { - title.setTranslationY(-40); - dummyText.animate().translationY(40).alpha(0.0F).setDuration(300).start(); + onMultipleItemAction(menuItem, ArrayList(checked)) + cab!!.finish() + clearChecked() } - title.animate().translationY(0).alpha(1.0F).setDuration(300).start(); - } - oldSize = size; + return true } - } - private void playCreateAnim(MaterialCab materialCab) { - Toolbar cabToolbar = materialCab.getToolbar(); - int height = context.getResources().getDimensionPixelSize(R.dimen.toolbar_height); - cabToolbar.setTranslationY(-height); - cabToolbar.animate().translationYBy(height).setDuration(300).start(); - } + private fun checkAll() { + if (ICabHolder != null) { + checked.clear() + for (i in 0 until itemCount) { + val identifier = getIdentifier(i) + if (identifier != null) { + checked.add(identifier) + } + } + notifyDataSetChanged() + updateCab() + } + } - private void createDummyTextView() { - if (dummyText != null) return; - dummyText = new AppCompatTextView(context); - dummyText.setSingleLine(); - dummyText.setTextAppearance(context, R.style.ToolbarTextAppearanceNormal); - Toolbar.LayoutParams l1 = new Toolbar.LayoutParams(Toolbar.LayoutParams.WRAP_CONTENT, Toolbar.LayoutParams.WRAP_CONTENT); - dummyText.setLayoutParams(l1); - } -} + protected abstract fun getIdentifier(position: Int): I? + protected open fun getName(`object`: I): String? { + return `object`.toString() + } + + protected fun isChecked(identifier: I): Boolean { + return checked.contains(identifier) + } + + protected val isInQuickSelectMode: Boolean + get() = cab != null && cab!!.isActive + + protected abstract fun onMultipleItemAction(menuItem: MenuItem?, selection: List?) + protected fun setMultiSelectMenuRes(@MenuRes menuRes: Int) { + this.menuRes = menuRes + } + + protected fun toggleChecked(position: Int): Boolean { + if (ICabHolder != null) { + val identifier = getIdentifier(position) ?: return false + if (!checked.remove(identifier)) { + checked.add(identifier) + } + notifyItemChanged(position) + updateCab() + return true + } + return false + } + + private fun clearChecked() { + checked.clear() + notifyDataSetChanged() + } + + private fun updateCab() { + if (ICabHolder != null) { + if (cab == null || !cab!!.isActive) { + cab = ICabHolder.openCab(menuRes, this) + } + val size = checked.size + when { + size <= 0 -> { + cab!!.finish() + } + size == 1 -> { + cab!!.setTitle(getName(checked[0])) + } + else -> { + cab!!.setTitle(context.getString(R.string.x_selected, size)) + } + } + } + } + + init { + checked = ArrayList() + this.menuRes = menuRes + this.context = context + } +} \ No newline at end of file From d8c21ba7bb8836a4a1912b19baef5c0bfc0a3ce1 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 11 Sep 2021 12:07:52 +0530 Subject: [PATCH 005/149] Removed cab updating animation --- .../monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt index 3322d7519..6ca95b255 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt @@ -63,7 +63,7 @@ abstract class AbsMultiSelectAdapter( protected val isInQuickSelectMode: Boolean get() = cab != null && cab!!.isActive - protected abstract fun onMultipleItemAction(menuItem: MenuItem?, selection: List?) + protected abstract fun onMultipleItemAction(menuItem: MenuItem, selection: List) protected fun setMultiSelectMenuRes(@MenuRes menuRes: Int) { this.menuRes = menuRes } From 6cc0985ab67d032ecad2dd4c09b659a40c909f28 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 11 Sep 2021 16:52:47 +0530 Subject: [PATCH 006/149] Added color change animation on cab creation --- .../retromusic/adapter/SongFileAdapter.kt | 2 +- .../retromusic/adapter/album/AlbumAdapter.kt | 2 +- .../adapter/artist/ArtistAdapter.kt | 2 +- .../adapter/base/AbsMultiSelectAdapter.kt | 31 ++++++++++++++----- .../adapter/playlist/PlaylistAdapter.kt | 2 +- .../retromusic/adapter/song/SongAdapter.kt | 2 +- .../monkey/retromusic/util/ColorAnimUtil.kt | 19 ++++++++++++ .../retromusic/util/RetroColorUtil.java | 11 +++++++ 8 files changed, 58 insertions(+), 13 deletions(-) create mode 100644 app/src/main/java/code/name/monkey/retromusic/util/ColorAnimUtil.kt diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt index 323eae4ea..7160568d7 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt @@ -40,7 +40,7 @@ import kotlin.math.log10 import kotlin.math.pow class SongFileAdapter( - private val activity: AppCompatActivity, + override val activity: AppCompatActivity, private var dataSet: List, private val itemLayoutRes: Int, private val iCallbacks: ICallbacks?, diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt index 8f9e00f03..6ec336c45 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt @@ -39,7 +39,7 @@ import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import me.zhanghai.android.fastscroll.PopupTextProvider open class AlbumAdapter( - val activity: FragmentActivity, + override val activity: FragmentActivity, var dataSet: List, var itemLayoutRes: Int, iCabHolder: ICabHolder?, diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/artist/ArtistAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/artist/ArtistAdapter.kt index 2de75bc15..bff1666c6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/artist/ArtistAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/artist/ArtistAdapter.kt @@ -42,7 +42,7 @@ import me.zhanghai.android.fastscroll.PopupTextProvider import java.util.* class ArtistAdapter( - val activity: FragmentActivity, + override val activity: FragmentActivity, var dataSet: List, var itemLayoutRes: Int, val ICabHolder: ICabHolder?, diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt index 6ca95b255..ccffec7eb 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt @@ -1,28 +1,44 @@ package code.name.monkey.retromusic.adapter.base -import android.content.Context +import android.graphics.Color import android.view.Menu import android.view.MenuItem import androidx.annotation.MenuRes +import androidx.fragment.app.FragmentActivity import androidx.recyclerview.widget.RecyclerView import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.extensions.surfaceColor import code.name.monkey.retromusic.interfaces.ICabHolder +import code.name.monkey.retromusic.util.ColorAnimUtil +import code.name.monkey.retromusic.util.RetroColorUtil import com.afollestad.materialcab.MaterialCab import java.util.* abstract class AbsMultiSelectAdapter( - context: Context, private val ICabHolder: ICabHolder?, @MenuRes menuRes: Int + open val activity: FragmentActivity, private val ICabHolder: ICabHolder?, @MenuRes menuRes: Int ) : RecyclerView.Adapter(), MaterialCab.Callback { - private val context: Context private var cab: MaterialCab? = null private val checked: MutableList private var menuRes: Int override fun onCabCreated(materialCab: MaterialCab, menu: Menu): Boolean { + // Animate the color change + ColorAnimUtil.createColorAnimator( + activity.surfaceColor(), + RetroColorUtil.shiftBackgroundColor(activity.surfaceColor()) + ).apply { + addUpdateListener { + // Change color of status bar too + activity.window.statusBarColor = animatedValue as Int + materialCab.setBackgroundColor(animatedValue as Int) + } + start() + } return true } override fun onCabFinished(materialCab: MaterialCab): Boolean { clearChecked() + activity.window.statusBarColor = Color.TRANSPARENT return true } @@ -31,7 +47,7 @@ abstract class AbsMultiSelectAdapter( checkAll() } else { onMultipleItemAction(menuItem, ArrayList(checked)) - cab!!.finish() + cab?.finish() clearChecked() } return true @@ -94,13 +110,13 @@ abstract class AbsMultiSelectAdapter( val size = checked.size when { size <= 0 -> { - cab!!.finish() + cab?.finish() } size == 1 -> { - cab!!.setTitle(getName(checked[0])) + cab?.setTitle(getName(checked[0])) } else -> { - cab!!.setTitle(context.getString(R.string.x_selected, size)) + cab?.setTitle(activity.getString(R.string.x_selected, size)) } } } @@ -109,6 +125,5 @@ abstract class AbsMultiSelectAdapter( init { checked = ArrayList() this.menuRes = menuRes - this.context = context } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt index afcb4ce89..4fd2994b2 100755 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt @@ -41,7 +41,7 @@ import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.MusicUtil class PlaylistAdapter( - private val activity: FragmentActivity, + override val activity: FragmentActivity, private var dataSet: List, private var itemLayoutRes: Int, ICabHolder: ICabHolder?, diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/SongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/SongAdapter.kt index b828f6648..bab506209 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/SongAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/SongAdapter.kt @@ -50,7 +50,7 @@ import me.zhanghai.android.fastscroll.PopupTextProvider */ open class SongAdapter( - protected val activity: FragmentActivity, + override val activity: FragmentActivity, var dataSet: MutableList, protected var itemLayoutRes: Int, ICabHolder: ICabHolder?, diff --git a/app/src/main/java/code/name/monkey/retromusic/util/ColorAnimUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/ColorAnimUtil.kt new file mode 100644 index 000000000..81cb66de6 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/util/ColorAnimUtil.kt @@ -0,0 +1,19 @@ +package code.name.monkey.retromusic.util + +import android.animation.ArgbEvaluator +import android.animation.ValueAnimator + +class ColorAnimUtil { + companion object { + fun createColorAnimator( + fromColor: Int, + toColor: Int, + mDuration: Long = 300 + ): ValueAnimator { + return ValueAnimator.ofInt(fromColor, toColor).apply { + setEvaluator(ArgbEvaluator()) + duration = mDuration + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/util/RetroColorUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/RetroColorUtil.java index 061eb17ff..33d5e567d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/RetroColorUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/RetroColorUtil.java @@ -205,6 +205,17 @@ public class RetroColorUtil { return color; } + @ColorInt + public static int shiftBackgroundColor(@ColorInt int backgroundColor) { + int color = backgroundColor; + if (ColorUtil.INSTANCE.isColorLight(color)) { + color = ColorUtil.INSTANCE.shiftColor(color, 0.5F); + } else { + color = ColorUtil.INSTANCE.shiftColor(color, 1.5F); + } + return color; + } + private static class SwatchComparator implements Comparator { private static SwatchComparator sInstance; From 15a86f0f5b9d8f667feb52e0fd8b8aad7d23481a Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sun, 12 Sep 2021 01:28:33 +0530 Subject: [PATCH 007/149] Made Navigation Bar transparent and added some MD3 themes --- .../activities/LicenseActivity.java | 107 -------------- .../retromusic/activities/LicenseActivity.kt | 99 +++++++++++++ .../activities/LockScreenActivity.kt | 2 - .../retromusic/activities/LyricsActivity.kt | 1 - .../retromusic/activities/MainActivity.kt | 3 +- .../activities/PermissionActivity.kt | 2 - .../activities/PlayingQueueActivity.kt | 8 +- .../retromusic/activities/PurchaseActivity.kt | 2 - .../retromusic/activities/SettingsActivity.kt | 5 +- .../activities/ShareInstagramStory.kt | 1 - .../activities/SupportDevelopmentActivity.kt | 2 - .../retromusic/activities/UserInfoActivity.kt | 2 - .../activities/WhatsNewActivity.java | 128 ----------------- .../retromusic/activities/WhatsNewActivity.kt | 132 ++++++++++++++++++ .../base/AbsSlidingMusicPanelActivity.kt | 95 +++---------- .../activities/base/AbsThemeActivity.kt | 3 +- .../activities/bugreport/BugReportActivity.kt | 2 - .../tageditor/AbsTagEditorActivity.kt | 1 - .../fragments/base/AbsMainActivityFragment.kt | 3 - .../player/adaptive/AdaptiveFragment.kt | 2 + .../player/blur/BlurPlayerFragment.kt | 2 + .../fragments/player/card/CardFragment.kt | 2 + .../player/cardblur/CardBlurFragment.kt | 3 + .../fragments/player/color/ColorFragment.kt | 3 +- .../fragments/player/fit/FitFragment.kt | 2 + .../player/flat/FlatPlayerFragment.kt | 2 + .../player/gradient/GradientPlayerFragment.kt | 1 + .../material/MaterialControlsFragment.kt | 1 + .../player/material/MaterialFragment.kt | 2 + .../fragments/player/normal/PlayerFragment.kt | 2 + .../player/plain/PlainPlayerFragment.kt | 2 + .../player/simple/SimplePlayerFragment.kt | 2 + .../player/tiny/TinyPlayerFragment.kt | 2 + .../monkey/retromusic/util/RetroUtil.java | 101 ++++++++++---- .../main/res/drawable/shadow_blur_theme.xml | 2 +- .../res/layout/activity_album_tag_editor.xml | 19 +-- .../main/res/layout/activity_bug_report.xml | 101 ++++++-------- app/src/main/res/layout/activity_donation.xml | 6 +- app/src/main/res/layout/activity_lyrics.xml | 5 +- .../res/layout/activity_playing_queue.xml | 107 ++++++-------- app/src/main/res/layout/activity_settings.xml | 64 ++++----- .../res/layout/activity_song_tag_editor.xml | 7 +- .../main/res/layout/activity_user_info.xml | 3 +- .../res/layout/fragment_adaptive_player.xml | 36 ----- .../res/layout/fragment_card_blur_player.xml | 1 + .../main/res/layout/fragment_card_player.xml | 3 +- .../res/layout/fragment_gradient_player.xml | 2 +- .../res/layout/fragment_main_recycler.xml | 2 +- .../main/res/layout/fragment_mini_player.xml | 2 +- .../res/layout/sliding_music_panel_layout.xml | 2 +- app/src/main/res/values-night-v27/styles.xml | 4 +- app/src/main/res/values-night/styles.xml | 5 +- app/src/main/res/values-v21/styles.xml | 3 + .../main/res/values-v27/styles_parents.xml | 18 ++- app/src/main/res/values/attrs.xml | 1 + app/src/main/res/values/colors.xml | 3 + app/src/main/res/values/styles.xml | 12 +- app/src/main/res/values/styles_parents.xml | 15 +- 58 files changed, 542 insertions(+), 608 deletions(-) delete mode 100644 app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.kt mode change 100755 => 100644 app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.java b/app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.java deleted file mode 100644 index f9ada218e..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.activities; - -import android.graphics.Color; -import android.os.Bundle; -import android.view.MenuItem; -import android.webkit.WebView; - -import androidx.annotation.NonNull; -import androidx.appcompat.widget.Toolbar; - -import org.jetbrains.annotations.Nullable; - -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.nio.charset.StandardCharsets; - -import code.name.monkey.appthemehelper.ThemeStore; -import code.name.monkey.appthemehelper.util.ATHUtil; -import code.name.monkey.appthemehelper.util.ColorUtil; -import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper; -import code.name.monkey.retromusic.R; -import code.name.monkey.retromusic.activities.base.AbsBaseActivity; - -/** Created by hemanths on 2019-09-27. */ -public class LicenseActivity extends AbsBaseActivity { - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - setDrawUnderStatusBar(); - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_license); - setStatusbarColorAuto(); - setNavigationbarColorAuto(); - setLightNavigationBar(true); - Toolbar toolbar = findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - ToolbarContentTintHelper.colorBackButton(toolbar); - toolbar.setBackgroundColor(ATHUtil.INSTANCE.resolveColor(this, R.attr.colorSurface)); - WebView webView = findViewById(R.id.license); - try { - StringBuilder buf = new StringBuilder(); - InputStream json = getAssets().open("oldindex.html"); - BufferedReader in = new BufferedReader(new InputStreamReader(json, StandardCharsets.UTF_8)); - String str; - while ((str = in.readLine()) != null) { - buf.append(str); - } - in.close(); - - // Inject color values for WebView body background and links - final boolean isDark = ATHUtil.INSTANCE.isWindowBackgroundDark(this); - final String backgroundColor = - colorToCSS( - ATHUtil.INSTANCE.resolveColor( - this, R.attr.colorSurface, Color.parseColor(isDark ? "#424242" : "#ffffff"))); - final String contentColor = colorToCSS(Color.parseColor(isDark ? "#ffffff" : "#000000")); - final String changeLog = - buf.toString() - .replace( - "{style-placeholder}", - String.format( - "body { background-color: %s; color: %s; }", backgroundColor, contentColor)) - .replace("{link-color}", colorToCSS(ThemeStore.Companion.accentColor(this))) - .replace( - "{link-color-active}", - colorToCSS( - ColorUtil.INSTANCE.lightenColor(ThemeStore.Companion.accentColor(this)))); - - webView.loadData(changeLog, "text/html", "UTF-8"); - } catch (Throwable e) { - webView.loadData( - "

Unable to load

" + e.getLocalizedMessage() + "

", "text/html", "UTF-8"); - } - } - - @Override - public boolean onOptionsItemSelected(@NonNull MenuItem item) { - if (item.getItemId() == android.R.id.home) { - onBackPressed(); - return true; - } - return super.onOptionsItemSelected(item); - } - - private String colorToCSS(int color) { - return String.format( - "rgb(%d, %d, %d)", - Color.red(color), - Color.green(color), - Color.blue(color)); // on API 29, WebView doesn't load with hex colors - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.kt new file mode 100644 index 000000000..daa025371 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.kt @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ +package code.name.monkey.retromusic.activities + +import android.graphics.Color +import android.os.Bundle +import android.view.MenuItem +import android.webkit.WebView +import androidx.appcompat.widget.Toolbar +import code.name.monkey.appthemehelper.ThemeStore.Companion.accentColor +import code.name.monkey.appthemehelper.util.ATHUtil.isWindowBackgroundDark +import code.name.monkey.appthemehelper.util.ATHUtil.resolveColor +import code.name.monkey.appthemehelper.util.ColorUtil.lightenColor +import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper +import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.activities.base.AbsBaseActivity +import java.io.BufferedReader +import java.io.InputStreamReader +import java.nio.charset.StandardCharsets + +/** Created by hemanths on 2019-09-27. */ +class LicenseActivity : AbsBaseActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_license) + val toolbar = findViewById(R.id.toolbar) + setSupportActionBar(toolbar) + ToolbarContentTintHelper.colorBackButton(toolbar) + toolbar.setBackgroundColor(resolveColor(this, R.attr.colorSurface)) + val webView = findViewById(R.id.license) + try { + val buf = StringBuilder() + val json = assets.open("oldindex.html") + val br = BufferedReader(InputStreamReader(json, StandardCharsets.UTF_8)) + var str: String? + while (br.readLine().also { str = it } != null) { + buf.append(str) + } + br.close() + + // Inject color values for WebView body background and links + val isDark = isWindowBackgroundDark(this) + val backgroundColor = colorToCSS( + resolveColor( + this, + R.attr.colorSurface, + Color.parseColor(if (isDark) "#424242" else "#ffffff") + ) + ) + val contentColor = colorToCSS(Color.parseColor(if (isDark) "#ffffff" else "#000000")) + val changeLog = buf.toString() + .replace( + "{style-placeholder}", String.format( + "body { background-color: %s; color: %s; }", backgroundColor, contentColor + ) + ) + .replace("{link-color}", colorToCSS(accentColor(this))) + .replace( + "{link-color-active}", + colorToCSS( + lightenColor(accentColor(this)) + ) + ) + webView.loadData(changeLog, "text/html", "UTF-8") + } catch (e: Throwable) { + webView.loadData( + "

Unable to load

" + e.localizedMessage + "

", "text/html", "UTF-8" + ) + } + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + if (item.itemId == android.R.id.home) { + onBackPressed() + return true + } + return super.onOptionsItemSelected(item) + } + + private fun colorToCSS(color: Int): String { + return String.format( + "rgb(%d, %d, %d)", + Color.red(color), + Color.green(color), + Color.blue(color) + ) // on API 29, WebView doesn't load with hex colors + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/LockScreenActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/LockScreenActivity.kt index 792c83652..621bc1773 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/LockScreenActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/LockScreenActivity.kt @@ -48,9 +48,7 @@ class LockScreenActivity : AbsMusicServiceActivity() { setContentView(binding.root) hideStatusBar() setStatusbarColorAuto() - setNavigationbarColorAuto() setTaskDescriptionColorAuto() - setLightNavigationBar(true) val config = SlidrConfig.Builder().listener(object : SlidrListener { override fun onSlideStateChanged(state: Int) { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/LyricsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/LyricsActivity.kt index 5b72c24a6..a0263db68 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/LyricsActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/LyricsActivity.kt @@ -94,7 +94,6 @@ class LyricsActivity : AbsMusicServiceActivity() { ViewCompat.setTransitionName(binding.container, "lyrics") setStatusbarColorAuto() setTaskDescriptionColorAuto() - setNavigationbarColorAuto() setupWakelock() 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 4f96a6968..ade445e67 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 @@ -37,6 +37,7 @@ import code.name.monkey.retromusic.repository.PlaylistSongsLoader import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.AppRater import code.name.monkey.retromusic.util.PreferenceUtil +import code.name.monkey.retromusic.util.RetroUtil import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.launch import org.koin.android.ext.android.get @@ -55,8 +56,6 @@ class MainActivity : AbsCastActivity(), OnSharedPreferenceChangeListener { setDrawUnderStatusBar() super.onCreate(savedInstanceState) setStatusbarColorAuto() - setNavigationbarColorAuto() - setLightNavigationBar(true) setTaskDescriptionColorAuto() hideStatusBar() updateTabs() diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/PermissionActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/PermissionActivity.kt index f61eb5184..34d4a50cc 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/PermissionActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/PermissionActivity.kt @@ -41,8 +41,6 @@ class PermissionActivity : AbsMusicServiceActivity() { binding = ActivityPermissionBinding.inflate(layoutInflater) setContentView(binding.root) setStatusbarColorAuto() - setNavigationbarColorAuto() - setLightNavigationBar(true) setTaskDescriptionColorAuto() setupTitle() diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/PlayingQueueActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/PlayingQueueActivity.kt index 70b45c245..8adb96bc0 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/PlayingQueueActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/PlayingQueueActivity.kt @@ -19,6 +19,7 @@ import android.os.Bundle import android.view.MenuItem import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.retromusic.R @@ -26,7 +27,6 @@ import code.name.monkey.retromusic.activities.base.AbsMusicServiceActivity import code.name.monkey.retromusic.adapter.song.PlayingQueueAdapter import code.name.monkey.retromusic.databinding.ActivityPlayingQueueBinding import code.name.monkey.retromusic.extensions.accentColor -import code.name.monkey.retromusic.extensions.surfaceColor import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.ThemedFastScroller @@ -59,10 +59,8 @@ open class PlayingQueueActivity : AbsMusicServiceActivity() { super.onCreate(savedInstanceState) binding = ActivityPlayingQueueBinding.inflate(layoutInflater) setContentView(binding.root) - setStatusbarColorAuto() - setNavigationbarColorAuto() + setLightStatusbarAuto(ATHUtil.resolveColor(this, R.attr.colorSurface)) setTaskDescriptionColorAuto() - setLightNavigationBar(true) setupToolbar() setUpRecyclerView() @@ -191,7 +189,7 @@ open class PlayingQueueActivity : AbsMusicServiceActivity() { private fun setupToolbar() { binding.toolbar.subtitle = getUpNextAndQueueTime() - binding.toolbar.setBackgroundColor(surfaceColor()) + //binding.toolbar.setBackgroundColor(surfaceColor()) setSupportActionBar(binding.toolbar) binding.clearQueue.backgroundTintList = ColorStateList.valueOf(accentColor()) ColorStateList.valueOf( diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/PurchaseActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/PurchaseActivity.kt index c611d2f2c..2bd7ce429 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/PurchaseActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/PurchaseActivity.kt @@ -47,8 +47,6 @@ class PurchaseActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler { setContentView(binding.root) setStatusbarColor(Color.TRANSPARENT) setLightStatusbar(false) - setNavigationbarColor(Color.BLACK) - setLightNavigationBar(false) binding.toolbar.navigationIcon?.setTint(Color.WHITE) binding.toolbar.setNavigationOnClickListener { onBackPressed() } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt index 54d31bb43..9b314a48f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt @@ -19,6 +19,7 @@ import android.view.MenuItem import androidx.navigation.NavController import androidx.navigation.NavDestination import code.name.monkey.appthemehelper.ThemeStore +import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsBaseActivity @@ -36,9 +37,7 @@ class SettingsActivity : AbsBaseActivity(), ColorCallback { super.onCreate(savedInstanceState) binding = ActivitySettingsBinding.inflate(layoutInflater) setContentView(binding.root) - setStatusbarColorAuto() - setNavigationbarColorAuto() - setLightNavigationBar(true) + setLightStatusbarAuto(ATHUtil.resolveColor(this, R.attr.colorSurface)) setupToolbar() } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/ShareInstagramStory.kt b/app/src/main/java/code/name/monkey/retromusic/activities/ShareInstagramStory.kt index b3d31052b..a0a719738 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/ShareInstagramStory.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/ShareInstagramStory.kt @@ -61,7 +61,6 @@ class ShareInstagramStory : AbsBaseActivity() { binding = ActivityShareInstagramBinding.inflate(layoutInflater) setContentView(binding.root) setStatusbarColor(Color.TRANSPARENT) - setNavigationbarColor(Color.BLACK) binding.toolbar.setBackgroundColor(Color.TRANSPARENT) setSupportActionBar(binding.toolbar) 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 58cddd711..425310861 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 @@ -78,9 +78,7 @@ class SupportDevelopmentActivity : AbsBaseActivity(), BillingProcessor.IBillingH setContentView(R.layout.activity_donation) setStatusbarColorAuto() - setNavigationbarColorAuto() setTaskDescriptionColorAuto() - setLightNavigationBar(true) setupToolbar() diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt index 1394cc935..6288b14b6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt @@ -61,9 +61,7 @@ class UserInfoActivity : AbsBaseActivity() { binding = ActivityUserInfoBinding.inflate(layoutInflater) setContentView(binding.root) setStatusbarColorAuto() - setNavigationbarColorAuto() setTaskDescriptionColorAuto() - setLightNavigationBar(true) applyToolbar(binding.toolbar) binding.nameContainer.accentColor() diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.java b/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.java deleted file mode 100644 index 9e37a8ee3..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.java +++ /dev/null @@ -1,128 +0,0 @@ -package code.name.monkey.retromusic.activities; - -import android.content.Context; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.graphics.Color; -import android.os.Bundle; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.widget.NestedScrollView; - -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.nio.charset.StandardCharsets; -import java.util.Locale; - -import code.name.monkey.appthemehelper.ThemeStore; -import code.name.monkey.appthemehelper.util.ATHUtil; -import code.name.monkey.appthemehelper.util.ColorUtil; -import code.name.monkey.appthemehelper.util.MaterialValueHelper; -import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper; -import code.name.monkey.retromusic.Constants; -import code.name.monkey.retromusic.R; -import code.name.monkey.retromusic.activities.base.AbsBaseActivity; -import code.name.monkey.retromusic.databinding.ActivityWhatsNewBinding; -import code.name.monkey.retromusic.extensions.ColorExtKt; -import code.name.monkey.retromusic.util.PreferenceUtil; -import code.name.monkey.retromusic.util.RetroUtil; - -public class WhatsNewActivity extends AbsBaseActivity { - - private static String colorToCSS(int color) { - return String.format( - Locale.getDefault(), - "rgba(%d, %d, %d, %d)", - Color.red(color), - Color.green(color), - Color.blue(color), - Color.alpha(color)); // on API 29, WebView doesn't load with hex colors - } - - private static void setChangelogRead(@NonNull Context context) { - try { - PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); - int currentVersion = pInfo.versionCode; - PreferenceUtil.INSTANCE.setLastVersion(currentVersion); - } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); - } - } - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - setDrawUnderStatusBar(); - super.onCreate(savedInstanceState); - ActivityWhatsNewBinding binding = ActivityWhatsNewBinding.inflate(getLayoutInflater()); - setContentView(binding.getRoot()); - setStatusbarColorAuto(); - setNavigationbarColorAuto(); - setTaskDescriptionColorAuto(); - - binding.toolbar.setBackgroundColor(ATHUtil.INSTANCE.resolveColor(this, R.attr.colorSurface)); - binding.toolbar.setNavigationOnClickListener(v -> onBackPressed()); - ToolbarContentTintHelper.colorBackButton(binding.toolbar); - - try { - StringBuilder buf = new StringBuilder(); - InputStream json = getAssets().open("retro-changelog.html"); - BufferedReader in = new BufferedReader(new InputStreamReader(json, StandardCharsets.UTF_8)); - String str; - while ((str = in.readLine()) != null) { - buf.append(str); - } - in.close(); - - // Inject color values for WebView body background and links - final boolean isDark = ATHUtil.INSTANCE.isWindowBackgroundDark(this); - final int accentColor = ThemeStore.Companion.accentColor(this); - final String backgroundColor = - colorToCSS( - ATHUtil.INSTANCE.resolveColor( - this, R.attr.colorSurface, Color.parseColor(isDark ? "#424242" : "#ffffff"))); - final String contentColor = colorToCSS(Color.parseColor(isDark ? "#ffffff" : "#000000")); - final String textColor = colorToCSS(Color.parseColor(isDark ? "#60FFFFFF" : "#80000000")); - final String accentColorString = colorToCSS(ThemeStore.Companion.accentColor(this)); - final String cardBackgroundColor = colorToCSS(Color.parseColor(isDark ? "#353535" : "#ffffff")); - final String accentTextColor = - colorToCSS( - MaterialValueHelper.getPrimaryTextColor( - this, ColorUtil.INSTANCE.isColorLight(accentColor))); - final String changeLog = - buf.toString() - .replace( - "{style-placeholder}", - String.format( - "body { background-color: %s; color: %s; } li {color: %s;} h3 {color: %s;} .tag {color: %s;} div{background-color: %s;}", - backgroundColor, - contentColor, - textColor, - accentColorString, - accentColorString, - cardBackgroundColor)) - .replace("{link-color}", colorToCSS(ThemeStore.Companion.accentColor(this))) - .replace( - "{link-color-active}", - colorToCSS( - ColorUtil.INSTANCE.lightenColor(ThemeStore.Companion.accentColor(this)))); - binding.webView.loadData(changeLog, "text/html", "UTF-8"); - } catch (Throwable e) { - binding.webView.loadData( - "

Unable to load

" + e.getLocalizedMessage() + "

", "text/html", "UTF-8"); - } - setChangelogRead(this); - binding.tgFab.setOnClickListener(v -> RetroUtil.openUrl(this, Constants.TELEGRAM_CHANGE_LOG)); - ColorExtKt.accentColor(binding.tgFab); - binding.tgFab.shrink(); - binding.container.setOnScrollChangeListener((NestedScrollView.OnScrollChangeListener) (v, scrollX, scrollY, oldScrollX, oldScrollY) -> { - int dy = scrollY - oldScrollY; - if (dy > 0) { - binding.tgFab.shrink(); - } else if (dy < 0) { - binding.tgFab.extend(); - } - }); - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.kt new file mode 100644 index 000000000..e4e598889 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.kt @@ -0,0 +1,132 @@ +package code.name.monkey.retromusic.activities + +import android.content.Context +import android.content.pm.PackageManager +import android.graphics.Color +import android.os.Bundle +import androidx.core.widget.NestedScrollView +import code.name.monkey.appthemehelper.ThemeStore.Companion.accentColor +import code.name.monkey.appthemehelper.util.ATHUtil.isWindowBackgroundDark +import code.name.monkey.appthemehelper.util.ATHUtil.resolveColor +import code.name.monkey.appthemehelper.util.ColorUtil.isColorLight +import code.name.monkey.appthemehelper.util.ColorUtil.lightenColor +import code.name.monkey.appthemehelper.util.MaterialValueHelper.getPrimaryTextColor +import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper +import code.name.monkey.retromusic.Constants +import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.activities.base.AbsBaseActivity +import code.name.monkey.retromusic.databinding.ActivityWhatsNewBinding +import code.name.monkey.retromusic.extensions.accentColor +import code.name.monkey.retromusic.util.PreferenceUtil.lastVersion +import code.name.monkey.retromusic.util.RetroUtil +import java.io.BufferedReader +import java.io.InputStreamReader +import java.nio.charset.StandardCharsets +import java.util.* + +class WhatsNewActivity : AbsBaseActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val binding = ActivityWhatsNewBinding.inflate(layoutInflater) + setContentView(binding.root) + setLightStatusbarAuto(resolveColor(this, R.attr.colorSurface)) + setTaskDescriptionColorAuto() + binding.toolbar.setNavigationOnClickListener { onBackPressed() } + ToolbarContentTintHelper.colorBackButton(binding.toolbar) + try { + val buf = StringBuilder() + val json = assets.open("retro-changelog.html") + val br = BufferedReader(InputStreamReader(json, StandardCharsets.UTF_8)) + var str: String? + while (br.readLine().also { str = it } != null) { + buf.append(str) + } + br.close() + + // Inject color values for WebView body background and links + val isDark = isWindowBackgroundDark(this) + val accentColor = accentColor(this) + val backgroundColor = colorToCSS( + resolveColor( + this, + R.attr.colorSurface, + Color.parseColor(if (isDark) "#424242" else "#ffffff") + ) + ) + val contentColor = colorToCSS(Color.parseColor(if (isDark) "#ffffff" else "#000000")) + val textColor = colorToCSS(Color.parseColor(if (isDark) "#60FFFFFF" else "#80000000")) + val accentColorString = colorToCSS(accentColor(this)) + val cardBackgroundColor = + colorToCSS(Color.parseColor(if (isDark) "#353535" else "#ffffff")) + val accentTextColor = colorToCSS( + getPrimaryTextColor( + this, isColorLight(accentColor) + ) + ) + val changeLog = buf.toString() + .replace( + "{style-placeholder}", String.format( + "body { background-color: %s; color: %s; } li {color: %s;} h3 {color: %s;} .tag {color: %s;} div{background-color: %s;}", + backgroundColor, + contentColor, + textColor, + accentColorString, + accentColorString, + cardBackgroundColor + ) + ) + .replace("{link-color}", colorToCSS(accentColor(this))) + .replace( + "{link-color-active}", + colorToCSS( + lightenColor(accentColor(this)) + ) + ) + binding.webView.loadData(changeLog, "text/html", "UTF-8") + } catch (e: Throwable) { + binding.webView.loadData( + "

Unable to load

" + e.localizedMessage + "

", "text/html", "UTF-8" + ) + } + setChangelogRead(this) + binding.tgFab.setOnClickListener { + RetroUtil.openUrl( + this, + Constants.TELEGRAM_CHANGE_LOG + ) + } + binding.tgFab.accentColor() + binding.tgFab.shrink() + binding.container.setOnScrollChangeListener { _: NestedScrollView?, _: Int, scrollY: Int, _: Int, oldScrollY: Int -> + val dy = scrollY - oldScrollY + if (dy > 0) { + binding.tgFab.shrink() + } else if (dy < 0) { + binding.tgFab.extend() + } + } + } + + companion object { + private fun colorToCSS(color: Int): String { + return String.format( + Locale.getDefault(), + "rgba(%d, %d, %d, %d)", + Color.red(color), + Color.green(color), + Color.blue(color), + Color.alpha(color) + ) // on API 29, WebView doesn't load with hex colors + } + + private fun setChangelogRead(context: Context) { + try { + val pInfo = context.packageManager.getPackageInfo(context.packageName, 0) + val currentVersion = pInfo.versionCode + lastVersion = currentVersion + } catch (e: PackageManager.NameNotFoundException) { + e.printStackTrace() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt index a6cfe26a9..44dd8d8de 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt @@ -22,9 +22,10 @@ import android.view.ViewTreeObserver import android.widget.FrameLayout import androidx.core.view.ViewCompat import androidx.core.view.isVisible +import androidx.core.view.updateLayoutParams +import androidx.core.view.updatePadding import androidx.fragment.app.Fragment import androidx.fragment.app.commit -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.RetroBottomSheetBehavior @@ -56,7 +57,8 @@ import code.name.monkey.retromusic.fragments.player.tiny.TinyPlayerFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.CategoryInfo import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.views.BottomNavigationBarTinted +import code.name.monkey.retromusic.util.RetroUtil +import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomsheet.BottomSheetBehavior.* import org.koin.androidx.viewmodel.ext.android.viewModel @@ -71,18 +73,14 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { private var playerFragment: AbsPlayerFragment? = null private var miniPlayerFragment: MiniPlayerFragment? = null private var nowPlayingScreen: NowPlayingScreen? = null - private var navigationBarColor: Int = 0 private var taskColor: Int = 0 private var lightStatusBar: Boolean = false - private var lightNavigationBar: Boolean = false - private var paletteColor: Int = Color.WHITE protected abstract fun createContentView(): SlidingMusicPanelLayoutBinding private val panelState: Int get() = bottomSheetBehavior.state private lateinit var binding: SlidingMusicPanelLayoutBinding private val bottomSheetCallbackList = object : BottomSheetCallback() { - override fun onSlide(bottomSheet: View, slideOffset: Float) { setMiniPlayerAlphaProgress(slideOffset) binding.dimBackground.show() @@ -123,7 +121,6 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { chooseFragmentForTheme() setupSlidingUpPanel() setupBottomSheet() - updateColor() val themeColor = resolveColor(android.R.attr.windowBackground, Color.GRAY) binding.dimBackground.setBackgroundColor(ColorUtil.withAlpha(themeColor, 0.5f)) @@ -131,12 +128,18 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { println("dimBackground") collapsePanel() } + binding.bottomNavigationView.apply { + val navbarHeight = RetroUtil.getNavigationBarHeight() + updatePadding(bottom = navbarHeight) + binding.bottomNavigationView.updateLayoutParams { + height = dip(R.dimen.mini_player_height) + navbarHeight + } + } } private fun setupBottomSheet() { bottomSheetBehavior = from(binding.slidingPanel) as RetroBottomSheetBehavior bottomSheetBehavior.addBottomSheetCallback(bottomSheetCallbackList) - bottomSheetBehavior.maxWidth = resources.displayMetrics.widthPixels } override fun onResume() { @@ -179,18 +182,16 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { miniPlayerFragment?.view?.visibility = if (alpha == 0f) View.GONE else View.VISIBLE binding.bottomNavigationView.translationY = progress * 500 binding.bottomNavigationView.alpha = alpha + binding.playerFragmentContainer.alpha = (progress - 0.2F) / 0.2F } open fun onPanelCollapsed() { // restore values super.setLightStatusbar(lightStatusBar) super.setTaskDescriptionColor(taskColor) - super.setNavigationbarColor(navigationBarColor) - super.setLightNavigationBar(lightNavigationBar) } open fun onPanelExpanded() { - onPaletteColorChanged() } private fun setupSlidingUpPanel() { @@ -214,7 +215,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { }) } - fun getBottomNavigationView(): BottomNavigationBarTinted { + fun getBottomNavigationView(): BottomNavigationView { return binding.bottomNavigationView } @@ -250,43 +251,6 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { return false } - private fun onPaletteColorChanged() { - if (panelState == STATE_EXPANDED) { - super.setTaskDescriptionColor(paletteColor) - val isColorLight = ColorUtil.isColorLight(paletteColor) - if (PreferenceUtil.isAdaptiveColor && (nowPlayingScreen == Normal || nowPlayingScreen == Flat)) { - super.setLightNavigationBar(true) - super.setLightStatusbar(isColorLight) - } else if (nowPlayingScreen == Card || nowPlayingScreen == Blur || nowPlayingScreen == BlurCard) { - super.setLightStatusbar(false) - super.setLightNavigationBar(true) - super.setNavigationbarColor(Color.BLACK) - } else if (nowPlayingScreen == Color || nowPlayingScreen == Tiny || nowPlayingScreen == Gradient) { - super.setNavigationbarColor(paletteColor) - super.setLightNavigationBar(isColorLight) - super.setLightStatusbar(isColorLight) - } else if (nowPlayingScreen == Full) { - super.setNavigationbarColor(paletteColor) - super.setLightNavigationBar(isColorLight) - super.setLightStatusbar(false) - } else if (nowPlayingScreen == Classic) { - super.setLightStatusbar(false) - } else if (nowPlayingScreen == Fit) { - super.setLightStatusbar(false) - } else { - super.setLightStatusbar( - ColorUtil.isColorLight( - ATHUtil.resolveColor( - this, - android.R.attr.windowBackground - ) - ) - ) - super.setLightNavigationBar(true) - } - } - } - override fun setLightStatusbar(enabled: Boolean) { lightStatusBar = enabled if (panelState == STATE_COLLAPSED) { @@ -294,20 +258,6 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { } } - override fun setLightNavigationBar(enabled: Boolean) { - lightNavigationBar = enabled - if (panelState == STATE_COLLAPSED) { - super.setLightNavigationBar(enabled) - } - } - - override fun setNavigationbarColor(color: Int) { - navigationBarColor = color - if (panelState == STATE_COLLAPSED) { - super.setNavigationbarColor(color) - } - } - override fun setTaskDescriptionColor(color: Int) { taskColor = color if (panelState == STATE_COLLAPSED) { @@ -330,25 +280,18 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { } } - private fun updateColor() { - libraryViewModel.paletteColor.observe(this, { color -> - this.paletteColor = color - onPaletteColorChanged() - }) - } - fun setBottomBarVisibility(visible: Boolean) { binding.bottomNavigationView.isVisible = visible hideBottomBar(MusicPlayerRemote.playingQueue.isEmpty()) } private fun hideBottomBar(hide: Boolean) { - val heightOfBar = - if (MusicPlayerRemote.isCasting) dip(R.dimen.cast_mini_player_height) else dip(R.dimen.mini_player_height) - val heightOfBarWithTabs = - if (MusicPlayerRemote.isCasting) dip(R.dimen.mini_cast_player_height_expanded) else dip( - R.dimen.mini_player_height_expanded - ) + val heightOfBar = RetroUtil.getNavigationBarHeight() + + if (MusicPlayerRemote.isCasting) dip(R.dimen.cast_mini_player_height) else dip(R.dimen.mini_player_height) + val heightOfBarWithTabs = RetroUtil.getNavigationBarHeight() + + if (MusicPlayerRemote.isCasting) dip(R.dimen.mini_cast_player_height_expanded) else dip( + R.dimen.mini_player_height_expanded + ) val isVisible = binding.bottomNavigationView.isVisible if (hide) { bottomSheetBehavior.isHideable = true diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt index 8d4371594..45cf0c0bf 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt @@ -49,6 +49,7 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable { setImmersiveFullscreen() registerSystemUiVisibility() toggleScreenOn() + setDrawUnderNavigationBar() //MaterialDialogsUtil.updateMaterialDialogsThemeSingleton(this) } @@ -91,7 +92,7 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable { RetroUtil.setAllowDrawUnderStatusBar(window) } - fun setDrawUnderNavigationBar() { + private fun setDrawUnderNavigationBar() { RetroUtil.setAllowDrawUnderNavigationBar(window) } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt index 3780834d0..a65b135e0 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt @@ -74,12 +74,10 @@ open class BugReportActivity : AbsThemeActivity() { private var deviceInfo: DeviceInfo? = null override fun onCreate(savedInstanceState: Bundle?) { - setDrawUnderStatusBar() super.onCreate(savedInstanceState) binding = ActivityBugReportBinding.inflate(layoutInflater) setContentView(binding.root) setStatusbarColorAuto() - setNavigationbarColorAuto() setTaskDescriptionColorAuto() initViews() diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AbsTagEditorActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AbsTagEditorActivity.kt index 536dea62e..361555bb5 100755 --- a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AbsTagEditorActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AbsTagEditorActivity.kt @@ -196,7 +196,6 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { _binding = bindingInflater.invoke(layoutInflater) setContentView(binding.root) setStatusbarColorAuto() - setNavigationbarColorAuto() setTaskDescriptionColorAuto() saveFab = findViewById(R.id.saveTags) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsMainActivityFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsMainActivityFragment.kt index 2edf2eccd..0ced7780d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsMainActivityFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsMainActivityFragment.kt @@ -34,10 +34,7 @@ abstract class AbsMainActivityFragment(@LayoutRes layout: Int) : AbsMusicService override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) setHasOptionsMenu(true) - mainActivity.setNavigationbarColorAuto() - mainActivity.setLightNavigationBar(true) mainActivity.setTaskDescriptionColorAuto() - mainActivity.hideStatusBar() } private fun setStatusBarColor(view: View, color: Int) { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt index 34f8baf56..382d65f5a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt @@ -28,6 +28,7 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor class AdaptiveFragment : AbsPlayerFragment(R.layout.fragment_adaptive_player) { @@ -46,6 +47,7 @@ class AdaptiveFragment : AbsPlayerFragment(R.layout.fragment_adaptive_player) { _binding = FragmentAdaptivePlayerBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() + RetroUtil.drawAboveNavBar(binding.root) } private fun setUpSubFragments() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt index a4f3df43b..6dbd8c06e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt @@ -32,6 +32,7 @@ import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor class BlurPlayerFragment : AbsPlayerFragment(R.layout.fragment_blur), @@ -54,6 +55,7 @@ class BlurPlayerFragment : AbsPlayerFragment(R.layout.fragment_blur), _binding = FragmentBlurBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() + RetroUtil.drawAboveNavBar(binding.playerToolbar) } private fun setUpSubFragments() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardFragment.kt index 698bf5135..172d03bfb 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardFragment.kt @@ -26,6 +26,7 @@ import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor class CardFragment : AbsPlayerFragment(R.layout.fragment_card_player) { @@ -82,6 +83,7 @@ class CardFragment : AbsPlayerFragment(R.layout.fragment_card_player) { _binding = FragmentCardPlayerBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() + RetroUtil.drawAboveNavBar(binding.playbackControlsFragment.parent as View) } private fun setUpSubFragments() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt index 5c5432a85..3c0319d33 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt @@ -33,7 +33,9 @@ import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor +import org.koin.android.ext.android.bind class CardBlurFragment : AbsPlayerFragment(R.layout.fragment_card_blur_player), SharedPreferences.OnSharedPreferenceChangeListener { @@ -92,6 +94,7 @@ class CardBlurFragment : AbsPlayerFragment(R.layout.fragment_card_blur_player), _binding = FragmentCardBlurPlayerBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() + RetroUtil.drawAboveNavBar(binding.cardContainer) } private fun setUpSubFragments() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt index 461afbcfb..eb7c5e0f6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt @@ -29,6 +29,7 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor class ColorFragment : AbsPlayerFragment(R.layout.fragment_color_player) { @@ -61,7 +62,6 @@ class ColorFragment : AbsPlayerFragment(R.layout.fragment_color_player) { _binding?.root?.setBackgroundColor(color.backgroundColor) } animator.start() - serviceActivity?.setLightNavigationBar(ColorUtil.isColorLight(color.backgroundColor)) Handler().post { ToolbarContentTintHelper.colorizeToolbar( binding.playerToolbar, @@ -116,6 +116,7 @@ class ColorFragment : AbsPlayerFragment(R.layout.fragment_color_player) { val playerAlbumCoverFragment = childFragmentManager.findFragmentById(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment playerAlbumCoverFragment.setCallbacks(this) + RetroUtil.drawAboveNavBar(playerToolbar()) } private fun setUpSubFragments() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt index 936e380e8..81f358b0b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt @@ -25,6 +25,7 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor class FitFragment : AbsPlayerFragment(R.layout.fragment_fit) { @@ -85,6 +86,7 @@ class FitFragment : AbsPlayerFragment(R.layout.fragment_fit) { _binding = FragmentFitBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() + RetroUtil.drawAboveNavBar(playerToolbar()) } private fun setUpSubFragments() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt index 5cad96dec..4c2dedea1 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt @@ -31,6 +31,7 @@ import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.PreferenceUtil +import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import code.name.monkey.retromusic.views.DrawableGradient @@ -90,6 +91,7 @@ class FlatPlayerFragment : AbsPlayerFragment(R.layout.fragment_flat_player) { _binding = FragmentFlatPlayerBinding.bind(view) setUpPlayerToolbar() setUpSubFragments() + RetroUtil.drawAboveNavBar(binding.playbackControlsFragment) } override fun onShow() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt index 68725bab3..803d51716 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt @@ -55,6 +55,7 @@ import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil +import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import com.google.android.material.bottomsheet.BottomSheetBehavior.* diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt index 2be4a5c62..3aed2af36 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt @@ -36,6 +36,7 @@ import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil +import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor /** diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialFragment.kt index 888f6ad98..c8ce6fd34 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialFragment.kt @@ -26,6 +26,7 @@ import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor /** @@ -93,6 +94,7 @@ class MaterialFragment : AbsPlayerFragment(R.layout.fragment_material) { _binding = FragmentMaterialBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() + RetroUtil.drawAboveNavBar(playerToolbar()) } private fun setUpSubFragments() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt index 50a3a4662..c7b082aeb 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt @@ -29,6 +29,7 @@ import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.PreferenceUtil +import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import code.name.monkey.retromusic.views.DrawableGradient @@ -120,6 +121,7 @@ class PlayerFragment : AbsPlayerFragment(R.layout.fragment_player) { _binding = FragmentPlayerBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() + RetroUtil.drawAboveNavBar(playerToolbar()) } override fun onDestroyView() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlayerFragment.kt index 220ef458c..429aea36e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlayerFragment.kt @@ -27,6 +27,7 @@ import code.name.monkey.retromusic.fragments.base.goToArtist import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor class PlainPlayerFragment : AbsPlayerFragment(R.layout.fragment_plain_player) { @@ -84,6 +85,7 @@ class PlainPlayerFragment : AbsPlayerFragment(R.layout.fragment_plain_player) { binding.text.setOnClickListener { goToArtist(requireActivity()) } + RetroUtil.drawAboveNavBar(playerToolbar()) } private fun setUpSubFragments() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlayerFragment.kt index 1a2b354d0..05c03ee86 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlayerFragment.kt @@ -25,6 +25,7 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor /** @@ -51,6 +52,7 @@ class SimplePlayerFragment : AbsPlayerFragment(R.layout.fragment_simple_player) _binding = FragmentSimplePlayerBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() + RetroUtil.drawAboveNavBar(playerToolbar()) } private fun setUpSubFragments() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt index 630efbcef..50b6ddcc0 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt @@ -39,6 +39,7 @@ import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil +import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import kotlin.math.abs @@ -147,6 +148,7 @@ class TinyPlayerFragment : AbsPlayerFragment(R.layout.fragment_tiny_player), binding.text.setOnClickListener { goToArtist(requireActivity()) } + RetroUtil.drawAboveNavBar(playerToolbar()) } private fun setUpSubFragments() { diff --git a/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java old mode 100755 new mode 100644 index f06aade55..a68c3a871 --- a/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java @@ -32,6 +32,7 @@ import android.os.Build; import android.util.DisplayMetrics; import android.view.Display; import android.view.View; +import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; @@ -40,6 +41,8 @@ import androidx.annotation.ColorInt; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat; import java.net.InetAddress; @@ -66,10 +69,10 @@ public class RetroUtil { @NonNull public static Bitmap createBitmap(@NonNull Drawable drawable, float sizeMultiplier) { Bitmap bitmap = - Bitmap.createBitmap( - (int) (drawable.getIntrinsicWidth() * sizeMultiplier), - (int) (drawable.getIntrinsicHeight() * sizeMultiplier), - Bitmap.Config.ARGB_8888); + Bitmap.createBitmap( + (int) (drawable.getIntrinsicWidth() * sizeMultiplier), + (int) (drawable.getIntrinsicHeight() * sizeMultiplier), + Bitmap.Config.ARGB_8888); Canvas c = new Canvas(bitmap); drawable.setBounds(0, 0, c.getWidth(), c.getHeight()); drawable.draw(c); @@ -106,9 +109,21 @@ public class RetroUtil { public static int getStatusBarHeight() { int result = 0; int resourceId = - App.Companion.getContext() - .getResources() - .getIdentifier("status_bar_height", "dimen", "android"); + App.Companion.getContext() + .getResources() + .getIdentifier("status_bar_height", "dimen", "android"); + if (resourceId > 0) { + result = App.Companion.getContext().getResources().getDimensionPixelSize(resourceId); + } + return result; + } + + public static int getNavigationBarHeight() { + int result = 0; + int resourceId = + App.Companion.getContext() + .getResources() + .getIdentifier("navigation_bar_height", "dimen", "android"); if (resourceId > 0) { result = App.Companion.getContext().getResources().getDimensionPixelSize(resourceId); } @@ -117,23 +132,23 @@ public class RetroUtil { @Nullable public static Drawable getTintedVectorDrawable( - @NonNull Context context, @DrawableRes int id, @ColorInt int color) { + @NonNull Context context, @DrawableRes int id, @ColorInt int color) { return TintHelper.createTintedDrawable( - getVectorDrawable(context.getResources(), id, context.getTheme()), color); + getVectorDrawable(context.getResources(), id, context.getTheme()), color); } @Nullable public static Drawable getTintedVectorDrawable( - @NonNull Resources res, - @DrawableRes int resId, - @Nullable Resources.Theme theme, - @ColorInt int color) { + @NonNull Resources res, + @DrawableRes int resId, + @Nullable Resources.Theme theme, + @ColorInt int color) { return TintHelper.createTintedDrawable(getVectorDrawable(res, resId, theme), color); } @Nullable public static Drawable getVectorDrawable( - @NonNull Resources res, @DrawableRes int resId, @Nullable Resources.Theme theme) { + @NonNull Resources res, @DrawableRes int resId, @Nullable Resources.Theme theme) { if (Build.VERSION.SDK_INT >= 21) { return res.getDrawable(resId, theme); } @@ -145,7 +160,7 @@ public class RetroUtil { View currentFocus = activity.getCurrentFocus(); if (currentFocus != null) { InputMethodManager inputMethodManager = - (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); + (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); if (inputMethodManager != null) { inputMethodManager.hideSoftInputFromWindow(currentFocus.getWindowToken(), 0); } @@ -159,11 +174,11 @@ public class RetroUtil { return true; case "only_wifi": final ConnectivityManager connectivityManager = - (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = connectivityManager.getActiveNetworkInfo(); return netInfo != null - && netInfo.getType() == ConnectivityManager.TYPE_WIFI - && netInfo.isConnectedOrConnecting(); + && netInfo.getType() == ConnectivityManager.TYPE_WIFI + && netInfo.isConnectedOrConnecting(); case "never": default: return false; @@ -172,7 +187,7 @@ public class RetroUtil { public static boolean isLandscape() { return App.Companion.getContext().getResources().getConfiguration().orientation - == Configuration.ORIENTATION_LANDSCAPE; + == Configuration.ORIENTATION_LANDSCAPE; } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) @@ -183,7 +198,7 @@ public class RetroUtil { public static boolean isTablet() { return App.Companion.getContext().getResources().getConfiguration().smallestScreenWidthDp - >= 600; + >= 600; } public static void openUrl(@NonNull Activity context, @NonNull String str) { @@ -196,16 +211,16 @@ public class RetroUtil { public static void setAllowDrawUnderNavigationBar(Window window) { window.setNavigationBarColor(Color.TRANSPARENT); window - .getDecorView() - .setSystemUiVisibility( - Build.VERSION.SDK_INT >= Build.VERSION_CODES.O - ? View.SYSTEM_UI_FLAG_LAYOUT_STABLE - | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR - | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - : View.SYSTEM_UI_FLAG_LAYOUT_STABLE - | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); + .getDecorView() + .setSystemUiVisibility( + Build.VERSION.SDK_INT >= Build.VERSION_CODES.O + ? View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + : View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); } public static void setAllowDrawUnderStatusBar(@NonNull Window window) { @@ -213,6 +228,32 @@ public class RetroUtil { .getDecorView() .setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); + window.setStatusBarColor(Color.TRANSPARENT); + } + + /** + * This will draw our view above the navigation bar instead of behind it by adding margins. + * + * @param view view to draw above Navigation Bar + */ + public static void drawAboveNavBar(View view) { + ViewCompat.setOnApplyWindowInsetsListener(view, (v, insets) -> { + ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) v.getLayoutParams(); + params.bottomMargin = insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom; + return WindowInsetsCompat.CONSUMED; + }); + } + + /** + * This will draw our view above the navigation bar instead of behind it by adding padding. + * + * @param view view to draw above Navigation Bar + */ + public static void drawAboveNavBarWithPadding(View view) { + ViewCompat.setOnApplyWindowInsetsListener(view, (v, insets) -> { + v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(), insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom); + return WindowInsetsCompat.CONSUMED; + }); } public static String getIpAddress(boolean useIPv4) { diff --git a/app/src/main/res/drawable/shadow_blur_theme.xml b/app/src/main/res/drawable/shadow_blur_theme.xml index fad19a4dd..2304e611f 100644 --- a/app/src/main/res/drawable/shadow_blur_theme.xml +++ b/app/src/main/res/drawable/shadow_blur_theme.xml @@ -2,7 +2,7 @@ \ No newline at end of file diff --git a/app/src/main/res/layout/activity_album_tag_editor.xml b/app/src/main/res/layout/activity_album_tag_editor.xml index 85c265b7e..7131ee0c6 100755 --- a/app/src/main/res/layout/activity_album_tag_editor.xml +++ b/app/src/main/res/layout/activity_album_tag_editor.xml @@ -1,25 +1,18 @@ - - - - - - - + tools:ignore="UnusedAttribute" + android:fitsSystemWindows="true"> + app:liftOnScroll="true" + android:fitsSystemWindows="true"> - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_bug_report.xml b/app/src/main/res/layout/activity_bug_report.xml index b1216d921..44f7a497a 100644 --- a/app/src/main/res/layout/activity_bug_report.xml +++ b/app/src/main/res/layout/activity_bug_report.xml @@ -1,76 +1,63 @@ - + android:fitsSystemWindows="true"> - + android:layout_height="wrap_content" + app:liftOnScroll="true"> - + + + + + android:layout_height="wrap_content" + app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"> - + android:clipToPadding="false" + android:orientation="vertical"> - - - - - - - + android:layout_marginBottom="8dp" /> - + - + - + - + - - - - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_donation.xml b/app/src/main/res/layout/activity_donation.xml index 28e7c6aa7..7953d7c79 100644 --- a/app/src/main/res/layout/activity_donation.xml +++ b/app/src/main/res/layout/activity_donation.xml @@ -4,13 +4,15 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="?attr/colorSurface"> + android:background="?attr/colorSurface" + android:fitsSystemWindows="true"> + app:liftOnScroll="true" + android:fitsSystemWindows="true"> + android:fitsSystemWindows="true"> - + android:fitsSystemWindows="true"> - + android:layout_height="wrap_content" + android:fitsSystemWindows="true" + app:liftOnScroll="true"> - - - - - - + app:layout_collapseMode="pin" + app:navigationIcon="@drawable/ic_keyboard_backspace_black" + app:title="@string/queue" + app:titleTextAppearance="@style/ToolbarTextAppearanceNormal" + tools:ignore="UnusedAttribute" /> - + - + - + - - - - - - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index c5cc80e55..9677b8272 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -1,46 +1,36 @@ - + xmlns:app="http://schemas.android.com/apk/res-auto" + android:background="?attr/colorSurface" + android:fitsSystemWindows="true"> - + android:layout_height="wrap_content" + app:liftOnScroll="true" + android:fitsSystemWindows="true"> - + + + + + android:layout_height="wrap_content" + app:defaultNavHost="true" + app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" + app:navGraph="@navigation/settings_graph" /> - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_song_tag_editor.xml b/app/src/main/res/layout/activity_song_tag_editor.xml index e6fbdd7a9..426d8c288 100755 --- a/app/src/main/res/layout/activity_song_tag_editor.xml +++ b/app/src/main/res/layout/activity_song_tag_editor.xml @@ -3,15 +3,16 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="?attr/colorSurface" android:focusable="true" - android:focusableInTouchMode="true"> + android:focusableInTouchMode="true" + android:fitsSystemWindows="true"> + app:liftOnScroll="true" + android:fitsSystemWindows="true"> + android:orientation="vertical" + android:fitsSystemWindows="true"> - - - - - - - - - diff --git a/app/src/main/res/layout/fragment_card_player.xml b/app/src/main/res/layout/fragment_card_player.xml index 3585fd872..8318ede85 100644 --- a/app/src/main/res/layout/fragment_card_player.xml +++ b/app/src/main/res/layout/fragment_card_player.xml @@ -49,8 +49,7 @@ android:layout_height="wrap_content" android:layout_gravity="bottom" android:layout_margin="8dp" - app:cardCornerRadius="8dp" - app:cardUseCompatPadding="true"> + app:cardCornerRadius="8dp"> + android:layout_height="@dimen/toolbar_height"/> diff --git a/app/src/main/res/layout/fragment_mini_player.xml b/app/src/main/res/layout/fragment_mini_player.xml index 2c8cbdff5..bd3971695 100644 --- a/app/src/main/res/layout/fragment_mini_player.xml +++ b/app/src/main/res/layout/fragment_mini_player.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="56dp" - android:background="?attr/colorSurface" + android:background="@null" android:clickable="true" android:focusable="true" tools:ignore="UnusedAttribute"> diff --git a/app/src/main/res/layout/sliding_music_panel_layout.xml b/app/src/main/res/layout/sliding_music_panel_layout.xml index aefb7fb13..beb86e9d6 100644 --- a/app/src/main/res/layout/sliding_music_panel_layout.xml +++ b/app/src/main/res/layout/sliding_music_panel_layout.xml @@ -21,7 +21,7 @@ - \ No newline at end of file diff --git a/app/src/main/res/values-night/styles.xml b/app/src/main/res/values-night/styles.xml index 99e61bb24..eb0b26e11 100644 --- a/app/src/main/res/values-night/styles.xml +++ b/app/src/main/res/values-night/styles.xml @@ -14,7 +14,7 @@ - \ No newline at end of file diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml index 57d3cb485..099cfe405 100644 --- a/app/src/main/res/values-v21/styles.xml +++ b/app/src/main/res/values-v21/styles.xml @@ -10,6 +10,7 @@ @android:color/transparent false @style/TextViewStyleIm + @color/window_color_light - - \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index d2db61cfb..63e3c4278 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -6,6 +6,7 @@ + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 3973baac9..55c149c1a 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -15,6 +15,9 @@ #202124 #202124 + #353535 + #dddddd + #000000 #00000000 diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 3881a4d9a..eed073c4f 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -7,6 +7,7 @@ none 16dp @style/WindowAnimationTransition + @color/window_color_light - @@ -181,9 +183,9 @@ - - - - From 9f17bf6378041eecf204e29983171a76183dbde2 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sun, 12 Sep 2021 19:49:37 +0530 Subject: [PATCH 008/149] Converted UserInfo activity to fragment --- app/src/main/AndroidManifest.xml | 1 - .../UserInfoFragment.kt} | 78 ++++++++++++++----- .../retromusic/fragments/home/HomeFragment.kt | 62 ++++++++------- .../retromusic/util/NavigationUtil.java | 6 +- app/src/main/res/layout/fragment_home.xml | 8 +- ...y_user_info.xml => fragment_user_info.xml} | 5 +- 6 files changed, 101 insertions(+), 59 deletions(-) rename app/src/main/java/code/name/monkey/retromusic/{activities/UserInfoActivity.kt => fragments/UserInfoFragment.kt} (75%) rename app/src/main/res/layout/{activity_user_info.xml => fragment_user_info.xml} (96%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 16fa048d2..0ef67ef19 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -112,7 +112,6 @@ - diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/UserInfoFragment.kt similarity index 75% rename from app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt rename to app/src/main/java/code/name/monkey/retromusic/fragments/UserInfoFragment.kt index 6288b14b6..063f04eff 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/UserInfoFragment.kt @@ -12,25 +12,33 @@ * See the GNU General Public License for more details. * */ -package code.name.monkey.retromusic.activities +package code.name.monkey.retromusic.fragments import android.app.Activity import android.content.Intent import android.content.res.ColorStateList import android.graphics.Bitmap +import android.graphics.Color import android.net.Uri import android.os.Bundle import android.text.TextUtils +import android.view.LayoutInflater import android.view.MenuItem +import android.view.View +import android.view.ViewGroup import android.widget.Toast +import androidx.core.view.doOnPreDraw +import androidx.fragment.app.Fragment +import androidx.navigation.fragment.findNavController import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.retromusic.Constants.USER_BANNER import code.name.monkey.retromusic.Constants.USER_PROFILE -import code.name.monkey.retromusic.activities.base.AbsBaseActivity -import code.name.monkey.retromusic.databinding.ActivityUserInfoBinding +import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentUserInfoBinding import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.extensions.applyToolbar +import code.name.monkey.retromusic.extensions.resolveColor import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.util.ImageUtil @@ -43,6 +51,7 @@ import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.target.Target import com.github.dhaval2404.imagepicker.ImagePicker import com.github.dhaval2404.imagepicker.constant.ImageProvider +import com.google.android.material.transition.MaterialContainerTransform import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -52,16 +61,28 @@ import java.io.File import java.io.FileOutputStream import java.io.IOException -class UserInfoActivity : AbsBaseActivity() { +class UserInfoFragment : Fragment() { - private lateinit var binding: ActivityUserInfoBinding + private var _binding: FragmentUserInfoBinding? = null + private val binding get() = _binding!! - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - binding = ActivityUserInfoBinding.inflate(layoutInflater) - setContentView(binding.root) - setStatusbarColorAuto() - setTaskDescriptionColorAuto() + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + sharedElementEnterTransition = MaterialContainerTransform().apply { + drawingViewId = R.id.fragment_container + duration = 300L + scrimColor = Color.TRANSPARENT + setAllContainerColors(requireContext().resolveColor(R.attr.colorSurface)) + } + _binding = FragmentUserInfoBinding.inflate(layoutInflater) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) applyToolbar(binding.toolbar) binding.nameContainer.accentColor() @@ -78,20 +99,30 @@ class UserInfoActivity : AbsBaseActivity() { binding.next.setOnClickListener { val nameString = binding.name.text.toString().trim { it <= ' ' } if (TextUtils.isEmpty(nameString)) { - Toast.makeText(this, "Umm you're name can't be empty!", Toast.LENGTH_SHORT).show() + Toast.makeText( + requireContext(), + "Umm you're name can't be empty!", + Toast.LENGTH_SHORT + ).show() return@setOnClickListener } PreferenceUtil.userName = nameString - setResult(Activity.RESULT_OK) - finish() + findNavController().navigateUp() } val textColor = - MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(accentColor())) + MaterialValueHelper.getPrimaryTextColor( + requireContext(), + ColorUtil.isColorLight(accentColor()) + ) binding.next.backgroundTintList = ColorStateList.valueOf(accentColor()) binding.next.iconTint = ColorStateList.valueOf(textColor) binding.next.setTextColor(textColor) loadProfile() + postponeEnterTransition() + view.doOnPreDraw { + startPostponedEnterTransition() + } } private fun loadProfile() { @@ -110,7 +141,7 @@ class UserInfoActivity : AbsBaseActivity() { override fun onOptionsItemSelected(item: MenuItem): Boolean { if (item.itemId == android.R.id.home) { - onBackPressed() + findNavController().navigateUp() } return super.onOptionsItemSelected(item) } @@ -131,7 +162,7 @@ class UserInfoActivity : AbsBaseActivity() { .start(PICK_IMAGE_REQUEST) } - public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (resultCode == Activity.RESULT_OK && requestCode == PICK_IMAGE_REQUEST) { val fileUri = data?.data @@ -140,9 +171,9 @@ class UserInfoActivity : AbsBaseActivity() { val fileUri = data?.data fileUri?.let { setAndSaveBannerImage(it) } } else if (resultCode == ImagePicker.RESULT_ERROR) { - Toast.makeText(this, ImagePicker.getError(data), Toast.LENGTH_SHORT).show() + Toast.makeText(requireContext(), ImagePicker.getError(data), Toast.LENGTH_SHORT).show() } else { - Toast.makeText(this, "Task Cancelled", Toast.LENGTH_SHORT).show() + Toast.makeText(requireContext(), "Task Cancelled", Toast.LENGTH_SHORT).show() } } @@ -177,7 +208,7 @@ class UserInfoActivity : AbsBaseActivity() { private fun saveImage(bitmap: Bitmap, fileName: String) { CoroutineScope(Dispatchers.IO).launch { - val appDir = applicationContext.filesDir + val appDir = requireContext().filesDir val file = File(appDir, fileName) var successful = false try { @@ -190,7 +221,7 @@ class UserInfoActivity : AbsBaseActivity() { } if (successful) { withContext(Dispatchers.Main) { - Toast.makeText(this@UserInfoActivity, "Updated", Toast.LENGTH_SHORT).show() + Toast.makeText(requireContext(), "Updated", Toast.LENGTH_SHORT).show() } } } @@ -225,6 +256,11 @@ class UserInfoActivity : AbsBaseActivity() { .into(binding.userImage) } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + companion object { private const val PICK_IMAGE_REQUEST = 9002 private const val PICK_BANNER_REQUEST = 9004 diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt index d55f196b0..7812e6790 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt @@ -14,7 +14,6 @@ */ package code.name.monkey.retromusic.fragments.home -import android.app.ActivityOptions import android.os.Bundle import android.view.Menu import android.view.MenuInflater @@ -24,6 +23,7 @@ import android.view.View import androidx.core.os.bundleOf import androidx.core.text.HtmlCompat import androidx.core.view.doOnPreDraw +import androidx.navigation.fragment.FragmentNavigatorExtras import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import code.name.monkey.appthemehelper.ThemeStore @@ -38,10 +38,9 @@ import code.name.monkey.retromusic.dialogs.ImportPlaylistDialog import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension -import code.name.monkey.retromusic.util.NavigationUtil import code.name.monkey.retromusic.util.PreferenceUtil import com.google.android.gms.cast.framework.CastButtonFactory -import com.google.android.material.transition.MaterialFadeThrough +import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.transition.MaterialSharedAxis class HomeFragment : @@ -55,14 +54,35 @@ class HomeFragment : _binding = getBinding(PreferenceUtil.isHomeBanner, view) mainActivity.setSupportActionBar(binding.toolbar) mainActivity.supportActionBar?.title = null - setStatusBarColorAuto(view) + setupListeners() + binding.titleWelcome.text = String.format("%s", PreferenceUtil.userName) + + val homeAdapter = HomeAdapter(mainActivity) + binding.recyclerView.apply { + layoutManager = LinearLayoutManager(mainActivity) + adapter = homeAdapter + } + libraryViewModel.getHome().observe(viewLifecycleOwner, { + homeAdapter.swapData(it) + }) + + loadProfile() + setupTitle() + postponeEnterTransition() + view.doOnPreDraw { startPostponedEnterTransition() } + binding.appBarLayout.statusBarForeground = + MaterialShapeDrawable.createWithElevationOverlay(requireContext()) + } + + private fun setupListeners() { binding.bannerImage?.setOnClickListener { - val options = ActivityOptions.makeSceneTransitionAnimation( - mainActivity, - binding.userImage, - getString(R.string.transition_user_image) + binding.userImage.transitionName = "userImage" + findNavController().navigate( + R.id.user_info_fragment, null, null, FragmentNavigatorExtras( + binding.userImage to "userImage" + ) ) - NavigationUtil.goToUserInfo(requireActivity(), options) + reenterTransition = null } binding.lastAdded.setOnClickListener { @@ -94,28 +114,12 @@ class HomeFragment : } binding.userImage.setOnClickListener { - val options = ActivityOptions.makeSceneTransitionAnimation( - mainActivity, - binding.userImage, - getString(R.string.transition_user_image) + findNavController().navigate( + R.id.user_info_fragment, null, null, FragmentNavigatorExtras( + binding.userImage to "user_image" + ) ) - NavigationUtil.goToUserInfo(requireActivity(), options) } - binding.titleWelcome.text = String.format("%s", PreferenceUtil.userName) - - val homeAdapter = HomeAdapter(mainActivity) - binding.recyclerView.apply { - layoutManager = LinearLayoutManager(mainActivity) - adapter = homeAdapter - } - libraryViewModel.getHome().observe(viewLifecycleOwner, { - homeAdapter.swapData(it) - }) - - loadProfile() - setupTitle() - postponeEnterTransition() - view.doOnPreDraw { startPostponedEnterTransition() } } private fun getBinding(homeBanner: Boolean, view: View): HomeBindingAdapter { diff --git a/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.java index f0d324c7a..03fe930d6 100755 --- a/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.java @@ -34,7 +34,7 @@ import code.name.monkey.retromusic.activities.LyricsActivity; import code.name.monkey.retromusic.activities.PlayingQueueActivity; import code.name.monkey.retromusic.activities.PurchaseActivity; import code.name.monkey.retromusic.activities.SupportDevelopmentActivity; -import code.name.monkey.retromusic.activities.UserInfoActivity; +import code.name.monkey.retromusic.fragments.UserInfoFragment; import code.name.monkey.retromusic.activities.WhatsNewActivity; import code.name.monkey.retromusic.activities.bugreport.BugReportActivity; import code.name.monkey.retromusic.helper.MusicPlayerRemote; @@ -70,8 +70,8 @@ public class NavigationUtil { public static void goToUserInfo( @NonNull Activity activity, @NonNull ActivityOptions activityOptions) { - ActivityCompat.startActivity( - activity, new Intent(activity, UserInfoActivity.class), activityOptions.toBundle()); + ActivityCompat.startActivity( + activity, new Intent(activity, UserInfoFragment.class), activityOptions.toBundle()); } public static void gotoDriveMode(@NotNull final Activity activity) { diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index dc261dac6..e4100c679 100755 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -16,13 +16,15 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" + android:fitsSystemWindows="true" android:transitionGroup="true"> + app:liftOnScroll="true" + android:fitsSystemWindows="true"> + tools:srcCompat="@tools:sample/avatars" + android:transitionName="user_image" /> Date: Sun, 12 Sep 2021 19:50:33 +0530 Subject: [PATCH 009/149] Made Navigation Bar transparent and added some MD3 themes --- .../retromusic/activities/MainActivity.kt | 2 +- .../base/AbsSlidingMusicPanelActivity.kt | 20 +++--- .../activities/base/AbsThemeActivity.kt | 1 + .../retromusic/extensions/FragmentExt.kt | 5 ++ .../artists/AlbumArtistDetailsViewModel.kt | 66 ------------------- .../fragments/base/AbsRecyclerViewFragment.kt | 3 +- .../views/BottomNavigationBarTinted.kt | 15 +---- .../main/res/drawable/popup_background.xml | 2 +- .../layout-land/fragment_album_details.xml | 3 +- .../layout-land/fragment_artist_details.xml | 1 + .../res/layout-land/fragment_banner_home.xml | 8 ++- .../main/res/layout-land/fragment_home.xml | 8 ++- .../res/layout/fragment_album_details.xml | 3 +- .../res/layout/fragment_artist_details.xml | 3 +- .../main/res/layout/fragment_banner_home.xml | 4 +- app/src/main/res/layout/fragment_folder.xml | 3 +- .../res/layout/fragment_main_recycler.xml | 5 +- .../res/layout/fragment_playlist_detail.xml | 3 +- app/src/main/res/layout/fragment_search.xml | 3 +- .../res/layout/sliding_music_panel_layout.xml | 10 ++- app/src/main/res/navigation/main_graph.xml | 4 +- app/src/main/res/values-night-v27/styles.xml | 2 +- app/src/main/res/values-night/colors.xml | 1 + app/src/main/res/values-night/styles.xml | 2 +- app/src/main/res/values-v21/styles.xml | 3 - .../main/res/values-v27/styles_parents.xml | 6 +- app/src/main/res/values/colors.xml | 5 ++ app/src/main/res/values/styles.xml | 5 +- app/src/main/res/values/styles_parents.xml | 7 +- 29 files changed, 76 insertions(+), 127 deletions(-) delete mode 100644 app/src/main/java/code/name/monkey/retromusic/fragments/artists/AlbumArtistDetailsViewModel.kt 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 ade445e67..231240018 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 @@ -27,6 +27,7 @@ import code.name.monkey.retromusic.activities.base.AbsCastActivity import code.name.monkey.retromusic.databinding.SlidingMusicPanelLayoutBinding import code.name.monkey.retromusic.extensions.extra import code.name.monkey.retromusic.extensions.findNavController +import code.name.monkey.retromusic.extensions.surfaceColor import code.name.monkey.retromusic.fragments.base.AbsRecyclerViewFragment import code.name.monkey.retromusic.fragments.home.HomeFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -55,7 +56,6 @@ class MainActivity : AbsCastActivity(), OnSharedPreferenceChangeListener { override fun onCreate(savedInstanceState: Bundle?) { setDrawUnderStatusBar() super.onCreate(savedInstanceState) - setStatusbarColorAuto() setTaskDescriptionColorAuto() hideStatusBar() updateTabs() diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt index 44dd8d8de..9d84107ad 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt @@ -14,6 +14,7 @@ */ package code.name.monkey.retromusic.activities.base +import android.content.res.ColorStateList import android.graphics.Color import android.os.Bundle import android.view.View @@ -26,10 +27,10 @@ import androidx.core.view.updateLayoutParams import androidx.core.view.updatePadding import androidx.fragment.app.Fragment import androidx.fragment.app.commit +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.RetroBottomSheetBehavior -import code.name.monkey.retromusic.databinding.ActivityMainContentBinding import code.name.monkey.retromusic.databinding.SlidingMusicPanelLayoutBinding import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.fragments.LibraryViewModel @@ -109,6 +110,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { println("Do something") } } + println(bottomSheetBehavior.peekHeight) } } @@ -158,12 +160,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { } protected fun wrapSlidingMusicPanel(): SlidingMusicPanelLayoutBinding { - val slidingMusicPanelLayoutBinding = - SlidingMusicPanelLayoutBinding.inflate(layoutInflater) - val contentContainer: ViewGroup = - slidingMusicPanelLayoutBinding.mainContentFrame - ActivityMainContentBinding.inflate(layoutInflater, contentContainer, true) - return slidingMusicPanelLayoutBinding + return SlidingMusicPanelLayoutBinding.inflate(layoutInflater) } fun collapsePanel() { @@ -187,11 +184,16 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { open fun onPanelCollapsed() { // restore values - super.setLightStatusbar(lightStatusBar) + super.setLightStatusbarAuto(surfaceColor()) super.setTaskDescriptionColor(taskColor) } open fun onPanelExpanded() { + if (nowPlayingScreen == Blur ) { + super.setLightStatusbar(false) + } else { + super.setLightStatusbarAuto(surfaceColor()) + } } private fun setupSlidingUpPanel() { @@ -286,7 +288,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { } private fun hideBottomBar(hide: Boolean) { - val heightOfBar = RetroUtil.getNavigationBarHeight() + + val heightOfBar = if (MusicPlayerRemote.isCasting) dip(R.dimen.cast_mini_player_height) else dip(R.dimen.mini_player_height) val heightOfBarWithTabs = RetroUtil.getNavigationBarHeight() + if (MusicPlayerRemote.isCasting) dip(R.dimen.mini_cast_player_height_expanded) else dip( diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt index 45cf0c0bf..337f54b35 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt @@ -33,6 +33,7 @@ import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.LanguageContextWrapper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.extensions.surfaceColor import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.theme.ThemeManager diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/FragmentExt.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/FragmentExt.kt index 6c74050af..27610f535 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/FragmentExt.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/FragmentExt.kt @@ -29,6 +29,7 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager import androidx.navigation.fragment.NavHostFragment import code.name.monkey.retromusic.util.PreferenceUtil +import com.google.android.material.appbar.MaterialToolbar fun Fragment.getIntRes(@IntegerRes int: Int): Int { return resources.getInteger(int) @@ -97,3 +98,7 @@ fun Context.getDrawableCompat(@DrawableRes drawableRes: Int): Drawable { fun Fragment.getDrawableCompat(@DrawableRes drawableRes: Int): Drawable { return AppCompatResources.getDrawable(requireContext(), drawableRes)!! } + +fun Fragment.applyToolbar(toolbar: MaterialToolbar) { + (requireActivity() as AppCompatActivity).applyToolbar(toolbar) +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/AlbumArtistDetailsViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/AlbumArtistDetailsViewModel.kt deleted file mode 100644 index 3d202bb55..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/AlbumArtistDetailsViewModel.kt +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2020 Hemanth Savarla. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - */ -package code.name.monkey.retromusic.fragments.artists - -import androidx.lifecycle.* -import code.name.monkey.retromusic.interfaces.IMusicServiceEventListener -import code.name.monkey.retromusic.model.Artist -import code.name.monkey.retromusic.network.Result -import code.name.monkey.retromusic.network.model.LastFmArtist -import code.name.monkey.retromusic.repository.RealRepository -import kotlinx.coroutines.Dispatchers.IO -import kotlinx.coroutines.launch - -class AlbumArtistDetailsViewModel( - private val realRepository: RealRepository, - private val artistName: String -) : ViewModel(), IMusicServiceEventListener { - private val artistDetails = MutableLiveData() - - init { - fetchAlbumArtist() - } - - private fun fetchAlbumArtist() { - viewModelScope.launch(IO) { - artistDetails.postValue(realRepository.albumArtistByName(artistName)) - } - } - - fun getArtist(): LiveData = artistDetails - - fun getArtistInfo( - name: String, - lang: String?, - cache: String? - ): LiveData> = liveData(IO) { - emit(Result.Loading) - val info = realRepository.artistInfo(name, lang, cache) - emit(info) - } - - override fun onMediaStoreChanged() { - fetchAlbumArtist() - } - - override fun onServiceConnected() {} - override fun onServiceDisconnected() {} - override fun onQueueChanged() {} - override fun onFavoriteStateChanged() {} - override fun onPlayingMetaChanged() {} - override fun onPlayStateChanged() {} - override fun onRepeatModeChanged() {} - override fun onShuffleModeChanged() {} -} diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt index 3167e9d49..f42811c9a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt @@ -33,7 +33,7 @@ import code.name.monkey.retromusic.dialogs.ImportPlaylistDialog import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.util.DensityUtil import code.name.monkey.retromusic.util.ThemedFastScroller.create -import com.google.android.material.transition.MaterialFadeThrough +import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.transition.MaterialSharedAxis import me.zhanghai.android.fastscroll.FastScroller import me.zhanghai.android.fastscroll.FastScrollerBuilder @@ -58,6 +58,7 @@ abstract class AbsRecyclerViewFragment
, LM : Recycle initAdapter() setUpRecyclerView() setupToolbar() + binding.appBarLayout.statusBarForeground = MaterialShapeDrawable.createWithElevationOverlay(requireContext()); } fun toolbar(): Toolbar { diff --git a/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt b/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt index 91cb5d53f..0f77ef1ea 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt +++ b/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt @@ -17,16 +17,13 @@ package code.name.monkey.retromusic.views import android.content.Context import android.content.res.ColorStateList import android.graphics.drawable.ColorDrawable -import android.graphics.drawable.RippleDrawable import android.util.AttributeSet -import androidx.core.content.ContextCompat import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.NavigationViewUtil import code.name.monkey.retromusic.R import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.RippleUtils import com.google.android.material.bottomnavigation.BottomNavigationView class BottomNavigationBarTinted @JvmOverloads constructor( @@ -50,17 +47,7 @@ class BottomNavigationBarTinted @JvmOverloads constructor( ColorUtil.withAlpha(iconColor, 0.5f), accentColor ) - itemBackground = RippleDrawable( - RippleUtils.convertToRippleDrawableColor( - ColorStateList.valueOf( - ThemeStore.accentColor(context).addAlpha() - ) - ), - ContextCompat.getDrawable(context, R.drawable.bottom_navigation_item_background), - ContextCompat.getDrawable(context, R.drawable.bottom_navigation_item_background_mask) - ) - setOnApplyWindowInsetsListener(null) - //itemRippleColor = ColorStateList.valueOf(accentColor) + itemRippleColor = ColorStateList.valueOf(accentColor.addAlpha()) background = ColorDrawable(ATHUtil.resolveColor(context, R.attr.colorSurface)) } } diff --git a/app/src/main/res/drawable/popup_background.xml b/app/src/main/res/drawable/popup_background.xml index 4a4471df5..995f1a73c 100644 --- a/app/src/main/res/drawable/popup_background.xml +++ b/app/src/main/res/drawable/popup_background.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_album_details.xml b/app/src/main/res/layout-land/fragment_album_details.xml index 7597f6817..2a2d6d663 100644 --- a/app/src/main/res/layout-land/fragment_album_details.xml +++ b/app/src/main/res/layout-land/fragment_album_details.xml @@ -7,7 +7,8 @@ android:background="?attr/colorSurface" android:orientation="vertical" android:transitionName="@string/transition_album_art" - tools:ignore="UnusedAttribute"> + tools:ignore="UnusedAttribute" + android:fitsSystemWindows="true"> + app:liftOnScroll="true" + android:fitsSystemWindows="true"> + tools:srcCompat="@tools:sample/avatars" + android:transitionName="user_image"/> + app:liftOnScroll="true" + android:fitsSystemWindows="true"> + tools:srcCompat="@tools:sample/avatars" + android:transitionName="user_image"/> + android:layout_height="match_parent" + android:fitsSystemWindows="true"> + android:layout_height="match_parent" + android:fitsSystemWindows="true"> + android:transitionGroup="true" + android:fitsSystemWindows="true"> + android:fitsSystemWindows="true"> + android:fitsSystemWindows="true"> + android:transitionGroup="true" + android:fitsSystemWindows="true"> + android:orientation="vertical" + android:fitsSystemWindows="true"> - + android:layout_height="match_parent" + android:background="?colorSurface" + app:defaultNavHost="true" + app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" /> - + \ No newline at end of file diff --git a/app/src/main/res/values-night-v27/styles.xml b/app/src/main/res/values-night-v27/styles.xml index 752095b5e..f110231a8 100644 --- a/app/src/main/res/values-night-v27/styles.xml +++ b/app/src/main/res/values-night-v27/styles.xml @@ -30,6 +30,6 @@ false @color/darkColorSurface @style/Widget.MaterialComponents.CardView - @color/darkColorSurface + @color/bottomSheetColor \ No newline at end of file diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 9a9199335..5718c56e9 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -3,4 +3,5 @@ @android:color/black + #202020 \ No newline at end of file diff --git a/app/src/main/res/values-night/styles.xml b/app/src/main/res/values-night/styles.xml index eb0b26e11..f2fbebc18 100644 --- a/app/src/main/res/values-night/styles.xml +++ b/app/src/main/res/values-night/styles.xml @@ -31,6 +31,6 @@ @color/darkColorSurface @android:color/transparent @style/Widget.Material3.CardView.Elevated - @color/darkColorSurface + @color/bottomSheetColor \ No newline at end of file diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml index 099cfe405..57d3cb485 100644 --- a/app/src/main/res/values-v21/styles.xml +++ b/app/src/main/res/values-v21/styles.xml @@ -10,7 +10,6 @@ @android:color/transparent false @style/TextViewStyleIm - @color/window_color_light \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 55c149c1a..1f80430b2 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -30,5 +30,10 @@ #FFD8D8D8 #ff33b5e5 + #FFFFFF + #202020 + #111111 + + #FFFFFF diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index eed073c4f..f7efe626f 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -7,7 +7,6 @@ none 16dp @style/WindowAnimationTransition - @color/window_color_light From cccbc2804e40a2d4124b0d28c9b1b9606605a30d Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 16 Sep 2021 17:50:01 +0530 Subject: [PATCH 010/149] Set light navigation bar --- app/build.gradle | 2 -- app/src/main/java/code/name/monkey/retromusic/App.kt | 6 +++++- .../monkey/retromusic/activities/base/AbsThemeActivity.kt | 5 +++++ app/src/main/res/layout/activity_permission.xml | 3 ++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f504eb7fd..e2a836f76 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -33,8 +33,6 @@ android { buildTypes { release { //debuggable true - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release } debug { diff --git a/app/src/main/java/code/name/monkey/retromusic/App.kt b/app/src/main/java/code/name/monkey/retromusic/App.kt index 7e5202f59..707b9c921 100644 --- a/app/src/main/java/code/name/monkey/retromusic/App.kt +++ b/app/src/main/java/code/name/monkey/retromusic/App.kt @@ -22,6 +22,7 @@ import code.name.monkey.retromusic.Constants.PRO_VERSION_PRODUCT_ID import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager import com.anjlab.android.iab.v3.BillingProcessor import com.anjlab.android.iab.v3.TransactionDetails +import com.google.android.material.color.DynamicColors import org.koin.android.ext.koin.androidContext import org.koin.core.context.startKoin @@ -45,11 +46,14 @@ class App : Application() { .commit() } + DynamicColors.applyToActivitiesIfAvailable(this) + if (VersionUtils.hasNougatMR()) DynamicShortcutManager(this).initDynamicShortcuts() // automatically restores purchases - billingProcessor = BillingProcessor(this, BuildConfig.GOOGLE_PLAY_LICENSING_KEY, + billingProcessor = BillingProcessor( + this, BuildConfig.GOOGLE_PLAY_LICENSING_KEY, object : BillingProcessor.IBillingHandler { override fun onProductPurchased(productId: String, details: TransactionDetails?) {} diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt index 337f54b35..67eca8cfe 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt @@ -51,6 +51,7 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable { registerSystemUiVisibility() toggleScreenOn() setDrawUnderNavigationBar() + setLightNavigationAuto() //MaterialDialogsUtil.updateMaterialDialogsThemeSingleton(this) } @@ -150,6 +151,10 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable { setNavigationbarColor(ATHUtil.resolveColor(this, R.attr.colorSurface)) } + fun setLightNavigationAuto() { + ATH.setLightNavigationbarAuto(this, surfaceColor()) + } + open fun setLightStatusbar(enabled: Boolean) { ATH.setLightStatusbar(this, enabled) } diff --git a/app/src/main/res/layout/activity_permission.xml b/app/src/main/res/layout/activity_permission.xml index a03ffe0c4..a58d69804 100644 --- a/app/src/main/res/layout/activity_permission.xml +++ b/app/src/main/res/layout/activity_permission.xml @@ -4,7 +4,8 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="?attr/colorSurface"> + android:background="?attr/colorSurface" + android:fitsSystemWindows="true"> Date: Thu, 16 Sep 2021 18:20:14 +0530 Subject: [PATCH 011/149] Fixed tag-editor background --- .../name/monkey/retromusic/activities/SettingsActivity.kt | 2 -- .../code/name/monkey/retromusic/extensions/ActivityEx.kt | 2 +- app/src/main/res/layout-land/activity_album_tag_editor.xml | 7 ------- app/src/main/res/layout/activity_album_tag_editor.xml | 1 + app/src/main/res/layout/activity_song_tag_editor.xml | 3 ++- app/src/main/res/values-v27/styles_parents.xml | 1 + app/src/main/res/values/styles_parents.xml | 2 +- 7 files changed, 6 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt index 9b314a48f..e2d84dc8e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt @@ -19,7 +19,6 @@ import android.view.MenuItem import androidx.navigation.NavController import androidx.navigation.NavDestination import code.name.monkey.appthemehelper.ThemeStore -import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsBaseActivity @@ -37,7 +36,6 @@ class SettingsActivity : AbsBaseActivity(), ColorCallback { super.onCreate(savedInstanceState) binding = ActivitySettingsBinding.inflate(layoutInflater) setContentView(binding.root) - setLightStatusbarAuto(ATHUtil.resolveColor(this, R.attr.colorSurface)) setupToolbar() } diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityEx.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityEx.kt index 991765898..ff33f4ad2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityEx.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityEx.kt @@ -21,7 +21,7 @@ import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import com.google.android.material.appbar.MaterialToolbar fun AppCompatActivity.applyToolbar(toolbar: MaterialToolbar) { - toolbar.setBackgroundColor(surfaceColor()) + //toolbar.setBackgroundColor(surfaceColor()) ToolbarContentTintHelper.colorBackButton(toolbar) setSupportActionBar(toolbar) } diff --git a/app/src/main/res/layout-land/activity_album_tag_editor.xml b/app/src/main/res/layout-land/activity_album_tag_editor.xml index 8b13076b5..43b99d6aa 100644 --- a/app/src/main/res/layout-land/activity_album_tag_editor.xml +++ b/app/src/main/res/layout-land/activity_album_tag_editor.xml @@ -10,13 +10,6 @@ android:layout_height="match_parent" android:orientation="vertical"> - - - - - + android:fitsSystemWindows="true" + android:background="?attr/colorSurface"> @style/Widget.Material3.BottomNavigationView @style/Widget.Material3.CardView.Elevated @color/bottomSheetColorLight + @color/md_grey_400 \ No newline at end of file diff --git a/app/src/main/res/values/styles_parents.xml b/app/src/main/res/values/styles_parents.xml index ec4afa597..f4b5fbcfd 100644 --- a/app/src/main/res/values/styles_parents.xml +++ b/app/src/main/res/values/styles_parents.xml @@ -75,9 +75,9 @@ @style/MaterialPopupMenuStyle @style/Widget.Material3.CardView.Elevated @color/bottomSheetColorLight + @color/md_grey_400 - \ No newline at end of file diff --git a/app/src/main/res/values-night/colors_md3.xml b/app/src/main/res/values-night/colors_md3.xml new file mode 100644 index 000000000..4450fd615 --- /dev/null +++ b/app/src/main/res/values-night/colors_md3.xml @@ -0,0 +1,4 @@ + + + @color/elevationOverlayDark + \ No newline at end of file diff --git a/app/src/main/res/values-night/styles.xml b/app/src/main/res/values-night/styles.xml index 545d17a8e..8a999c3eb 100644 --- a/app/src/main/res/values-night/styles.xml +++ b/app/src/main/res/values-night/styles.xml @@ -31,5 +31,6 @@ @android:color/transparent @style/Widget.Material3.CardView.Elevated @color/bottomSheetColor + @color/elevationOverlayDark \ No newline at end of file diff --git a/app/src/main/res/values-v27/styles_parents.xml b/app/src/main/res/values-v27/styles_parents.xml index b2fcc3abc..3ef2b2de9 100644 --- a/app/src/main/res/values-v27/styles_parents.xml +++ b/app/src/main/res/values-v27/styles_parents.xml @@ -28,6 +28,7 @@ @style/MaterialButtonTheme @style/Widget.Material3.CardView.Elevated @color/bottomSheetColor + @color/elevationOverlay \ No newline at end of file diff --git a/app/src/main/res/values-v31/colors_md3.xml b/app/src/main/res/values-v31/colors_md3.xml new file mode 100644 index 000000000..92a586af6 --- /dev/null +++ b/app/src/main/res/values-v31/colors_md3.xml @@ -0,0 +1,5 @@ + + + @android:color/system_accent1_100 + @android:color/system_accent1_900 + \ No newline at end of file diff --git a/app/src/main/res/values/colors_md3.xml b/app/src/main/res/values/colors_md3.xml new file mode 100644 index 000000000..c1144310f --- /dev/null +++ b/app/src/main/res/values/colors_md3.xml @@ -0,0 +1,6 @@ + + + @color/md_grey_600 + @color/md_grey_700 + @color/elevationOverlayLight + \ No newline at end of file diff --git a/app/src/main/res/values/styles_parents.xml b/app/src/main/res/values/styles_parents.xml index 1cdf495ff..6be8a9879 100644 --- a/app/src/main/res/values/styles_parents.xml +++ b/app/src/main/res/values/styles_parents.xml @@ -16,6 +16,7 @@ @style/MaterialPopupMenuStyle @style/Widget.Material3.CardView.Elevated @color/bottomSheetColor + @color/elevationOverlay \ No newline at end of file diff --git a/app/src/main/res/values-v27/styles_parents.xml b/app/src/main/res/values-v27/styles_parents.xml index 3ef2b2de9..3c238d1ee 100644 --- a/app/src/main/res/values-v27/styles_parents.xml +++ b/app/src/main/res/values-v27/styles_parents.xml @@ -14,7 +14,7 @@ - - - \ No newline at end of file diff --git a/app/src/main/res/values-v31/colors_md3.xml b/app/src/main/res/values-v31/colors_md3.xml deleted file mode 100644 index 92a586af6..000000000 --- a/app/src/main/res/values-v31/colors_md3.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - @android:color/system_accent1_100 - @android:color/system_accent1_900 - \ No newline at end of file diff --git a/app/src/main/res/values-v31/styles_parents.xml b/app/src/main/res/values-v31/styles_parents.xml new file mode 100644 index 000000000..dfc349150 --- /dev/null +++ b/app/src/main/res/values-v31/styles_parents.xml @@ -0,0 +1,12 @@ + + + + - - - + + + + + + + + + + From 2997095bb30cb4ed2b759d9ee592b881e0f615a4 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Fri, 24 Sep 2021 23:20:23 +0530 Subject: [PATCH 038/149] Fixed a crash --- .../code/name/monkey/retromusic/service/MusicService.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java index 662d77552..3ab626a01 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java +++ b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java @@ -1045,7 +1045,9 @@ public class MusicService extends MediaBrowserServiceCompat if (playback != null && playback.isPlaying()) { startFadeAnimator(playback, false, () -> { //Code to run when Animator Ends - playback.pause(); + if (playback != null) { + playback.pause(); + } notifyChange(PLAY_STATE_CHANGED); }); } From 289557898e18ce2fbeea40c746e44c81d2679a18 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 25 Sep 2021 18:49:21 +0530 Subject: [PATCH 039/149] MD3 Play & Shuffle button --- .../fragments/base/AbsRecyclerViewFragment.kt | 9 +++-- .../res/layout/fragment_album_content.xml | 12 +----- .../res/layout/fragment_artist_content.xml | 10 +---- .../res/layout/item_list_quick_actions.xml | 40 ++++++------------- 4 files changed, 23 insertions(+), 48 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt index 32e8e4b4a..c38c343a1 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt @@ -79,10 +79,13 @@ abstract class AbsRecyclerViewFragment, LM : Recycle } }) - binding.shuffleButton.setOnClickListener { - onShuffleClicked() + binding.shuffleButton.apply { + setOnClickListener { + onShuffleClicked() + } + accentColor() + hide() } - binding.shuffleButton.accentColor() } else { binding.shuffleButton.isVisible = false } diff --git a/app/src/main/res/layout/fragment_album_content.xml b/app/src/main/res/layout/fragment_album_content.xml index 1cf80e86d..6dc9c1b96 100644 --- a/app/src/main/res/layout/fragment_album_content.xml +++ b/app/src/main/res/layout/fragment_album_content.xml @@ -8,18 +8,14 @@ - + android:orientation="horizontal" + android:paddingHorizontal="16dp" + android:paddingVertical="10dp"> + app:icon="@drawable/ic_play_arrow" /> + app:icon="@drawable/ic_shuffle" /> - \ No newline at end of file + \ No newline at end of file From f23b102e41d867afea775b84c92dc636dee06227 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sun, 26 Sep 2021 15:59:32 +0530 Subject: [PATCH 040/149] Added new theme for Material You & a toggle --- .../java/code/name/monkey/retromusic/App.kt | 5 ++- .../code/name/monkey/retromusic/Constants.kt | 1 + .../tageditor/AlbumTagEditorActivity.kt | 11 +++-- .../tageditor/SongTagEditorActivity.kt | 20 ++++----- .../monkey/retromusic/adapter/HomeAdapter.kt | 8 +++- .../adapter/song/ShuffleButtonSongAdapter.kt | 10 ++--- .../monkey/retromusic/extensions/ColorExt.kt | 44 ++++++++++++++++--- .../retromusic/extensions/ViewExtensions.kt | 2 + .../retromusic/fragments/home/HomeFragment.kt | 8 +++- .../settings/ThemeSettingsFragment.kt | 6 +++ .../retromusic/glide/RetroGlideExtension.kt | 9 +++- .../monkey/retromusic/util/PreferenceUtil.kt | 3 ++ .../retromusic/util/ThemedFastScroller.kt | 9 +++- .../retromusic/util/theme/ThemeManager.kt | 16 ++++--- .../views/BottomNavigationBarTinted.kt | 35 ++++++++------- .../retromusic/views/PopupBackground.java | 5 +-- .../main/res/drawable-v31/rect_selector.xml | 34 ++++++++++++++ .../res/layout/fragment_album_content.xml | 5 ++- .../res/layout/fragment_artist_content.xml | 6 +-- .../res/layout/item_list_quick_actions.xml | 10 ++--- .../res/layout/sliding_music_panel_layout.xml | 9 +--- .../src/main/res/values-night-v31/colors.xml | 0 .../main/res/values-v27/styles_parents.xml | 12 +++-- .../src/main/res/values-v31/colors.xml | 0 .../main/res/values-v31/donottranslate.xml | 4 ++ app/src/main/res/values-v31/styles.xml | 9 ++++ .../main/res/values-v31/styles_parents.xml | 12 ----- app/src/main/res/values/colors.xml | 1 - app/src/main/res/values/dimens.xml | 6 +-- app/src/main/res/values/donottranslate.xml | 4 ++ app/src/main/res/values/styles.xml | 10 +++++ app/src/main/res/values/styles_parents.xml | 36 +++++---------- app/src/main/res/xml/pref_general.xml | 12 +++++ .../name/monkey/appthemehelper/ThemeStore.kt | 4 -- 34 files changed, 243 insertions(+), 123 deletions(-) create mode 100644 app/src/main/res/drawable-v31/rect_selector.xml rename {appthemehelper => app}/src/main/res/values-night-v31/colors.xml (100%) rename {appthemehelper => app}/src/main/res/values-v31/colors.xml (100%) create mode 100644 app/src/main/res/values-v31/donottranslate.xml create mode 100644 app/src/main/res/values-v31/styles.xml delete mode 100644 app/src/main/res/values-v31/styles_parents.xml diff --git a/app/src/main/java/code/name/monkey/retromusic/App.kt b/app/src/main/java/code/name/monkey/retromusic/App.kt index 707b9c921..a1a70b14f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/App.kt +++ b/app/src/main/java/code/name/monkey/retromusic/App.kt @@ -20,6 +20,7 @@ import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.Constants.PRO_VERSION_PRODUCT_ID import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager +import code.name.monkey.retromusic.util.PreferenceUtil import com.anjlab.android.iab.v3.BillingProcessor import com.anjlab.android.iab.v3.TransactionDetails import com.google.android.material.color.DynamicColors @@ -46,7 +47,9 @@ class App : Application() { .commit() } - DynamicColors.applyToActivitiesIfAvailable(this) + if (PreferenceUtil.materialYou) { + DynamicColors.applyToActivitiesIfAvailable(this) + } if (VersionUtils.hasNougatMR()) DynamicShortcutManager(this).initDynamicShortcuts() diff --git a/app/src/main/java/code/name/monkey/retromusic/Constants.kt b/app/src/main/java/code/name/monkey/retromusic/Constants.kt index 738e5aa8e..8b97ef47b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/Constants.kt +++ b/app/src/main/java/code/name/monkey/retromusic/Constants.kt @@ -148,3 +148,4 @@ const val SHOW_LYRICS = "show_lyrics" const val REMEMBER_LAST_TAB = "remember_last_tab" const val LAST_USED_TAB = "last_used_tab" const val WHITELIST_MUSIC = "whitelist_music" +const val MATERIAL_YOU = "material_you" diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt index 2a17c54c8..de04ed5cc 100755 --- a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt @@ -33,6 +33,7 @@ import code.name.monkey.appthemehelper.util.MaterialUtil import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.ActivityAlbumTagEditorBinding import code.name.monkey.retromusic.extensions.appHandleColor +import code.name.monkey.retromusic.extensions.setTint import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper import code.name.monkey.retromusic.model.ArtworkInfo @@ -62,8 +63,6 @@ class AlbumTagEditorActivity : AbsTagEditorActivity(binding.editorImage) { @@ -119,10 +118,10 @@ class AlbumTagEditorActivity : AbsTagEditorActivity @SuppressLint("ClickableViewAccessibility") private fun setUpViews() { fillViewsWithFileTags() - MaterialUtil.setTint(binding.songTextContainer, false) - MaterialUtil.setTint(binding.composerContainer, false) - MaterialUtil.setTint(binding.albumTextContainer, false) - MaterialUtil.setTint(binding.artistContainer, false) - MaterialUtil.setTint(binding.albumArtistContainer, false) - MaterialUtil.setTint(binding.yearContainer, false) - MaterialUtil.setTint(binding.genreContainer, false) - MaterialUtil.setTint(binding.trackNumberContainer, false) - MaterialUtil.setTint(binding.lyricsContainer, false) + binding.songTextContainer.setTint(false) + binding.composerContainer.setTint(false) + binding.albumTextContainer.setTint(false) + binding.artistContainer.setTint(false) + binding.albumArtistContainer.setTint(false) + binding.yearContainer.setTint(false) + binding.genreContainer.setTint(false) + binding.trackNumberContainer.setTint(false) + binding.lyricsContainer.setTint(false) binding.songText.appHandleColor().addTextChangedListener(this) binding.albumText.appHandleColor().addTextChangedListener(this) 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 85c3578ba..2f922be04 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 @@ -21,6 +21,7 @@ import android.widget.ImageView import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.AppCompatTextView +import androidx.core.content.ContextCompat import androidx.core.os.bundleOf import androidx.fragment.app.findFragment import androidx.navigation.findNavController @@ -30,6 +31,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.ColorUtil +import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.* import code.name.monkey.retromusic.adapter.album.AlbumAdapter import code.name.monkey.retromusic.adapter.artist.ArtistAdapter @@ -190,7 +192,11 @@ class HomeAdapter( ) fun bindView(home: Home) { - val color = ThemeStore.accentColor(activity) + val color = if (PreferenceUtil.materialYou && VersionUtils.hasS()) { + ContextCompat.getColor(App.getContext(), R.color.m3_accent_color) + } else { + ThemeStore.accentColor(activity) + } itemView.findViewById(R.id.message).apply { setTextColor(color) setOnClickListener { diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/ShuffleButtonSongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/ShuffleButtonSongAdapter.kt index 989c4116e..329c68749 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/ShuffleButtonSongAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/ShuffleButtonSongAdapter.kt @@ -16,10 +16,9 @@ package code.name.monkey.retromusic.adapter.song import android.view.View import androidx.fragment.app.FragmentActivity -import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.extensions.applyColor -import code.name.monkey.retromusic.extensions.applyOutlineColor +import code.name.monkey.retromusic.extensions.accentColor +import code.name.monkey.retromusic.extensions.accentOutlineColor import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.interfaces.ICabHolder import code.name.monkey.retromusic.model.Song @@ -45,19 +44,18 @@ class ShuffleButtonSongAdapter( override fun onBindViewHolder(holder: SongAdapter.ViewHolder, position: Int) { if (holder.itemViewType == OFFSET_ITEM) { - val color = ThemeStore.accentColor(activity) val viewHolder = holder as ViewHolder viewHolder.playAction?.let { it.setOnClickListener { MusicPlayerRemote.openQueue(dataSet, 0, true) } - it.applyOutlineColor(color) + it.accentOutlineColor() } viewHolder.shuffleAction?.let { it.setOnClickListener { MusicPlayerRemote.openAndShuffleQueue(dataSet, true) } - it.applyColor(color) + it.accentColor() } } else { super.onBindViewHolder(holder, position - 1) diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExt.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExt.kt index b00bb9403..cbeecfeb7 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExt.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExt.kt @@ -37,6 +37,7 @@ import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.retromusic.App import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.util.PreferenceUtil.materialYou import com.google.android.material.button.MaterialButton import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton import com.google.android.material.floatingactionbutton.FloatingActionButton @@ -84,23 +85,32 @@ fun Fragment.resolveColor(@AttrRes attr: Int, fallBackColor: Int = 0) = fun Dialog.resolveColor(@AttrRes attr: Int, fallBackColor: Int = 0) = ATHUtil.resolveColor(context, attr, fallBackColor) +// Don't apply accent colors if Material You is enabled +// Material Components will take care of applying material you colors fun CheckBox.addAccentColor() { + if (materialYou) return buttonTintList = ColorStateList.valueOf(ThemeStore.accentColor(context)) } fun SeekBar.addAccentColor() { + if (materialYou) return val colorState = ColorStateList.valueOf(ThemeStore.accentColor(context)) progressTintList = colorState thumbTintList = colorState } -fun Button.accentTextColor() = setTextColor(ThemeStore.accentColor(App.getContext())) +fun Button.accentTextColor() { + if (materialYou) return + setTextColor(ThemeStore.accentColor(App.getContext())) +} fun MaterialButton.accentBackgroundColor() { + if (materialYou) return backgroundTintList = ColorStateList.valueOf(ThemeStore.accentColor(App.getContext())) } fun MaterialButton.accentOutlineColor() { + if (materialYou) return val color = ThemeStore.accentColor(context) val colorStateList = ColorStateList.valueOf(color) iconTint = colorStateList @@ -116,6 +126,7 @@ fun SeekBar.applyColor(@ColorInt color: Int) { } fun ExtendedFloatingActionButton.accentColor() { + if (materialYou) return val color = ThemeStore.accentColor(context) val textColor = MaterialValueHelper.getPrimaryTextColor(context, ColorUtil.isColorLight(color)) val colorStateList = ColorStateList.valueOf(color) @@ -126,6 +137,7 @@ fun ExtendedFloatingActionButton.accentColor() { } fun FloatingActionButton.accentColor() { + if (materialYou) return val color = ThemeStore.accentColor(context) val textColor = MaterialValueHelper.getPrimaryTextColor(context, ColorUtil.isColorLight(color)) backgroundTintList = ColorStateList.valueOf(color) @@ -145,15 +157,21 @@ fun MaterialButton.applyColor(color: Int) { iconTint = textColorColorStateList } -fun MaterialButton.accentColor() = applyColor(ThemeStore.accentColor(context)) +fun MaterialButton.accentColor() { + if (materialYou) return + applyColor(ThemeStore.accentColor(context)) +} fun MaterialButton.applyOutlineColor(color: Int) { - val textColorColorStateList = ColorStateList.valueOf(color) - setTextColor(textColorColorStateList) - iconTint = textColorColorStateList + val colorStateList = ColorStateList.valueOf(color) + iconTint = colorStateList + strokeColor = colorStateList + setTextColor(colorStateList) + rippleColor = colorStateList } fun TextInputLayout.accentColor() { + if (materialYou) return val accentColor = ThemeStore.accentColor(context) val colorState = ColorStateList.valueOf(accentColor) boxStrokeColor = accentColor @@ -162,6 +180,7 @@ fun TextInputLayout.accentColor() { } fun CircularProgressIndicator.accentColor() { + if (materialYou) return val color = ThemeStore.accentColor(context) setIndicatorColor(color) trackColor = ColorUtil.withAlpha(color, 0.2f) @@ -174,6 +193,21 @@ fun CircularProgressIndicator.applyColor(color: Int) { fun AppCompatImageView.accentColor(): Int = ThemeStore.accentColor(context) +fun TextInputLayout.setTint(background: Boolean = true) { + if (materialYou) return + val accentColor = ThemeStore.accentColor(context) + val colorState = ColorStateList.valueOf(accentColor) + + if (background) { + backgroundTintList = colorState + defaultHintTextColor = colorState + } else { + boxStrokeColor = accentColor + defaultHintTextColor = colorState + isHintAnimationEnabled = true + } +} + @CheckResult fun Drawable.tint(@ColorInt color: Int): Drawable { val tintedDrawable = DrawableCompat.wrap(this).mutate() diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt index 1e4d7745d..b5c8ad4fd 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt @@ -27,6 +27,7 @@ import androidx.core.animation.doOnEnd import androidx.core.animation.doOnStart import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.TintHelper +import code.name.monkey.retromusic.util.PreferenceUtil import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.imageview.ShapeableImageView import com.google.android.material.shape.ShapeAppearanceModel @@ -51,6 +52,7 @@ fun View.hidden() { fun View.showOrHide(show: Boolean) = if (show) show() else hide() fun EditText.appHandleColor(): EditText { + if (PreferenceUtil.materialYou) return this TintHelper.colorHandles(this, ThemeStore.accentColor(context)) return this } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt index 7812e6790..f7409d685 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt @@ -20,6 +20,7 @@ import android.view.MenuInflater import android.view.MenuItem import android.view.MenuItem.SHOW_AS_ACTION_IF_ROOM import android.view.View +import androidx.core.content.ContextCompat import androidx.core.os.bundleOf import androidx.core.text.HtmlCompat import androidx.core.view.doOnPreDraw @@ -29,6 +30,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.common.ATHToolbarActivity import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper +import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.* import code.name.monkey.retromusic.adapter.HomeAdapter import code.name.monkey.retromusic.databinding.FragmentBannerHomeBinding @@ -139,7 +141,11 @@ class HomeFragment : MaterialSharedAxis(MaterialSharedAxis.Z, false) findNavController().navigate(R.id.searchFragment, null, navOptions) } - val color = ThemeStore.accentColor(requireContext()) + val color = if (PreferenceUtil.materialYou && VersionUtils.hasS()) { + ContextCompat.getColor(App.getContext(), R.color.m3_accent_color) + } else { + ThemeStore.accentColor(requireContext()) + } val hexColor = String.format("#%06X", 0xFFFFFF and color) val appName = HtmlCompat.fromHtml( "Retro Music", 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 5635bb6fe..ab28f23d6 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 @@ -111,6 +111,12 @@ class ThemeSettingsFragment : AbsSettingsFragment() { true } } + + val materialYou: ATESwitchPreference? = findPreference(MATERIAL_YOU) + materialYou?.setOnPreferenceChangeListener { _, _ -> + restartActivity() + true + } } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.kt b/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.kt index f51a3cd05..e404a8133 100644 --- a/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.kt +++ b/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.kt @@ -1,8 +1,10 @@ package code.name.monkey.retromusic.glide import android.graphics.drawable.Drawable +import androidx.core.content.ContextCompat import code.name.monkey.appthemehelper.ThemeStore.Companion.accentColor import code.name.monkey.appthemehelper.util.TintHelper +import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.App.Companion.getContext import code.name.monkey.retromusic.Constants.USER_BANNER import code.name.monkey.retromusic.Constants.USER_PROFILE @@ -17,6 +19,7 @@ import code.name.monkey.retromusic.util.CustomArtistImageUtil.Companion.getFile import code.name.monkey.retromusic.util.CustomArtistImageUtil.Companion.getInstance import code.name.monkey.retromusic.util.MusicUtil.getMediaStoreAlbumCoverUri import code.name.monkey.retromusic.util.PreferenceUtil +import code.name.monkey.retromusic.util.PreferenceUtil.materialYou import com.bumptech.glide.GenericTransitionOptions import com.bumptech.glide.Priority import com.bumptech.glide.RequestBuilder @@ -185,7 +188,11 @@ object RetroGlideExtension { return TintHelper.createTintedDrawable( getContext(), R.drawable.ic_account, - accentColor(getContext()) + if (materialYou && VersionUtils.hasS()) { + ContextCompat.getColor(getContext(), R.color.m3_accent_color) + } else { + accentColor(getContext()) + } ) } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt index e7a10dda2..8a8e30414 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt @@ -613,4 +613,7 @@ object PreferenceUtil { val crossFadeDuration get() = sharedPreferences .getInt(CROSS_FADE_DURATION, 0) + + val materialYou + get() = sharedPreferences.getBoolean(MATERIAL_YOU, false) } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/ThemedFastScroller.kt b/app/src/main/java/code/name/monkey/retromusic/util/ThemedFastScroller.kt index f062c023d..4e5e7ab5d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/ThemedFastScroller.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/ThemedFastScroller.kt @@ -18,6 +18,7 @@ import code.name.monkey.appthemehelper.ThemeStore.Companion.accentColor import code.name.monkey.appthemehelper.util.ColorUtil.isColorLight import code.name.monkey.appthemehelper.util.MaterialValueHelper.getPrimaryTextColor import code.name.monkey.appthemehelper.util.TintHelper +import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.views.PopupBackground import me.zhanghai.android.fastscroll.FastScroller import me.zhanghai.android.fastscroll.FastScrollerBuilder @@ -27,13 +28,17 @@ import me.zhanghai.android.fastscroll.R object ThemedFastScroller { fun create(view: ViewGroup): FastScroller { val context = view.context - val color = accentColor(context) + val color = if (PreferenceUtil.materialYou && VersionUtils.hasS()) { + context.getColor(code.name.monkey.retromusic.R.color.m3_accent_color) + } else { + accentColor(context) + } val textColor = getPrimaryTextColor(context, isColorLight(color)) val fastScrollerBuilder = FastScrollerBuilder(view) fastScrollerBuilder.useMd2Style() fastScrollerBuilder.setPopupStyle { popupText -> PopupStyles.MD2.accept(popupText) - popupText.background = PopupBackground(context) + popupText.background = PopupBackground(context, color) popupText.setTextColor(textColor) } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/theme/ThemeManager.kt b/app/src/main/java/code/name/monkey/retromusic/util/theme/ThemeManager.kt index 106ecb994..b95e5ddfc 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/theme/ThemeManager.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/theme/ThemeManager.kt @@ -5,6 +5,7 @@ import androidx.annotation.StyleRes import androidx.appcompat.app.AppCompatDelegate import code.name.monkey.retromusic.R import code.name.monkey.retromusic.extensions.generalThemeValue +import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.theme.ThemeMode.* object ThemeManager { @@ -12,11 +13,16 @@ object ThemeManager { @StyleRes fun getThemeResValue( context: Context - ): Int = when (context.generalThemeValue) { - LIGHT -> R.style.Theme_RetroMusic_Light - DARK -> R.style.Theme_RetroMusic_Base - BLACK -> R.style.Theme_RetroMusic_Black - AUTO -> R.style.Theme_RetroMusic_FollowSystem + ): Int = + if (PreferenceUtil.materialYou) { + R.style.Theme_RetroMusic_MD3 + } else { + when (context.generalThemeValue) { + LIGHT -> R.style.Theme_RetroMusic_Light + DARK -> R.style.Theme_RetroMusic_Base + BLACK -> R.style.Theme_RetroMusic_Black + AUTO -> R.style.Theme_RetroMusic_FollowSystem + } } fun getNightMode( diff --git a/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt b/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt index 0f77ef1ea..99a91e592 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt +++ b/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt @@ -35,23 +35,26 @@ class BottomNavigationBarTinted @JvmOverloads constructor( init { labelVisibilityMode = PreferenceUtil.tabTitleMode - val iconColor = ATHUtil.resolveColor(context, android.R.attr.colorControlNormal) - val accentColor = ThemeStore.accentColor(context) - NavigationViewUtil.setItemIconColors( - this, - ColorUtil.withAlpha(iconColor, 0.5f), - accentColor - ) - NavigationViewUtil.setItemTextColors( - this, - ColorUtil.withAlpha(iconColor, 0.5f), - accentColor - ) - itemRippleColor = ColorStateList.valueOf(accentColor.addAlpha()) - background = ColorDrawable(ATHUtil.resolveColor(context, R.attr.colorSurface)) + if (!PreferenceUtil.materialYou) { + val iconColor = ATHUtil.resolveColor(context, android.R.attr.colorControlNormal) + val accentColor = ThemeStore.accentColor(context) + NavigationViewUtil.setItemIconColors( + this, + ColorUtil.withAlpha(iconColor, 0.5f), + accentColor + ) + NavigationViewUtil.setItemTextColors( + this, + ColorUtil.withAlpha(iconColor, 0.5f), + accentColor + ) + itemRippleColor = ColorStateList.valueOf(accentColor.addAlpha(0.08F)) + background = ColorDrawable(ATHUtil.resolveColor(context, R.attr.colorSurface)) + itemActiveIndicatorColor = ColorStateList.valueOf(accentColor.addAlpha(0.12F)) + } } } -fun Int.addAlpha(): Int { - return ColorUtil.withAlpha(this, 0.12f) +fun Int.addAlpha(alpha: Float): Int { + return ColorUtil.withAlpha(this, alpha) } diff --git a/app/src/main/java/code/name/monkey/retromusic/views/PopupBackground.java b/app/src/main/java/code/name/monkey/retromusic/views/PopupBackground.java index 1c4c814e2..f1df03d1a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/PopupBackground.java +++ b/app/src/main/java/code/name/monkey/retromusic/views/PopupBackground.java @@ -32,7 +32,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.graphics.drawable.DrawableCompat; -import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.retromusic.R; public class PopupBackground extends Drawable { @@ -47,10 +46,10 @@ public class PopupBackground extends Drawable { @NonNull private final Matrix mTempMatrix = new Matrix(); - public PopupBackground(@NonNull Context context) { + public PopupBackground(@NonNull Context context, int color) { mPaint = new Paint(); mPaint.setAntiAlias(true); - mPaint.setColor(ThemeStore.Companion.accentColor(context)); + mPaint.setColor(color); mPaint.setStyle(Paint.Style.FILL); Resources resources = context.getResources(); mPaddingStart = resources.getDimensionPixelOffset(R.dimen.afs_md2_popup_padding_start); diff --git a/app/src/main/res/drawable-v31/rect_selector.xml b/app/src/main/res/drawable-v31/rect_selector.xml new file mode 100644 index 000000000..760b218b9 --- /dev/null +++ b/app/src/main/res/drawable-v31/rect_selector.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_album_content.xml b/app/src/main/res/layout/fragment_album_content.xml index 6dc9c1b96..caff231ee 100644 --- a/app/src/main/res/layout/fragment_album_content.xml +++ b/app/src/main/res/layout/fragment_album_content.xml @@ -13,6 +13,7 @@ android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginEnd="4dp" + android:paddingVertical="10dp" android:text="@string/action_play_all" android:textAppearance="@style/TextViewButton" android:textColor="?android:attr/textColorPrimary" @@ -26,12 +27,12 @@ android:id="@+id/shuffleAction" style="@style/Widget.Material3.Button.Icon" android:layout_width="0dp" - android:layout_height="wrap_content" + android:layout_height="0dp" android:layout_marginStart="4dp" android:layout_marginEnd="16dp" + android:paddingVertical="10dp" android:text="@string/shuffle" android:textAppearance="@style/TextViewButton" - android:textColor="?android:attr/textColorPrimary" app:icon="@drawable/ic_shuffle" app:layout_constraintBottom_toBottomOf="@+id/playAction" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/fragment_artist_content.xml b/app/src/main/res/layout/fragment_artist_content.xml index e7b40a45d..bc557da8f 100644 --- a/app/src/main/res/layout/fragment_artist_content.xml +++ b/app/src/main/res/layout/fragment_artist_content.xml @@ -13,6 +13,7 @@ android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginEnd="4dp" + android:paddingVertical="10dp" android:text="@string/action_play_all" android:textAppearance="@style/TextViewButton" android:textColor="?android:attr/textColorPrimary" @@ -27,13 +28,12 @@ android:id="@+id/shuffleAction" style="@style/Widget.Material3.Button.Icon" android:layout_width="0dp" - android:layout_height="wrap_content" + android:layout_height="0dp" android:layout_marginStart="4dp" android:layout_marginEnd="16dp" + android:paddingVertical="10dp" android:text="@string/shuffle" android:textAppearance="@style/TextViewButton" - android:textColor="?android:attr/textColorPrimary" - app:backgroundTint="?attr/colorSurface" app:icon="@drawable/ic_shuffle" app:layout_constraintBottom_toBottomOf="@+id/playAction" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/item_list_quick_actions.xml b/app/src/main/res/layout/item_list_quick_actions.xml index f49bfd436..7f295fc3a 100644 --- a/app/src/main/res/layout/item_list_quick_actions.xml +++ b/app/src/main/res/layout/item_list_quick_actions.xml @@ -18,16 +18,16 @@ android:layout_height="wrap_content" android:gravity="center_vertical" android:orientation="horizontal" - android:paddingHorizontal="16dp" - android:paddingVertical="10dp"> + android:paddingHorizontal="16dp"> \ No newline at end of file diff --git a/app/src/main/res/layout/sliding_music_panel_layout.xml b/app/src/main/res/layout/sliding_music_panel_layout.xml index b384d988a..131d34b47 100644 --- a/app/src/main/res/layout/sliding_music_panel_layout.xml +++ b/app/src/main/res/layout/sliding_music_panel_layout.xml @@ -55,17 +55,12 @@ + tools:layout_height="wrap_content" /> \ No newline at end of file diff --git a/appthemehelper/src/main/res/values-night-v31/colors.xml b/app/src/main/res/values-night-v31/colors.xml similarity index 100% rename from appthemehelper/src/main/res/values-night-v31/colors.xml rename to app/src/main/res/values-night-v31/colors.xml diff --git a/app/src/main/res/values-v27/styles_parents.xml b/app/src/main/res/values-v27/styles_parents.xml index 3c238d1ee..07c1726d5 100644 --- a/app/src/main/res/values-v27/styles_parents.xml +++ b/app/src/main/res/values-v27/styles_parents.xml @@ -14,7 +14,7 @@ - - - \ No newline at end of file diff --git a/appthemehelper/src/main/res/values-v31/colors.xml b/app/src/main/res/values-v31/colors.xml similarity index 100% rename from appthemehelper/src/main/res/values-v31/colors.xml rename to app/src/main/res/values-v31/colors.xml diff --git a/app/src/main/res/values-v31/donottranslate.xml b/app/src/main/res/values-v31/donottranslate.xml new file mode 100644 index 000000000..879226a34 --- /dev/null +++ b/app/src/main/res/values-v31/donottranslate.xml @@ -0,0 +1,4 @@ + + + true + \ No newline at end of file diff --git a/app/src/main/res/values-v31/styles.xml b/app/src/main/res/values-v31/styles.xml new file mode 100644 index 000000000..381d1e7e4 --- /dev/null +++ b/app/src/main/res/values-v31/styles.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/app/src/main/res/values-v31/styles_parents.xml b/app/src/main/res/values-v31/styles_parents.xml deleted file mode 100644 index dfc349150..000000000 --- a/app/src/main/res/values-v31/styles_parents.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - + + - - - - - - - - - - - - - - From 4054d89f464fa2843124304fd18563bb9d2b2448 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sun, 26 Sep 2021 17:09:46 +0530 Subject: [PATCH 042/149] Visual changes to Search --- .../retromusic/fragments/LibraryViewModel.kt | 5 +- .../fragments/search/SearchFragment.kt | 81 +++++++++---------- .../retromusic/repository/Repository.kt | 7 +- .../retromusic/repository/SearchRepository.kt | 49 +++++------ app/src/main/res/layout/fragment_search.xml | 70 +++------------- app/src/main/res/values/styles.xml | 10 +++ 6 files changed, 93 insertions(+), 129 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt index 1db181b1a..8a5aea2c5 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt @@ -19,6 +19,7 @@ import androidx.lifecycle.* import code.name.monkey.retromusic.* import code.name.monkey.retromusic.db.* import code.name.monkey.retromusic.fragments.ReloadType.* +import code.name.monkey.retromusic.fragments.search.Filter import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.interfaces.IMusicServiceEventListener import code.name.monkey.retromusic.model.* @@ -139,9 +140,9 @@ class LibraryViewModel( } } - fun search(query: String?, filters: List) { + fun search(query: String?, filter: Filter) { viewModelScope.launch(IO) { - val result = repository.search(query, filters) + val result = repository.search(query, filter) searchResults.postValue(result) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/search/SearchFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/search/SearchFragment.kt index 0837bbaf7..fb5e4cb3f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/search/SearchFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/search/SearchFragment.kt @@ -25,7 +25,7 @@ import android.text.TextWatcher import android.view.View import android.view.ViewGroup import android.view.inputmethod.InputMethodManager -import android.widget.CompoundButton +import androidx.annotation.IdRes import androidx.core.view.* import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -36,14 +36,17 @@ import code.name.monkey.retromusic.adapter.SearchAdapter import code.name.monkey.retromusic.databinding.FragmentSearchBinding import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment +import code.name.monkey.retromusic.util.PreferenceUtil +import code.name.monkey.retromusic.views.addAlpha import com.google.android.material.chip.Chip +import com.google.android.material.chip.ChipGroup import com.google.android.material.textfield.TextInputEditText import com.google.android.material.transition.MaterialSharedAxis import java.util.* import kotlin.collections.ArrayList class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWatcher, - CompoundButton.OnCheckedChangeListener { + ChipGroup.OnCheckedChangeListener { companion object { const val QUERY = "query" const val REQ_CODE_SPEECH_INPUT = 9001 @@ -96,27 +99,22 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa private fun setupChips() { val chips = binding.searchFilterGroup.children.map { it as Chip } - val states = arrayOf( - intArrayOf(-android.R.attr.state_checked), - intArrayOf(android.R.attr.state_checked) - ) + if (!PreferenceUtil.materialYou) { + val states = arrayOf( + intArrayOf(-android.R.attr.state_checked), + intArrayOf(android.R.attr.state_checked) + ) - val colors = intArrayOf( - android.R.color.transparent, - ThemeStore.accentColor(requireContext()) - ) + val colors = intArrayOf( + android.R.color.transparent, + ThemeStore.accentColor(requireContext()).addAlpha(0.5F) + ) - chips.forEach { - it.chipBackgroundColor = ColorStateList(states, colors) - it.chipIconTint = ColorStateList.valueOf(ThemeStore.textColorPrimary(requireContext())) - it.chipStrokeColor = - ColorStateList.valueOf(ThemeStore.textColorSecondary(requireContext())) - .withAlpha(30) - it.closeIconTint = - ColorStateList.valueOf(ThemeStore.textColorPrimaryInverse(requireContext())) - it.chipStrokeWidth = 2F - it.setOnCheckedChangeListener(this) + chips.forEach { + it.chipBackgroundColor = ColorStateList(states, colors) + } } + binding.searchFilterGroup.setOnCheckedChangeListener(this) } private fun showData(data: List) { @@ -168,13 +166,18 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa TransitionManager.beginDelayedTransition(binding.appBarLayout) binding.voiceSearch.isGone = query.isNotEmpty() binding.clearText.isVisible = query.isNotEmpty() - val filters = getFilters() - libraryViewModel.search(query, filters) + val filter = getFilter() + libraryViewModel.search(query, filter) } - private fun getFilters(): List { - return binding.searchFilterGroup.children.toList().map { - (it as Chip).isChecked + private fun getFilter(): Filter { + return when (binding.searchFilterGroup.checkedChipId) { + R.id.chip_audio -> Filter.SONGS + R.id.chip_artists -> Filter.ARTISTS + R.id.chip_albums -> Filter.ALBUMS + R.id.chip_album_artists -> Filter.ALBUM_ARTISTS + R.id.chip_genres -> Filter.GENRES + else -> Filter.NO_FILTER } } @@ -221,28 +224,20 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa } } - override fun onCheckedChanged(buttonView: CompoundButton?, isChecked: Boolean) { - val checkedChip = (buttonView as Chip) - checkedChip.isCloseIconVisible = isChecked - if (isChecked) { - val color = ThemeStore.textColorPrimaryInverse(requireContext()) - checkedChip.apply { - setTextColor(color) - chipIconTint = ColorStateList.valueOf(color) - chipStrokeWidth = 0F - } - } else { - val color = ThemeStore.textColorPrimary(requireContext()) - checkedChip.apply { - setTextColor(color) - chipIconTint = ColorStateList.valueOf(color) - chipStrokeWidth = 2F - } - } + override fun onCheckedChanged(group: ChipGroup?, @IdRes checkedId: Int) { search(binding.searchView.text.toString()) } } +enum class Filter { + SONGS, + ARTISTS, + ALBUMS, + ALBUM_ARTISTS, + GENRES, + NO_FILTER +} + fun TextInputEditText.clearText() { text = null } diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt index 7eaab7ddb..d8652bc32 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt @@ -19,6 +19,7 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.Transformations import code.name.monkey.retromusic.* import code.name.monkey.retromusic.db.* +import code.name.monkey.retromusic.fragments.search.Filter import code.name.monkey.retromusic.model.* import code.name.monkey.retromusic.model.smartplaylist.NotPlayedPlaylist import code.name.monkey.retromusic.network.LastFMService @@ -51,7 +52,7 @@ interface Repository { suspend fun albumArtists(): List suspend fun fetchLegacyPlaylist(): List suspend fun fetchGenres(): List - suspend fun search(query: String?, filters: List): MutableList + suspend fun search(query: String?, filter: Filter): MutableList suspend fun getPlaylistSongs(playlist: Playlist): List suspend fun getGenre(genreId: Long): List suspend fun artistInfo(name: String, lang: String?, cache: String?): Result @@ -163,8 +164,8 @@ class RealRepository( override suspend fun allSongs(): List = songRepository.songs() - override suspend fun search(query: String?, filters: List): MutableList = - searchRepository.searchAll(context, query, filters) + override suspend fun search(query: String?, filter: Filter): MutableList = + searchRepository.searchAll(context, query, filter) override suspend fun getPlaylistSongs(playlist: Playlist): List = if (playlist is AbsCustomPlaylist) { diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/SearchRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/SearchRepository.kt index 68305890c..4a1280d6a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/SearchRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/SearchRepository.kt @@ -16,6 +16,7 @@ package code.name.monkey.retromusic.repository import android.content.Context import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.fragments.search.Filter import code.name.monkey.retromusic.model.Album import code.name.monkey.retromusic.model.Artist import code.name.monkey.retromusic.model.Genre @@ -28,11 +29,11 @@ class RealSearchRepository( private val roomRepository: RoomRepository, private val genreRepository: GenreRepository, ) { - fun searchAll(context: Context, query: String?, filters: List): MutableList { + fun searchAll(context: Context, query: String?, filter: Filter): MutableList { val results = mutableListOf() - query?.let { searchString -> - val isAll = !filters.contains(true) - val songs: List = if (filters[0] || isAll) { + if (query.isNullOrEmpty()) return results + query.let { searchString -> + val songs: List = if (filter == Filter.SONGS || filter == Filter.NO_FILTER) { songRepository.songs(searchString) } else { emptyList() @@ -42,16 +43,17 @@ class RealSearchRepository( results.add(context.resources.getString(R.string.songs)) results.addAll(songs) } - val artists: List = if (filters[1] || isAll) { - artistRepository.artists(searchString) - } else { - emptyList() - } + val artists: List = + if (filter == Filter.ARTISTS || filter == Filter.NO_FILTER) { + artistRepository.artists(searchString) + } else { + emptyList() + } if (artists.isNotEmpty()) { results.add(context.resources.getString(R.string.artists)) results.addAll(artists) } - val albums: List = if (filters[2] || isAll) { + val albums: List = if (filter == Filter.ALBUMS || filter == Filter.NO_FILTER) { albumRepository.albums(searchString) } else { emptyList() @@ -60,16 +62,17 @@ class RealSearchRepository( results.add(context.resources.getString(R.string.albums)) results.addAll(albums) } - val albumArtists: List = if (filters[3] || isAll) { - artistRepository.albumArtists(searchString) - } else { - emptyList() - } + val albumArtists: List = + if (filter == Filter.ALBUM_ARTISTS || filter == Filter.NO_FILTER) { + artistRepository.albumArtists(searchString) + } else { + emptyList() + } if (albumArtists.isNotEmpty()) { results.add(context.resources.getString(R.string.album_artist)) results.addAll(albumArtists) } - val genres: List = if (filters[4] || isAll) { + val genres: List = if (filter == Filter.GENRES || filter == Filter.NO_FILTER) { genreRepository.genres().filter { genre -> genre.name.lowercase() .contains(searchString.lowercase()) @@ -82,13 +85,13 @@ class RealSearchRepository( results.addAll(genres) } /* val playlist = roomRepository.playlists().filter { playlist -> - playlist.playlistName.toLowerCase(Locale.getDefault()) - .contains(searchString.toLowerCase(Locale.getDefault())) - } - if (playlist.isNotEmpty()) { - results.add(context.getString(R.string.playlists)) - results.addAll(playlist) - }*/ + playlist.playlistName.toLowerCase(Locale.getDefault()) + .contains(searchString.toLowerCase(Locale.getDefault())) + } + if (playlist.isNotEmpty()) { + results.add(context.getString(R.string.playlists)) + results.addAll(playlist) + }*/ } return results } diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml index 3c6285f93..779e67319 100644 --- a/app/src/main/res/layout/fragment_search.xml +++ b/app/src/main/res/layout/fragment_search.xml @@ -88,89 +88,43 @@ android:id="@+id/searchFilterGroup" android:layout_width="wrap_content" android:layout_height="wrap_content" - app:singleLine="true"> + app:singleLine="true" + app:singleSelection="true"> - + android:text="@string/songs" /> + android:text="@string/artists" /> + android:text="@string/albums" /> - + android:text="@string/album_artist" /> + android:text="@string/genres" /> diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 8f14fc673..37de6fd11 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -212,6 +212,16 @@ rounded 5% + + - diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 37de6fd11..58bac87fb 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -26,11 +26,9 @@ - From 72a11495fa3bea5db010e669d5879573d8c627cb Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Tue, 5 Oct 2021 14:03:11 +0530 Subject: [PATCH 059/149] Fixed UserInfoFragment.kt save fab bottom margin --- .../retromusic/fragments/other/UserInfoFragment.kt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/other/UserInfoFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/other/UserInfoFragment.kt index 30a96ebc4..c2d86716b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/other/UserInfoFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/other/UserInfoFragment.kt @@ -28,6 +28,7 @@ import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.core.view.doOnPreDraw +import androidx.core.view.updateLayoutParams import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController import code.name.monkey.appthemehelper.util.ColorUtil @@ -39,6 +40,7 @@ import code.name.monkey.retromusic.databinding.FragmentUserInfoBinding import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.extensions.applyToolbar import code.name.monkey.retromusic.extensions.resolveColor +import code.name.monkey.retromusic.fragments.LibraryViewModel import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.util.ImageUtil @@ -56,6 +58,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import org.koin.androidx.viewmodel.ext.android.sharedViewModel import java.io.BufferedOutputStream import java.io.File import java.io.FileOutputStream @@ -65,6 +68,7 @@ class UserInfoFragment : Fragment() { private var _binding: FragmentUserInfoBinding? = null private val binding get() = _binding!! + private val libraryViewModel: LibraryViewModel by sharedViewModel() override fun onCreateView( inflater: LayoutInflater, @@ -123,6 +127,11 @@ class UserInfoFragment : Fragment() { view.doOnPreDraw { startPostponedEnterTransition() } + libraryViewModel.getFabMargin().observe(viewLifecycleOwner, { + binding.next.updateLayoutParams { + bottomMargin = it + } + }) } private fun loadProfile() { From ba69813ff395850833e1880e15116ab7a25271ab Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Tue, 5 Oct 2021 16:23:09 +0530 Subject: [PATCH 060/149] Fixed Material you for all activities --- .../monkey/retromusic/activities/base/AbsThemeActivity.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt index 67eca8cfe..033292d15 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt @@ -37,6 +37,7 @@ import code.name.monkey.retromusic.extensions.surfaceColor import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.theme.ThemeManager +import com.google.android.material.color.DynamicColors import java.util.* abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable { @@ -52,12 +53,16 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable { toggleScreenOn() setDrawUnderNavigationBar() setLightNavigationAuto() - //MaterialDialogsUtil.updateMaterialDialogsThemeSingleton(this) } private fun updateTheme() { setTheme(ThemeManager.getThemeResValue(this)) setDefaultNightMode(ThemeManager.getNightMode(this)) + + // Apply dynamic colors to activity if enabled + if (PreferenceUtil.materialYou) { + DynamicColors.applyIfAvailable(this) + } } private fun toggleScreenOn() { From a9fde92dd918c3981c910b09d3f9d7256afbfbf1 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Tue, 5 Oct 2021 16:28:08 +0530 Subject: [PATCH 061/149] Removed quick actions from SongsFragment Removing Play all & Shuffle quick actions from Songs tab as Shuffle fab is already there to complete the same task --- .../name/monkey/retromusic/fragments/songs/SongsFragment.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt index 2ee0f074e..a8c40be6e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt @@ -20,7 +20,6 @@ import androidx.activity.addCallback import androidx.annotation.LayoutRes import androidx.recyclerview.widget.GridLayoutManager import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.adapter.song.ShuffleButtonSongAdapter import code.name.monkey.retromusic.adapter.song.SongAdapter import code.name.monkey.retromusic.extensions.surfaceColor import code.name.monkey.retromusic.fragments.ReloadType @@ -82,7 +81,7 @@ class SongsFragment : AbsRecyclerViewCustomGridSizeFragment Date: Wed, 6 Oct 2021 11:54:41 +0530 Subject: [PATCH 062/149] Removed some unnecessary proguard rules --- app/proguard-rules.pro | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index f5edd6ed0..20ae13488 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -16,16 +16,13 @@ # public *; #} -# Uncomment this to preserve the line number information for +# Preserve the line number information for # debugging stack traces. -#-keepattributes SourceFile,LineNumberTable +-keepattributes SourceFile,LineNumberTable # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile --keepnames class ** --keepnames class ** { *; } --keepattributes SourceFile,LineNumberTable -dontwarn java.lang.invoke.* -dontwarn **$$Lambda$* @@ -58,11 +55,9 @@ -keepclassmembers enum * { *; } -keepattributes *Annotation*, Signature, Exception -keepnames class androidx.navigation.fragment.NavHostFragment --keepnames class code.name.monkey.retromusic.model.Home -keep class * extends androidx.fragment.app.Fragment{} -keepnames class * extends android.os.Parcelable -keepnames class * extends java.io.Serializable -keep class code.name.monkey.retromusic.network.model.** { *; } -keep class code.name.monkey.retromusic.model.CategoryInfo { *; } --keep class com.google.android.material.bottomsheet.** { *; } --keep class code.name.monkey.retromusic.Constants { *; } \ No newline at end of file +-keep class com.google.android.material.bottomsheet.** { *; } \ No newline at end of file From 5266b86c757ba52635ab0e4cdfe7ad62d6876e16 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 6 Oct 2021 12:59:20 +0530 Subject: [PATCH 063/149] Updated version name and change-log --- app/src/main/assets/retro-changelog.html | 143 +++++++++++++----- .../retromusic/activities/WhatsNewActivity.kt | 15 +- 2 files changed, 108 insertions(+), 50 deletions(-) diff --git a/app/src/main/assets/retro-changelog.html b/app/src/main/assets/retro-changelog.html index 6525c677d..d04e99de1 100644 --- a/app/src/main/assets/retro-changelog.html +++ b/app/src/main/assets/retro-changelog.html @@ -6,7 +6,7 @@ word-wrap: break-word; } - div{ + div { margin: 20px 10px; padding: 10px; border-radius: 10px; @@ -16,6 +16,8 @@ h2 { margin-block-end: 0rem; margin-block-start: 0rem; + display: inline-block; + vertical-align: center; } li { @@ -35,7 +37,6 @@ span { font-size: 0.7rem; - line-height: 0.7rem; } h5 { @@ -47,58 +48,122 @@ margin: 10px 0px; font-size: 1rem; } + + .tag { + border-radius: 5px; + margin-left: 10px; + padding: 5px; + display: inline-block; + vertical-align: top; + } + {style-placeholder} - - - - - - - - -

- Clear the app if it crashes after updating -

- +
Date
+

v5.1.0Beta

+

What's New

+
    +
  • Material You
  • +
+

Improved

+
    +
  • Improved Crossfade
  • +
+
+
September 06, 2021

v5.0.0

What's New

    -
  • Added Chromecast support
  • -
  • Added animated icons
  • -
  • Added cross-fade (experimental)
  • -
  • Added ability to remember the last tab
  • -
  • Added whitelisting songs
  • -
  • Added support for embedded synced lyrics
  • -
  • Added lyrics editor for normal and synced lyrics
  • -
  • Added playlist ordering
  • -
  • Added search filters
  • -
  • Added audio fade
  • -
  • Added Multi-select in album and artist details
  • -
  • Added SD card from folders tab
  • -
  • Added Synced lyrics in all themes
  • -
  • Added Swipe anywhere to change the song
  • -
  • Added album artist
  • -
  • Albums now show album artists instead of artists of the first song
  • +
  • Added ability to Remember last tab
  • +
  • Added Whitelisting songs
  • +
  • You can now browse SDCard from Folders Tab
  • +
+
+
+
August 22, 2021
+

v4.4.0Beta

+

What's New

+
    +
  • Added Crossfade
  • +
  • Multi-select in Album and Artist Details
  • +
  • Albums now show Album Artists instead of artist of first song

Fixed

    -
  • Fixed playlist preview images
  • -
  • Fixed language switching
  • +
  • Fixed Playlist Preview Images
  • +
+
+
+
August 11, 2021
+

v4.2.30Beta

+

What's New

+
    +
  • Revamped Playlist Tab
  • +
  • Revamped Genres Tab
  • +
  • Added support for embedded Synced Lyrics
  • +
  • Added animated icons
  • +
+

Fixed

+
    +
  • Fixed Language Switching
  • +
  • Fixed some reported bugs
  • +
+
+
+
July 18, 2021
+

v4.2.020Beta

+

What's New

+
    +
  • Added ChromeCast Support
  • +
  • Added Lyrics Editor for Normal and Synced Lyrics
  • +
  • Added Ripple Animation for Color Theme
  • +
  • Added Drag to seek in Tiny Theme
  • +
  • Added Playlist Order
  • +
  • Added Search Filters
  • +
  • Added Audio Fade
  • +
  • Synced Lyrics in all Themes
  • +
  • Swipe anywhere to change song

Improved

    -
  • Improved playlists tab
  • -
  • Improved genres tab
  • +
  • Fixed Navigate by Album Artist
  • +
  • Changed New Music Mix Actions
  • +
  • Improved Animations
  • +
  • And some minor bug fixes and improvements
- - +
+
October 12, 2020
+

v4.0.10

+

What's New

+
    +
  • Re-built from scratch using MVVM Architecture and JetPack Components
  • +
  • New Material Design icon
  • +
  • Implemented a custom database for playlists
  • +
  • Added new Material Design motions
  • +
  • Bug fixes & performance improvements
  • +
  • Revamped Home tab UI
  • +
  • Android 11 support
  • +
  • And more!
  • +
+
+
+
April 30, 2020
+

v3.5.110Beta

+

What's New

+
    +
  • Changed profile form image to icon
  • +
  • New what's new screen
  • +
  • Added In-App language changer, where you can select language
  • +
+

Improved

+
    +
  • Improved loading of Songs, Albums, Artists, Genres, Playlists
  • +
+
+ \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.kt index e4e598889..a8b059994 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.kt @@ -14,7 +14,7 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper.getPrimaryTextCo import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.Constants import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.activities.base.AbsBaseActivity +import code.name.monkey.retromusic.activities.base.AbsThemeActivity import code.name.monkey.retromusic.databinding.ActivityWhatsNewBinding import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.util.PreferenceUtil.lastVersion @@ -24,7 +24,7 @@ import java.io.InputStreamReader import java.nio.charset.StandardCharsets import java.util.* -class WhatsNewActivity : AbsBaseActivity() { +class WhatsNewActivity : AbsThemeActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val binding = ActivityWhatsNewBinding.inflate(layoutInflater) @@ -65,15 +65,8 @@ class WhatsNewActivity : AbsBaseActivity() { ) val changeLog = buf.toString() .replace( - "{style-placeholder}", String.format( - "body { background-color: %s; color: %s; } li {color: %s;} h3 {color: %s;} .tag {color: %s;} div{background-color: %s;}", - backgroundColor, - contentColor, - textColor, - accentColorString, - accentColorString, - cardBackgroundColor - ) + "{style-placeholder}", + "body { background-color: $backgroundColor; color: $contentColor; } li {color: $textColor;} h3 {color: $accentColorString;} .tag {background-color: $accentColorString; color: $accentTextColor; } div{background-color: $cardBackgroundColor;}" ) .replace("{link-color}", colorToCSS(accentColor(this))) .replace( From 7d49986f4bccf50d1b7047548be8fc3fb1470efb Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 6 Oct 2021 13:01:47 +0530 Subject: [PATCH 064/149] Extending AbsThemeActivity for some activities --- .../code/name/monkey/retromusic/activities/LicenseActivity.kt | 4 ++-- .../name/monkey/retromusic/activities/SettingsActivity.kt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.kt index daa025371..11cd201ca 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.kt @@ -24,13 +24,13 @@ import code.name.monkey.appthemehelper.util.ATHUtil.resolveColor import code.name.monkey.appthemehelper.util.ColorUtil.lightenColor import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.activities.base.AbsBaseActivity +import code.name.monkey.retromusic.activities.base.AbsThemeActivity import java.io.BufferedReader import java.io.InputStreamReader import java.nio.charset.StandardCharsets /** Created by hemanths on 2019-09-27. */ -class LicenseActivity : AbsBaseActivity() { +class LicenseActivity : AbsThemeActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_license) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt index 61d826692..709933ede 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt @@ -22,7 +22,7 @@ import androidx.navigation.NavDestination import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.activities.base.AbsBaseActivity +import code.name.monkey.retromusic.activities.base.AbsThemeActivity import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager import code.name.monkey.retromusic.databinding.ActivitySettingsBinding import code.name.monkey.retromusic.extensions.applyToolbar @@ -32,7 +32,7 @@ import code.name.monkey.retromusic.extensions.surfaceColor import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.color.ColorCallback -class SettingsActivity : AbsBaseActivity(), ColorCallback, OnThemeChangedListener { +class SettingsActivity : AbsThemeActivity(), ColorCallback, OnThemeChangedListener { private lateinit var binding: ActivitySettingsBinding override fun onCreate(savedInstanceState: Bundle?) { setDrawUnderStatusBar() From 6074cdfda28ecbf2413094a3ed2bbb7ebb657d9b Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 6 Oct 2021 13:09:19 +0530 Subject: [PATCH 065/149] Optimized imports --- .../java/code/name/monkey/retromusic/extensions/FragmentExt.kt | 1 - .../retromusic/fragments/player/adaptive/AdaptiveFragment.kt | 1 - .../retromusic/fragments/player/blur/BlurPlayerFragment.kt | 1 - .../retromusic/fragments/player/cardblur/CardBlurFragment.kt | 1 - .../monkey/retromusic/fragments/player/color/ColorFragment.kt | 1 - .../name/monkey/retromusic/fragments/player/fit/FitFragment.kt | 1 - .../retromusic/fragments/player/flat/FlatPlayerFragment.kt | 1 - .../retromusic/fragments/player/material/MaterialFragment.kt | 1 - .../retromusic/fragments/player/normal/PlayerFragment.kt | 1 - .../retromusic/fragments/player/plain/PlainPlayerFragment.kt | 1 - .../retromusic/fragments/player/simple/SimplePlayerFragment.kt | 1 - .../main/java/code/name/monkey/retromusic/util/RetroUtil.java | 3 --- 12 files changed, 14 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/FragmentExt.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/FragmentExt.kt index 3bac3826c..24fc4dd3d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/FragmentExt.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/FragmentExt.kt @@ -14,7 +14,6 @@ */ package code.name.monkey.retromusic.extensions -import android.app.Activity import android.content.Context import android.content.res.Configuration import android.graphics.drawable.Drawable diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt index c556f1ed6..61a1b5a4b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt @@ -29,7 +29,6 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song -import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor class AdaptiveFragment : AbsPlayerFragment(R.layout.fragment_adaptive_player) { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt index 87e733e1b..95ce6c50b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt @@ -34,7 +34,6 @@ import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.PreferenceUtil.blurAmount -import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor class BlurPlayerFragment : AbsPlayerFragment(R.layout.fragment_blur), diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt index 2315fd485..52763f67c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt @@ -35,7 +35,6 @@ import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.PreferenceUtil.blurAmount -import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor class CardBlurFragment : AbsPlayerFragment(R.layout.fragment_card_blur_player), diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt index ef4573395..1ac473f2d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt @@ -29,7 +29,6 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song -import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor class ColorFragment : AbsPlayerFragment(R.layout.fragment_color_player) { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt index 2b3ca3b2e..ad33baaac 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt @@ -26,7 +26,6 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song -import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor class FitFragment : AbsPlayerFragment(R.layout.fragment_fit) { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt index 02ac580a8..660748409 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt @@ -32,7 +32,6 @@ import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import code.name.monkey.retromusic.views.DrawableGradient diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialFragment.kt index d170c4bdb..fad08eefd 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialFragment.kt @@ -27,7 +27,6 @@ import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song -import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor /** diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt index fef43e76b..54ee37cca 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt @@ -30,7 +30,6 @@ import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import code.name.monkey.retromusic.views.DrawableGradient diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlayerFragment.kt index 84fea2669..796592c42 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlayerFragment.kt @@ -28,7 +28,6 @@ import code.name.monkey.retromusic.fragments.base.goToArtist import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song -import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor class PlainPlayerFragment : AbsPlayerFragment(R.layout.fragment_plain_player) { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlayerFragment.kt index 164447349..10ac31aba 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlayerFragment.kt @@ -26,7 +26,6 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song -import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor /** diff --git a/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java index bda9b0b91..81c03ae7e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java @@ -32,7 +32,6 @@ import android.os.Build; import android.util.DisplayMetrics; import android.view.Display; import android.view.View; -import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; @@ -41,8 +40,6 @@ import androidx.annotation.ColorInt; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.core.view.ViewCompat; -import androidx.core.view.WindowInsetsCompat; import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat; import java.net.InetAddress; From 480d66cc24e71a9948ef686c5fbf7a904a20882c Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 6 Oct 2021 16:56:53 +0530 Subject: [PATCH 066/149] Enabled MD3 on A12 by default --- app/src/main/res/values-v31/donottranslate.xml | 1 + app/src/main/res/values/donottranslate.xml | 1 + app/src/main/res/xml/pref_general.xml | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-v31/donottranslate.xml b/app/src/main/res/values-v31/donottranslate.xml index 879226a34..e9ef74c3c 100644 --- a/app/src/main/res/values-v31/donottranslate.xml +++ b/app/src/main/res/values-v31/donottranslate.xml @@ -1,4 +1,5 @@ true + true \ No newline at end of file diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index c740c5a02..3e5913bc2 100755 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -25,4 +25,5 @@ Material You false + false \ No newline at end of file diff --git a/app/src/main/res/xml/pref_general.xml b/app/src/main/res/xml/pref_general.xml index 23eb30712..4b67a2825 100755 --- a/app/src/main/res/xml/pref_general.xml +++ b/app/src/main/res/xml/pref_general.xml @@ -23,7 +23,7 @@ android:title="@string/black_theme_name" /> Date: Wed, 6 Oct 2021 16:58:48 +0530 Subject: [PATCH 067/149] Fixed Preference title tint for MD3 --- app/src/main/res/layout/list_item_view_switch.xml | 2 +- .../res/layout/list_item_view_switch_no_title.xml | 2 +- .../code/name/monkey/appthemehelper/ThemeStore.kt | 4 ++++ .../monkey/appthemehelper/ThemeStorePrefKeys.kt | 2 ++ .../common/views/ATEAccentTextView.kt | 13 +++++++++++-- .../appthemehelper/common}/views/ATESwitch.kt | 11 ++++++----- .../res/layout/ate_preference_switch_support.xml | 2 +- .../src/main/res/values-night-v31/colors.xml | 0 .../src/main/res/values-v31/colors.xml | 2 +- 9 files changed, 27 insertions(+), 11 deletions(-) rename {app/src/main/java/code/name/monkey/retromusic => appthemehelper/src/main/java/code/name/monkey/appthemehelper/common}/views/ATESwitch.kt (72%) rename {app => appthemehelper}/src/main/res/values-night-v31/colors.xml (100%) rename {app => appthemehelper}/src/main/res/values-v31/colors.xml (90%) mode change 100644 => 100755 diff --git a/app/src/main/res/layout/list_item_view_switch.xml b/app/src/main/res/layout/list_item_view_switch.xml index 70a8f4016..a536b1fa6 100644 --- a/app/src/main/res/layout/list_item_view_switch.xml +++ b/app/src/main/res/layout/list_item_view_switch.xml @@ -72,7 +72,7 @@ android:orientation="vertical" app:layout_constraintGuide_begin="@dimen/list_pref_guideline_begin" /> - - - @android:color/system_accent1_600 - \ No newline at end of file + From 897b160834b6883c0fe13285af70c15f885d798f Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 9 Oct 2021 12:13:19 +0530 Subject: [PATCH 068/149] Added ability to backup settings, databases & images --- app/src/main/AndroidManifest.xml | 30 +++- .../activities/backup/BackupActivity.kt | 85 +++++++++++ .../activities/backup/BackupViewModel.kt | 23 +++ .../activities/backup/RestoreActivity.kt | 12 ++ .../adapter/backup/BackupAdapter.kt | 40 +++++ .../monkey/retromusic/helper/BackupHelper.kt | 71 +++++++++ app/src/main/res/drawable/ic_backup.xml | 10 ++ app/src/main/res/drawable/ic_restore.xml | 10 ++ app/src/main/res/layout/activity_backup.xml | 139 ++++++++++++++++++ app/src/main/res/layout/activity_restore.xml | 8 + app/src/main/res/layout/item_list_card.xml | 74 ++++++++++ 11 files changed, 495 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/code/name/monkey/retromusic/activities/backup/BackupActivity.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/activities/backup/BackupViewModel.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/activities/backup/RestoreActivity.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/adapter/backup/BackupAdapter.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt create mode 100644 app/src/main/res/drawable/ic_backup.xml create mode 100644 app/src/main/res/drawable/ic_restore.xml create mode 100644 app/src/main/res/layout/activity_backup.xml create mode 100644 app/src/main/res/layout/activity_restore.xml create mode 100644 app/src/main/res/layout/item_list_card.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a5235207f..b264b02cf 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -8,7 +8,7 @@ - + @@ -119,6 +119,22 @@ + + + + + + + + + + + + + android:screenOrientation="portrait" + android:theme="@style/Theme.AppCompat.NoActionBar"> - + + android:value=".activities.MainActivity" /> + android:resource="@xml/automotive_app_desc" /> + android:resource="@drawable/ic_notification" /> () + private var backupAdapter: BackupAdapter? = null + + lateinit var binding: ActivityBackupBinding + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivityBackupBinding.inflate(layoutInflater) + setContentView(binding.root) + binding.appBarLayout.statusBarForeground = + MaterialShapeDrawable.createWithElevationOverlay(this) + binding.toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black) + initAdapter() + setupRecyclerview() + backupViewModel.backupsLiveData.observe(this) { + if (it.isNotEmpty()) + backupAdapter?.swapDataset(it) + else + backupAdapter?.swapDataset(listOf()) + } + backupViewModel.loadBackups() + setupButtons() + } + + private fun setupButtons() { + binding.createBackup.setOnClickListener { + lifecycleScope.launch { + BackupHelper.createBackup(this@BackupActivity) + backupViewModel.loadBackups() + withContext(Dispatchers.Main) { + Toast.makeText( + this@BackupActivity, + "Backup Completed Successfully", + Toast.LENGTH_SHORT + ).show() + } + } + } + } + + private fun initAdapter() { + backupAdapter = BackupAdapter(this@BackupActivity, ArrayList()) + backupAdapter?.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { + override fun onChanged() { + super.onChanged() + checkIsEmpty() + } + }) + } + + private fun checkIsEmpty() { + binding.emptyText.setText(R.string.no_backups_found) + (backupAdapter!!.itemCount == 0).run { + binding.empty.isVisible = this + binding.backupTitle.isVisible = this + } + } + + fun setupRecyclerview() { + binding.backupRecyclerview.apply { + layoutManager = LinearLayoutManager(context) + adapter = backupAdapter + } + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/backup/BackupViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/activities/backup/BackupViewModel.kt new file mode 100644 index 000000000..05a51b25a --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/activities/backup/BackupViewModel.kt @@ -0,0 +1,23 @@ +package code.name.monkey.retromusic.activities.backup + +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import code.name.monkey.retromusic.helper.BackupHelper +import kotlinx.coroutines.launch +import java.io.File + +class BackupViewModel : ViewModel() { + private val backupsMutableLiveData = MutableLiveData>() + val backupsLiveData = backupsMutableLiveData + + fun loadBackups() { + viewModelScope.launch { + File(BackupHelper.backupRootPath).listFiles { _, name -> + return@listFiles name.endsWith(BackupHelper.backupExt) + }?.toList()?.let { + backupsMutableLiveData.value = it + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/backup/RestoreActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/backup/RestoreActivity.kt new file mode 100644 index 000000000..6caabf7ff --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/activities/backup/RestoreActivity.kt @@ -0,0 +1,12 @@ +package code.name.monkey.retromusic.activities.backup + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import code.name.monkey.retromusic.R + +class RestoreActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_restore) + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/backup/BackupAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/backup/BackupAdapter.kt new file mode 100644 index 000000000..276e95a92 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/backup/BackupAdapter.kt @@ -0,0 +1,40 @@ +package code.name.monkey.retromusic.adapter.backup + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import code.name.monkey.retromusic.R +import java.io.File + +class BackupAdapter( + val context: Context, + var dataSet: MutableList, +) : RecyclerView.Adapter() { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + return ViewHolder( + LayoutInflater.from(context).inflate(R.layout.item_list_card, parent, false) + ) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + holder.title.text = dataSet[position].nameWithoutExtension + } + + override fun getItemCount(): Int = dataSet.size + + fun swapDataset(dataSet: List) { + this.dataSet = ArrayList(dataSet) + notifyDataSetChanged() + } + + inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val title: TextView = itemView.findViewById(R.id.title) + + init { + } + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt b/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt new file mode 100644 index 000000000..80589b57e --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt @@ -0,0 +1,71 @@ +package code.name.monkey.retromusic.helper + +import android.content.Context +import android.os.Environment +import code.name.monkey.retromusic.BuildConfig +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import java.io.* +import java.util.zip.ZipEntry +import java.util.zip.ZipOutputStream + +object BackupHelper { + suspend fun createBackup(context: Context) { + withContext(Dispatchers.IO) { + val finalPath = backupRootPath + System.currentTimeMillis().toString() + backupExt + val zipItems = mutableListOf() + zipItems.addAll(getDatabaseZipItems(context)) + zipItems.addAll(getSettingsZipItems(context)) + getUserImageZipItems(context)?.let { zipItems.addAll(it) } + zipAll(zipItems, finalPath) + } + } + + private fun zipAll(zipItems: List, finalPath: String) { + ZipOutputStream(BufferedOutputStream(FileOutputStream(finalPath))).use { out -> + for (zipItem in zipItems) { + FileInputStream(zipItem.filePath).use { fi -> + BufferedInputStream(fi).use { origin -> + val entry = ZipEntry(zipItem.zipPath) + out.putNextEntry(entry) + origin.copyTo(out, 1024) + } + } + } + } + } + + private fun getDatabaseZipItems(context: Context): List { + return context.databaseList().filter { + it.endsWith(".db") + }.map { + ZipItem(context.getDatabasePath(it).absolutePath, "databases${File.separator}$it") + } + } + + private fun getSettingsZipItems(context: Context): List { + val sharedPrefPath = context.filesDir.parentFile?.absolutePath + "/shared_prefs/" + return listOf( + "${BuildConfig.APPLICATION_ID}_preferences.xml", // App settings pref path + "$THEME_PREFS_KEY_DEFAULT.xml" // appthemehelper pref path + ).map { + ZipItem(sharedPrefPath + it, "preferences${File.separator}$it") + } + } + + private fun getUserImageZipItems(context: Context): List? { + return context.filesDir.listFiles { _, name -> + name.endsWith(".jpg") + }?.map { + ZipItem(it.absolutePath, "userImages${File.separator}${it.name}") + } + } + + val backupRootPath = + Environment.getExternalStorageDirectory().toString() + "/RetroMusic/Backups/" + const val backupExt = ".rmbak" + private const val THEME_PREFS_KEY_DEFAULT = "[[kabouzeid_app-theme-helper]]" + +} + +data class ZipItem(val filePath: String, val zipPath: String) \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_backup.xml b/app/src/main/res/drawable/ic_backup.xml new file mode 100644 index 000000000..9faa168d2 --- /dev/null +++ b/app/src/main/res/drawable/ic_backup.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_restore.xml b/app/src/main/res/drawable/ic_restore.xml new file mode 100644 index 000000000..d4fa3ee61 --- /dev/null +++ b/app/src/main/res/drawable/ic_restore.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/activity_backup.xml b/app/src/main/res/layout/activity_backup.xml new file mode 100644 index 000000000..1bd0ae067 --- /dev/null +++ b/app/src/main/res/layout/activity_backup.xml @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_restore.xml b/app/src/main/res/layout/activity_restore.xml new file mode 100644 index 000000000..273ec1089 --- /dev/null +++ b/app/src/main/res/layout/activity_restore.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_list_card.xml b/app/src/main/res/layout/item_list_card.xml new file mode 100644 index 000000000..25a71a9bc --- /dev/null +++ b/app/src/main/res/layout/item_list_card.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + \ No newline at end of file From d703a0518268f4014bd9d24930c2a15c6419e60e Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 9 Oct 2021 13:29:14 +0530 Subject: [PATCH 069/149] Added ability to restore --- .../activities/backup/BackupActivity.kt | 11 ++- .../activities/backup/BackupViewModel.kt | 20 ++++- .../adapter/backup/BackupAdapter.kt | 8 ++ .../monkey/retromusic/helper/BackupHelper.kt | 89 +++++++++++++++++-- 4 files changed, 120 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/backup/BackupActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/backup/BackupActivity.kt index e780974a8..39f13f784 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/backup/BackupActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/backup/BackupActivity.kt @@ -16,8 +16,9 @@ import com.google.android.material.shape.MaterialShapeDrawable import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import java.io.File -class BackupActivity : AbsThemeActivity() { +class BackupActivity : AbsThemeActivity(), BackupAdapter.BackupClickedListener { private val backupViewModel by viewModels() private var backupAdapter: BackupAdapter? = null @@ -59,7 +60,7 @@ class BackupActivity : AbsThemeActivity() { } private fun initAdapter() { - backupAdapter = BackupAdapter(this@BackupActivity, ArrayList()) + backupAdapter = BackupAdapter(this@BackupActivity, ArrayList(), this) backupAdapter?.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { override fun onChanged() { super.onChanged() @@ -82,4 +83,10 @@ class BackupActivity : AbsThemeActivity() { adapter = backupAdapter } } + + override fun onBackupClicked(file: File) { + lifecycleScope.launch { + backupViewModel.restoreBackup(this@BackupActivity, file) + } + } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/backup/BackupViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/activities/backup/BackupViewModel.kt index 05a51b25a..00cdffef9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/backup/BackupViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/backup/BackupViewModel.kt @@ -1,11 +1,17 @@ package code.name.monkey.retromusic.activities.backup +import android.app.Activity +import android.content.Intent import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import code.name.monkey.retromusic.helper.BackupHelper +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import java.io.File +import kotlin.system.exitProcess + class BackupViewModel : ViewModel() { private val backupsMutableLiveData = MutableLiveData>() @@ -14,10 +20,22 @@ class BackupViewModel : ViewModel() { fun loadBackups() { viewModelScope.launch { File(BackupHelper.backupRootPath).listFiles { _, name -> - return@listFiles name.endsWith(BackupHelper.backupExt) + return@listFiles name.endsWith(BackupHelper.BACKUP_EXTENSION) }?.toList()?.let { backupsMutableLiveData.value = it } } } + + suspend fun restoreBackup(activity: Activity, file: File) { + BackupHelper.restoreBackup(activity, file) + withContext(Dispatchers.Main) { + val intent = Intent( + activity, + activity::class.java + ) + activity.startActivity(intent) + exitProcess(0) + } + } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/backup/BackupAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/backup/BackupAdapter.kt index 276e95a92..c8f80411e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/backup/BackupAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/backup/BackupAdapter.kt @@ -12,6 +12,7 @@ import java.io.File class BackupAdapter( val context: Context, var dataSet: MutableList, + val backupClickedListener: BackupClickedListener ) : RecyclerView.Adapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { @@ -35,6 +36,13 @@ class BackupAdapter( val title: TextView = itemView.findViewById(R.id.title) init { + itemView.setOnClickListener { + backupClickedListener.onBackupClicked(dataSet[bindingAdapterPosition]) + } } } + + interface BackupClickedListener { + fun onBackupClicked(file: File) + } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt b/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt index 80589b57e..b2712afc7 100644 --- a/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt +++ b/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt @@ -2,17 +2,20 @@ package code.name.monkey.retromusic.helper import android.content.Context import android.os.Environment +import android.widget.Toast import code.name.monkey.retromusic.BuildConfig import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import java.io.* import java.util.zip.ZipEntry +import java.util.zip.ZipInputStream import java.util.zip.ZipOutputStream object BackupHelper { suspend fun createBackup(context: Context) { withContext(Dispatchers.IO) { - val finalPath = backupRootPath + System.currentTimeMillis().toString() + backupExt + val finalPath = + backupRootPath + System.currentTimeMillis().toString() + APPEND_EXTENSION val zipItems = mutableListOf() zipItems.addAll(getDatabaseZipItems(context)) zipItems.addAll(getSettingsZipItems(context)) @@ -39,7 +42,7 @@ object BackupHelper { return context.databaseList().filter { it.endsWith(".db") }.map { - ZipItem(context.getDatabasePath(it).absolutePath, "databases${File.separator}$it") + ZipItem(context.getDatabasePath(it).absolutePath, "$DATABASES_PATH${File.separator}$it") } } @@ -49,7 +52,7 @@ object BackupHelper { "${BuildConfig.APPLICATION_ID}_preferences.xml", // App settings pref path "$THEME_PREFS_KEY_DEFAULT.xml" // appthemehelper pref path ).map { - ZipItem(sharedPrefPath + it, "preferences${File.separator}$it") + ZipItem(sharedPrefPath + it, "$SETTINGS_PATH${File.separator}$it") } } @@ -57,15 +60,91 @@ object BackupHelper { return context.filesDir.listFiles { _, name -> name.endsWith(".jpg") }?.map { - ZipItem(it.absolutePath, "userImages${File.separator}${it.name}") + ZipItem(it.absolutePath, "$IMAGES_PATH${File.separator}${it.name}") + } + } + + suspend fun restoreBackup(context: Context, file: File) { + withContext(Dispatchers.IO) { + ZipInputStream(FileInputStream(file)).use { + var entry = it.nextEntry + while (entry != null) { + if (entry.isDatabaseEntry()) restoreDatabase(context, it, entry) + if (entry.isPreferenceEntry()) restorePreferences(context, it, entry) + if (entry.isImageEntry()) restoreImages(context, it, entry) + entry = it.nextEntry + } + } + withContext(Dispatchers.Main) { + Toast.makeText(context, "Restore Completed Successfully", Toast.LENGTH_SHORT).show() + } + } + } + + private fun restoreImages(context: Context, zipIn: ZipInputStream, zipEntry: ZipEntry) { + val filePath = + context.filesDir.path + File.separator + zipEntry.getFileName() + BufferedOutputStream(FileOutputStream(filePath)).use { bos -> + val bytesIn = ByteArray(DEFAULT_BUFFER_SIZE) + var read: Int + while (zipIn.read(bytesIn).also { read = it } != -1) { + bos.write(bytesIn, 0, read) + } + } + } + + private fun restorePreferences(context: Context, zipIn: ZipInputStream, zipEntry: ZipEntry) { + val file = File( + context.filesDir.parent!! + File.separator + "shared_prefs" + File.separator + zipEntry.getFileName() + ) + if (file.exists()) { + file.delete() + } + BufferedOutputStream(FileOutputStream(file)).use { bos -> + val bytesIn = ByteArray(DEFAULT_BUFFER_SIZE) + var read: Int + while (zipIn.read(bytesIn).also { read = it } != -1) { + bos.write(bytesIn, 0, read) + } + } + } + + private fun restoreDatabase(context: Context, zipIn: ZipInputStream, zipEntry: ZipEntry) { + val filePath = + context.filesDir.parent!! + File.separator + DATABASES_PATH + File.separator + zipEntry.getFileName() + BufferedOutputStream(FileOutputStream(filePath)).use { bos -> + val bytesIn = ByteArray(DEFAULT_BUFFER_SIZE) + var read: Int + while (zipIn.read(bytesIn).also { read = it } != -1) { + bos.write(bytesIn, 0, read) + } } } val backupRootPath = Environment.getExternalStorageDirectory().toString() + "/RetroMusic/Backups/" - const val backupExt = ".rmbak" + const val BACKUP_EXTENSION = "zip" + private const val APPEND_EXTENSION = ".$BACKUP_EXTENSION" + private const val DATABASES_PATH = "databases" + private const val SETTINGS_PATH = "prefs" + private const val IMAGES_PATH = "userImages" private const val THEME_PREFS_KEY_DEFAULT = "[[kabouzeid_app-theme-helper]]" + private fun ZipEntry.isDatabaseEntry(): Boolean { + return name.startsWith(DATABASES_PATH) + } + + private fun ZipEntry.isPreferenceEntry(): Boolean { + return name.startsWith(SETTINGS_PATH) + } + + private fun ZipEntry.isImageEntry(): Boolean { + return name.startsWith(IMAGES_PATH) + } + + private fun ZipEntry.getFileName(): String { + return name.substring(name.lastIndexOf(File.separator)) + } } data class ZipItem(val filePath: String, val zipPath: String) \ No newline at end of file From 5a73565182f98c4e728b9bc27e41dc395a5438ce Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 9 Oct 2021 13:46:21 +0530 Subject: [PATCH 070/149] Added backup & restore in settings --- .../retromusic/fragments/settings/MainSettingsFragment.kt | 2 ++ .../code/name/monkey/retromusic/util/NavigationUtil.kt | 5 +++++ app/src/main/res/layout/fragment_main_settings.xml | 8 ++++++++ .../src/main/res/values/colors_material_design.xml | 2 ++ 4 files changed, 17 insertions(+) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt index 30b39fa5f..c8ecf904a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt @@ -45,6 +45,7 @@ class MainSettingsFragment : Fragment(), View.OnClickListener { R.id.otherSettings -> findNavController().navigate(R.id.action_mainSettingsFragment_to_otherSettingsFragment) R.id.aboutSettings -> findNavController().navigate(R.id.action_mainSettingsFragment_to_aboutActivity) R.id.nowPlayingSettings -> findNavController().navigate(R.id.action_mainSettingsFragment_to_nowPlayingSettingsFragment) + R.id.backup_restore_settings -> NavigationUtil.gotoBackup(requireActivity()) } } @@ -68,6 +69,7 @@ class MainSettingsFragment : Fragment(), View.OnClickListener { binding.notificationSettings.setOnClickListener(this) binding.otherSettings.setOnClickListener(this) binding.aboutSettings.setOnClickListener(this) + binding.backupRestoreSettings.setOnClickListener(this) binding.buyProContainer.apply { if (App.isProVersion()) hide() else show() diff --git a/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.kt index ffba5bdd3..b0a140774 100755 --- a/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.kt @@ -23,6 +23,7 @@ import androidx.core.app.ActivityCompat import androidx.navigation.findNavController import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.* +import code.name.monkey.retromusic.activities.backup.BackupActivity import code.name.monkey.retromusic.activities.bugreport.BugReportActivity import code.name.monkey.retromusic.helper.MusicPlayerRemote.audioSessionId import com.google.android.material.bottomsheet.BottomSheetBehavior @@ -77,6 +78,10 @@ object NavigationUtil { ActivityCompat.startActivity(activity, Intent(activity, WhatsNewActivity::class.java), null) } + fun gotoBackup(activity: Activity) { + ActivityCompat.startActivity(activity, Intent(activity, BackupActivity::class.java), null) + } + fun openEqualizer(activity: Activity) { stockEqualizer(activity) } diff --git a/app/src/main/res/layout/fragment_main_settings.xml b/app/src/main/res/layout/fragment_main_settings.xml index 774ec0744..ef3967119 100644 --- a/app/src/main/res/layout/fragment_main_settings.xml +++ b/app/src/main/res/layout/fragment_main_settings.xml @@ -160,6 +160,14 @@ app:settingListItemText="@string/other_settings_summary" app:settingListItemTitle="@string/others" /> + #2196F3 #2979FF + #26c6da + #00C853 #4CAF50 From 6e3c1aa7423fbcecbab31788daa0fe5e551a8b03 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 9 Oct 2021 13:58:21 +0530 Subject: [PATCH 071/149] Converted BackupActivity to fragment --- app/src/main/AndroidManifest.xml | 4 +- .../retromusic/activities/SettingsActivity.kt | 1 + .../backup/BackupFragment.kt} | 42 ++---- .../backup/BackupViewModel.kt | 2 +- .../backup/RestoreActivity.kt | 2 +- .../settings/MainSettingsFragment.kt | 2 +- .../monkey/retromusic/util/NavigationUtil.kt | 5 - app/src/main/res/layout/activity_backup.xml | 139 ------------------ app/src/main/res/layout/activity_restore.xml | 2 +- app/src/main/res/layout/fragment_backup.xml | 98 ++++++++++++ .../main/res/navigation/settings_graph.xml | 14 ++ 11 files changed, 134 insertions(+), 177 deletions(-) rename app/src/main/java/code/name/monkey/retromusic/{activities/backup/BackupActivity.kt => fragments/backup/BackupFragment.kt} (57%) rename app/src/main/java/code/name/monkey/retromusic/{activities => fragments}/backup/BackupViewModel.kt (95%) rename app/src/main/java/code/name/monkey/retromusic/{activities => fragments}/backup/RestoreActivity.kt (85%) delete mode 100644 app/src/main/res/layout/activity_backup.xml create mode 100644 app/src/main/res/layout/fragment_backup.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b264b02cf..d1bbdd945 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,7 @@ @@ -133,7 +133,7 @@ R.string.personalize R.id.themeSettingsFragment -> R.string.general_settings_title R.id.aboutActivity -> R.string.action_about + R.id.backup_restore_settings -> R.string.backup_restore_title else -> R.id.action_settings } return getString(idRes) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/backup/BackupActivity.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt similarity index 57% rename from app/src/main/java/code/name/monkey/retromusic/activities/backup/BackupActivity.kt rename to app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt index 39f13f784..72235172c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/backup/BackupActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt @@ -1,36 +1,31 @@ -package code.name.monkey.retromusic.activities.backup +package code.name.monkey.retromusic.fragments.backup import android.os.Bundle -import android.widget.Toast -import androidx.activity.viewModels +import android.view.View import androidx.core.view.isVisible +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.activities.base.AbsThemeActivity import code.name.monkey.retromusic.adapter.backup.BackupAdapter -import code.name.monkey.retromusic.databinding.ActivityBackupBinding +import code.name.monkey.retromusic.databinding.FragmentBackupBinding import code.name.monkey.retromusic.helper.BackupHelper -import com.google.android.material.shape.MaterialShapeDrawable -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext import java.io.File -class BackupActivity : AbsThemeActivity(), BackupAdapter.BackupClickedListener { +class BackupFragment : Fragment(R.layout.fragment_backup), BackupAdapter.BackupClickedListener { private val backupViewModel by viewModels() private var backupAdapter: BackupAdapter? = null - lateinit var binding: ActivityBackupBinding - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - binding = ActivityBackupBinding.inflate(layoutInflater) - setContentView(binding.root) - binding.appBarLayout.statusBarForeground = - MaterialShapeDrawable.createWithElevationOverlay(this) - binding.toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black) + private var _binding: FragmentBackupBinding? = null + private val binding get() = _binding!! + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + _binding = FragmentBackupBinding.bind(view) initAdapter() setupRecyclerview() backupViewModel.backupsLiveData.observe(this) { @@ -46,21 +41,14 @@ class BackupActivity : AbsThemeActivity(), BackupAdapter.BackupClickedListener { private fun setupButtons() { binding.createBackup.setOnClickListener { lifecycleScope.launch { - BackupHelper.createBackup(this@BackupActivity) + BackupHelper.createBackup(requireContext()) backupViewModel.loadBackups() - withContext(Dispatchers.Main) { - Toast.makeText( - this@BackupActivity, - "Backup Completed Successfully", - Toast.LENGTH_SHORT - ).show() - } } } } private fun initAdapter() { - backupAdapter = BackupAdapter(this@BackupActivity, ArrayList(), this) + backupAdapter = BackupAdapter(requireContext(), ArrayList(), this) backupAdapter?.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { override fun onChanged() { super.onChanged() @@ -86,7 +74,7 @@ class BackupActivity : AbsThemeActivity(), BackupAdapter.BackupClickedListener { override fun onBackupClicked(file: File) { lifecycleScope.launch { - backupViewModel.restoreBackup(this@BackupActivity, file) + backupViewModel.restoreBackup(requireActivity(), file) } } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/backup/BackupViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt similarity index 95% rename from app/src/main/java/code/name/monkey/retromusic/activities/backup/BackupViewModel.kt rename to app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt index 00cdffef9..09f18df62 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/backup/BackupViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt @@ -1,4 +1,4 @@ -package code.name.monkey.retromusic.activities.backup +package code.name.monkey.retromusic.fragments.backup import android.app.Activity import android.content.Intent diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/backup/RestoreActivity.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/RestoreActivity.kt similarity index 85% rename from app/src/main/java/code/name/monkey/retromusic/activities/backup/RestoreActivity.kt rename to app/src/main/java/code/name/monkey/retromusic/fragments/backup/RestoreActivity.kt index 6caabf7ff..f54e697c2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/backup/RestoreActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/RestoreActivity.kt @@ -1,4 +1,4 @@ -package code.name.monkey.retromusic.activities.backup +package code.name.monkey.retromusic.fragments.backup import android.os.Bundle import androidx.appcompat.app.AppCompatActivity diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt index c8ecf904a..c507a259d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt @@ -45,7 +45,7 @@ class MainSettingsFragment : Fragment(), View.OnClickListener { R.id.otherSettings -> findNavController().navigate(R.id.action_mainSettingsFragment_to_otherSettingsFragment) R.id.aboutSettings -> findNavController().navigate(R.id.action_mainSettingsFragment_to_aboutActivity) R.id.nowPlayingSettings -> findNavController().navigate(R.id.action_mainSettingsFragment_to_nowPlayingSettingsFragment) - R.id.backup_restore_settings -> NavigationUtil.gotoBackup(requireActivity()) + R.id.backup_restore_settings -> findNavController().navigate(R.id.action_mainSettingsFragment_to_backupFragment) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.kt index b0a140774..ffba5bdd3 100755 --- a/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.kt @@ -23,7 +23,6 @@ import androidx.core.app.ActivityCompat import androidx.navigation.findNavController import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.* -import code.name.monkey.retromusic.activities.backup.BackupActivity import code.name.monkey.retromusic.activities.bugreport.BugReportActivity import code.name.monkey.retromusic.helper.MusicPlayerRemote.audioSessionId import com.google.android.material.bottomsheet.BottomSheetBehavior @@ -78,10 +77,6 @@ object NavigationUtil { ActivityCompat.startActivity(activity, Intent(activity, WhatsNewActivity::class.java), null) } - fun gotoBackup(activity: Activity) { - ActivityCompat.startActivity(activity, Intent(activity, BackupActivity::class.java), null) - } - fun openEqualizer(activity: Activity) { stockEqualizer(activity) } diff --git a/app/src/main/res/layout/activity_backup.xml b/app/src/main/res/layout/activity_backup.xml deleted file mode 100644 index 1bd0ae067..000000000 --- a/app/src/main/res/layout/activity_backup.xml +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_restore.xml b/app/src/main/res/layout/activity_restore.xml index 273ec1089..79eda3368 100644 --- a/app/src/main/res/layout/activity_restore.xml +++ b/app/src/main/res/layout/activity_restore.xml @@ -3,6 +3,6 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".activities.backup.RestoreActivity"> + tools:context=".fragments.backup.RestoreActivity"> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_backup.xml b/app/src/main/res/layout/fragment_backup.xml new file mode 100644 index 000000000..33ded9932 --- /dev/null +++ b/app/src/main/res/layout/fragment_backup.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/settings_graph.xml b/app/src/main/res/navigation/settings_graph.xml index 725feda1f..70dffca0f 100644 --- a/app/src/main/res/navigation/settings_graph.xml +++ b/app/src/main/res/navigation/settings_graph.xml @@ -74,6 +74,15 @@ app:launchSingleTop="true" app:popEnterAnim="@anim/retro_fragment_close_enter" app:popExitAnim="@anim/retro_fragment_close_exit" /> + + + + \ No newline at end of file From f8be0502ca76578d807cfa1562059fc2226eb388 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 9 Oct 2021 17:45:10 +0530 Subject: [PATCH 072/149] Fixed a typo --- .../code/name/monkey/retromusic/activities/SettingsActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt index 514b5a1e1..b9a233bb9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt @@ -64,7 +64,7 @@ class SettingsActivity : AbsThemeActivity(), ColorCallback, OnThemeChangedListen R.id.personalizeSettingsFragment -> R.string.personalize R.id.themeSettingsFragment -> R.string.general_settings_title R.id.aboutActivity -> R.string.action_about - R.id.backup_restore_settings -> R.string.backup_restore_title + R.id.backup_fragment -> R.string.backup_restore_title else -> R.id.action_settings } return getString(idRes) From 5005e91b1cbb3cc5b246f9312dc96582673470ea Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 9 Oct 2021 17:52:03 +0530 Subject: [PATCH 073/149] Code Cleanup --- .../monkey/retromusic/fragments/backup/BackupViewModel.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt index 09f18df62..0a557ff5c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt @@ -19,8 +19,8 @@ class BackupViewModel : ViewModel() { fun loadBackups() { viewModelScope.launch { - File(BackupHelper.backupRootPath).listFiles { _, name -> - return@listFiles name.endsWith(BackupHelper.BACKUP_EXTENSION) + File(BackupHelper.backupRootPath).listFiles { file, _ -> + return@listFiles file.extension == BackupHelper.BACKUP_EXTENSION }?.toList()?.let { backupsMutableLiveData.value = it } From 7c0701efadb8ece9f58915ba8cfcc46dda816438 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sun, 10 Oct 2021 15:31:02 +0530 Subject: [PATCH 074/149] Fixed grid size of first song set to 1 --- .../monkey/retromusic/fragments/songs/SongsFragment.kt | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt index a8c40be6e..b854b019d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt @@ -70,13 +70,7 @@ class SongsFragment : AbsRecyclerViewCustomGridSizeFragment Date: Mon, 11 Oct 2021 11:46:29 +0530 Subject: [PATCH 075/149] Fixed Mini player visibility --- .../retromusic/activities/base/AbsSlidingMusicPanelActivity.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt index dd325878e..428c500e8 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt @@ -132,6 +132,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { private fun setupBottomSheet() { bottomSheetBehavior = from(binding.slidingPanel) as RetroBottomSheetBehavior bottomSheetBehavior.addBottomSheetCallback(bottomSheetCallbackList) + setMiniPlayerAlphaProgress(0F) } override fun onResume() { @@ -158,6 +159,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { } fun expandPanel() { + setMiniPlayerAlphaProgress(1.0f) bottomSheetBehavior.state = STATE_EXPANDED } From 6ff3eb2e2a6a7b94a4f350380fd0e5456d28d074 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Mon, 11 Oct 2021 11:47:12 +0530 Subject: [PATCH 076/149] Fixed backups not visible --- .../retromusic/fragments/backup/BackupFragment.kt | 9 ++++----- .../fragments/backup/BackupViewModel.kt | 15 ++++++--------- .../name/monkey/retromusic/helper/BackupHelper.kt | 2 +- app/src/main/res/layout/fragment_backup.xml | 8 +++----- 4 files changed, 14 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt index 72235172c..9098f244b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt @@ -58,11 +58,10 @@ class BackupFragment : Fragment(R.layout.fragment_backup), BackupAdapter.BackupC } private fun checkIsEmpty() { - binding.emptyText.setText(R.string.no_backups_found) - (backupAdapter!!.itemCount == 0).run { - binding.empty.isVisible = this - binding.backupTitle.isVisible = this - } + val isEmpty = backupAdapter!!.itemCount == 0 + binding.empty.isVisible = isEmpty + binding.backupTitle.isVisible = !isEmpty + binding.backupRecyclerview.isVisible = !isEmpty } fun setupRecyclerview() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt index 0a557ff5c..d2194749b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupViewModel.kt @@ -2,12 +2,11 @@ package code.name.monkey.retromusic.fragments.backup import android.app.Activity import android.content.Intent +import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope import code.name.monkey.retromusic.helper.BackupHelper import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.io.File import kotlin.system.exitProcess @@ -15,15 +14,13 @@ import kotlin.system.exitProcess class BackupViewModel : ViewModel() { private val backupsMutableLiveData = MutableLiveData>() - val backupsLiveData = backupsMutableLiveData + val backupsLiveData: LiveData> = backupsMutableLiveData fun loadBackups() { - viewModelScope.launch { - File(BackupHelper.backupRootPath).listFiles { file, _ -> - return@listFiles file.extension == BackupHelper.BACKUP_EXTENSION - }?.toList()?.let { - backupsMutableLiveData.value = it - } + File(BackupHelper.backupRootPath).listFiles { _, name -> + return@listFiles name.endsWith(BackupHelper.BACKUP_EXTENSION) + }?.toList()?.let { + backupsMutableLiveData.value = it } } diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt b/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt index b2712afc7..82f18a22c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt +++ b/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt @@ -123,7 +123,7 @@ object BackupHelper { val backupRootPath = Environment.getExternalStorageDirectory().toString() + "/RetroMusic/Backups/" - const val BACKUP_EXTENSION = "zip" + const val BACKUP_EXTENSION = "rmbak" private const val APPEND_EXTENSION = ".$BACKUP_EXTENSION" private const val DATABASES_PATH = "databases" private const val SETTINGS_PATH = "prefs" diff --git a/app/src/main/res/layout/fragment_backup.xml b/app/src/main/res/layout/fragment_backup.xml index 33ded9932..c24a3399c 100644 --- a/app/src/main/res/layout/fragment_backup.xml +++ b/app/src/main/res/layout/fragment_backup.xml @@ -55,9 +55,8 @@ @@ -66,14 +65,13 @@ android:id="@android:id/empty" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="center" android:gravity="center" android:orientation="vertical" android:visibility="gone" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" + app:layout_constraintTop_toBottomOf="@+id/create_backup" tools:visibility="visible"> From 520b6b74caa29821397d4bbd5c76b75e537c0d30 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Mon, 11 Oct 2021 11:47:55 +0530 Subject: [PATCH 077/149] Code Cleanup --- .../adapter/CategoryInfoAdapter.java | 10 +- .../retromusic/adapter/album/AlbumAdapter.kt | 2 +- .../fragments/albums/AlbumDetailsViewModel.kt | 2 +- .../monkey/retromusic/lyrics/LrcEntry.java | 8 +- .../monkey/retromusic/lyrics/LrcView.java | 56 ++++---- .../misc/CustomFragmentStatePagerAdapter.java | 8 +- ...teToastMediaScannerCompletionListener.java | 2 +- .../name/monkey/retromusic/model/Artist.kt | 3 - .../retromusic/network/model/LastFmAlbum.java | 3 +- .../retromusic/network/model/LastFmTrack.java | 3 +- .../retromusic/providers/BlacklistStore.java | 2 +- .../providers/SongPlayCountStore.java | 17 ++- .../retromusic/repository/SortedCursor.java | 2 +- .../repository/SortedLongCursor.java | 2 +- .../retromusic/service/MultiPlayer.java | 5 +- .../retromusic/service/MusicService.java | 126 +++++++++--------- .../util/AutoGeneratedPlaylistBitmap.java | 2 +- .../monkey/retromusic/util/CalendarUtil.java | 2 +- .../retromusic/util/PackageValidator.kt | 25 ++-- .../retromusic/util/SwipeAndDragHelper.java | 2 +- .../color/MediaNotificationProcessor.java | 4 +- .../name/monkey/retromusic/views/SeekArc.java | 8 +- 22 files changed, 155 insertions(+), 139 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/CategoryInfoAdapter.java b/app/src/main/java/code/name/monkey/retromusic/adapter/CategoryInfoAdapter.java index d9b7b6933..2354bb9af 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/CategoryInfoAdapter.java +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/CategoryInfoAdapter.java @@ -40,7 +40,7 @@ public class CategoryInfoAdapter extends RecyclerView.Adapter categoryInfos; - private ItemTouchHelper touchHelper; + private final ItemTouchHelper touchHelper; public CategoryInfoAdapter() { SwipeAndDragHelper swipeAndDragHelper = new SwipeAndDragHelper(this); @@ -128,15 +128,15 @@ public class CategoryInfoAdapter extends RecyclerView.Adapter> = liveData { emit(Result.Loading) - emit(repository.albumInfo(album.artistName ?: "-", album.title ?: "-")) + emit(repository.albumInfo(album.artistName, album.title)) } fun getMoreAlbums(artist: Artist): LiveData> = liveData(IO) { diff --git a/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcEntry.java b/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcEntry.java index 81682f8ad..75fc63a4d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcEntry.java +++ b/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcEntry.java @@ -19,13 +19,15 @@ import android.text.StaticLayout; import android.text.TextPaint; import android.text.TextUtils; -/** 一行歌词实体 */ +/** + * 一行歌词实体 + */ class LrcEntry implements Comparable { public static final int GRAVITY_CENTER = 0; public static final int GRAVITY_LEFT = 1; public static final int GRAVITY_RIGHT = 2; - private long time; - private String text; + private final long time; + private final String text; private String secondText; private StaticLayout staticLayout; /** 歌词距离视图顶部的距离 */ diff --git a/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcView.java b/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcView.java index a27f1a19f..60f904bdb 100644 --- a/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcView.java +++ b/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcView.java @@ -43,15 +43,17 @@ import java.util.List; import code.name.monkey.retromusic.BuildConfig; import code.name.monkey.retromusic.R; -/** 歌词 Created by wcy on 2015/11/9. */ +/** + * 歌词 Created by wcy on 2015/11/9. + */ @SuppressLint("StaticFieldLeak") public class LrcView extends View { private static final long ADJUST_DURATION = 100; private static final long TIMELINE_KEEP_TIME = 4 * DateUtils.SECOND_IN_MILLIS; - private List mLrcEntryList = new ArrayList<>(); - private TextPaint mLrcPaint = new TextPaint(); - private TextPaint mTimePaint = new TextPaint(); + private final List mLrcEntryList = new ArrayList<>(); + private final TextPaint mLrcPaint = new TextPaint(); + private final TextPaint mTimePaint = new TextPaint(); private Paint.FontMetrics mTimeFontMetrics; private Drawable mPlayDrawable; private float mDividerHeight; @@ -78,28 +80,30 @@ public class LrcView extends View { private boolean isTouching; private boolean isFling; private int mTextGravity; // 歌词显示位置,靠左/居中/靠右 - private Runnable hideTimelineRunnable = - new Runnable() { - @Override - public void run() { - if (hasLrc() && isShowTimeline) { - isShowTimeline = false; - smoothScrollTo(mCurrentLine); - } - } - }; - /** 手势监听器 */ - private GestureDetector.SimpleOnGestureListener mSimpleOnGestureListener = - new GestureDetector.SimpleOnGestureListener() { - @Override - public boolean onDown(MotionEvent e) { - if (hasLrc() && mOnPlayClickListener != null) { - mScroller.forceFinished(true); - removeCallbacks(hideTimelineRunnable); - isTouching = true; - isShowTimeline = true; - invalidate(); - return true; + private final Runnable hideTimelineRunnable = + new Runnable() { + @Override + public void run() { + if (hasLrc() && isShowTimeline) { + isShowTimeline = false; + smoothScrollTo(mCurrentLine); + } + } + }; + /** + * 手势监听器 + */ + private final GestureDetector.SimpleOnGestureListener mSimpleOnGestureListener = + new GestureDetector.SimpleOnGestureListener() { + @Override + public boolean onDown(MotionEvent e) { + if (hasLrc() && mOnPlayClickListener != null) { + mScroller.forceFinished(true); + removeCallbacks(hideTimelineRunnable); + isTouching = true; + isShowTimeline = true; + invalidate(); + return true; } return super.onDown(e); } diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/CustomFragmentStatePagerAdapter.java b/app/src/main/java/code/name/monkey/retromusic/misc/CustomFragmentStatePagerAdapter.java index b8ff09bf5..50ce61196 100644 --- a/app/src/main/java/code/name/monkey/retromusic/misc/CustomFragmentStatePagerAdapter.java +++ b/app/src/main/java/code/name/monkey/retromusic/misc/CustomFragmentStatePagerAdapter.java @@ -78,15 +78,17 @@ public abstract class CustomFragmentStatePagerAdapter extends PagerAdapter { private final FragmentManager mFragmentManager; private FragmentTransaction mCurTransaction = null; - private ArrayList mSavedState = new ArrayList(); - private ArrayList mFragments = new ArrayList(); + private final ArrayList mSavedState = new ArrayList(); + private final ArrayList mFragments = new ArrayList(); private Fragment mCurrentPrimaryItem = null; public CustomFragmentStatePagerAdapter(FragmentManager fm) { mFragmentManager = fm; } - /** Return the Fragment associated with a specified position. */ + /** + * Return the Fragment associated with a specified position. + */ public abstract Fragment getItem(int position); @Override diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/UpdateToastMediaScannerCompletionListener.java b/app/src/main/java/code/name/monkey/retromusic/misc/UpdateToastMediaScannerCompletionListener.java index 1b6dd0233..d749cf223 100644 --- a/app/src/main/java/code/name/monkey/retromusic/misc/UpdateToastMediaScannerCompletionListener.java +++ b/app/src/main/java/code/name/monkey/retromusic/misc/UpdateToastMediaScannerCompletionListener.java @@ -38,7 +38,7 @@ public class UpdateToastMediaScannerCompletionListener private final List toBeScanned; private int failed = 0; private int scanned = 0; - private Toast toast; + private final Toast toast; @SuppressLint("ShowToast") public UpdateToastMediaScannerCompletionListener(Activity activity, List toBeScanned) { diff --git a/app/src/main/java/code/name/monkey/retromusic/model/Artist.kt b/app/src/main/java/code/name/monkey/retromusic/model/Artist.kt index 12150c459..faf133986 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/Artist.kt +++ b/app/src/main/java/code/name/monkey/retromusic/model/Artist.kt @@ -30,9 +30,6 @@ data class Artist( } var name: String = "" - set(value) { - field = value - } get() { val name = if (isAlbumArtist) getAlbumArtistName() else getArtistName() diff --git a/app/src/main/java/code/name/monkey/retromusic/network/model/LastFmAlbum.java b/app/src/main/java/code/name/monkey/retromusic/network/model/LastFmAlbum.java index 481372ffc..baef218ff 100644 --- a/app/src/main/java/code/name/monkey/retromusic/network/model/LastFmAlbum.java +++ b/app/src/main/java/code/name/monkey/retromusic/network/model/LastFmAlbum.java @@ -112,7 +112,8 @@ public class LastFmAlbum { public class Tags { - @Expose private List tag = null; + @Expose + private final List tag = null; public List getTag() { return tag; diff --git a/app/src/main/java/code/name/monkey/retromusic/network/model/LastFmTrack.java b/app/src/main/java/code/name/monkey/retromusic/network/model/LastFmTrack.java index cdaed55e8..8319b15d4 100644 --- a/app/src/main/java/code/name/monkey/retromusic/network/model/LastFmTrack.java +++ b/app/src/main/java/code/name/monkey/retromusic/network/model/LastFmTrack.java @@ -84,7 +84,8 @@ public class LastFmTrack { } public static class Toptags { - @Expose private List tag = null; + @Expose + private final List tag = null; public List getTag() { return tag; diff --git a/app/src/main/java/code/name/monkey/retromusic/providers/BlacklistStore.java b/app/src/main/java/code/name/monkey/retromusic/providers/BlacklistStore.java index bf274f66c..90a89770e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/providers/BlacklistStore.java +++ b/app/src/main/java/code/name/monkey/retromusic/providers/BlacklistStore.java @@ -36,7 +36,7 @@ public class BlacklistStore extends SQLiteOpenHelper { public static final String DATABASE_NAME = "blacklist.db"; private static final int VERSION = 2; private static BlacklistStore sInstance = null; - private Context context; + private final Context context; public BlacklistStore(final Context context) { super(context, DATABASE_NAME, null, VERSION); 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 fd74c9076..771f06e1f 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 @@ -34,24 +34,27 @@ public class SongPlayCountStore extends SQLiteOpenHelper { private static final int VERSION = 3; // how many weeks worth of playback to track private static final int NUM_WEEKS = 52; - @Nullable private static SongPlayCountStore sInstance = null; + @Nullable + private static SongPlayCountStore sInstance = null; // interpolator curve applied for measuring the curve - @NonNull private static Interpolator sInterpolator = new AccelerateInterpolator(1.5f); + @NonNull + private static final Interpolator sInterpolator = new AccelerateInterpolator(1.5f); // how high to multiply the interpolation curve @SuppressWarnings("FieldCanBeLocal") - private static int INTERPOLATOR_HEIGHT = 50; + private static final int INTERPOLATOR_HEIGHT = 50; // how high the base value is. The ratio of the Height to Base is what really matters @SuppressWarnings("FieldCanBeLocal") - private static int INTERPOLATOR_BASE = 25; + private static final int INTERPOLATOR_BASE = 25; @SuppressWarnings("FieldCanBeLocal") - private static int ONE_WEEK_IN_MS = 1000 * 60 * 60 * 24 * 7; + private static final int ONE_WEEK_IN_MS = 1000 * 60 * 60 * 24 * 7; - @NonNull private static String WHERE_ID_EQUALS = SongPlayCountColumns.ID + "=?"; + @NonNull + private static final String WHERE_ID_EQUALS = SongPlayCountColumns.ID + "=?"; // number of weeks since epoch time - private int mNumberOfWeeksSinceEpoch; + private final int mNumberOfWeeksSinceEpoch; // used to track if we've walked through the db and updated all the rows private boolean mDatabaseUpdated; diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/SortedCursor.java b/app/src/main/java/code/name/monkey/retromusic/repository/SortedCursor.java index 0d1cbb308..531af65da 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/SortedCursor.java +++ b/app/src/main/java/code/name/monkey/retromusic/repository/SortedCursor.java @@ -34,7 +34,7 @@ public class SortedCursor extends AbstractCursor { // the map of external indices to internal indices private ArrayList mOrderedPositions; // this contains the ids that weren't found in the underlying cursor - private ArrayList mMissingValues; + private final ArrayList mMissingValues; // this contains the mapped cursor positions and afterwards the extra ids that weren't found private HashMap mMapCursorPositions; diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/SortedLongCursor.java b/app/src/main/java/code/name/monkey/retromusic/repository/SortedLongCursor.java index 9884a32ed..75996d4ab 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/SortedLongCursor.java +++ b/app/src/main/java/code/name/monkey/retromusic/repository/SortedLongCursor.java @@ -34,7 +34,7 @@ public class SortedLongCursor extends AbstractCursor { // the map of external indices to internal indices private ArrayList mOrderedPositions; // this contains the ids that weren't found in the underlying cursor - private ArrayList mMissingIds; + private final ArrayList mMissingIds; // this contains the mapped cursor positions and afterwards the extra ids that weren't found private HashMap mMapCursorPositions; diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MultiPlayer.java b/app/src/main/java/code/name/monkey/retromusic/service/MultiPlayer.java index c0d7e023d..4f59ab20e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/MultiPlayer.java +++ b/app/src/main/java/code/name/monkey/retromusic/service/MultiPlayer.java @@ -39,8 +39,9 @@ public class MultiPlayer private MediaPlayer mCurrentMediaPlayer = new MediaPlayer(); private MediaPlayer mNextMediaPlayer; - private Context context; - @Nullable private Playback.PlaybackCallbacks callbacks; + private final Context context; + @Nullable + private Playback.PlaybackCallbacks callbacks; private boolean mIsInitialized = false; diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java index 3ab626a01..04dc6d8bf 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java +++ b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java @@ -187,15 +187,15 @@ public class MusicService extends MediaBrowserServiceCompat public int position = -1; - private AppWidgetBig appWidgetBig = AppWidgetBig.Companion.getInstance(); + private final AppWidgetBig appWidgetBig = AppWidgetBig.Companion.getInstance(); - private AppWidgetCard appWidgetCard = AppWidgetCard.Companion.getInstance(); + private final AppWidgetCard appWidgetCard = AppWidgetCard.Companion.getInstance(); - private AppWidgetClassic appWidgetClassic = AppWidgetClassic.Companion.getInstance(); + private final AppWidgetClassic appWidgetClassic = AppWidgetClassic.Companion.getInstance(); - private AppWidgetSmall appWidgetSmall = AppWidgetSmall.Companion.getInstance(); + private final AppWidgetSmall appWidgetSmall = AppWidgetSmall.Companion.getInstance(); - private AppWidgetText appWidgetText = AppWidgetText.Companion.getInstance(); + private final AppWidgetText appWidgetText = AppWidgetText.Companion.getInstance(); private final BroadcastReceiver widgetIntentReceiver = new BroadcastReceiver() { @@ -229,15 +229,15 @@ public class MusicService extends MediaBrowserServiceCompat } } }; - private AudioManager audioManager; - private IntentFilter becomingNoisyReceiverIntentFilter = - new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY); - private boolean becomingNoisyReceiverRegistered; - private IntentFilter bluetoothConnectedIntentFilter = - new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED); - private boolean bluetoothConnectedRegistered = false; - private IntentFilter headsetReceiverIntentFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG); - private boolean headsetReceiverRegistered = false; + private AudioManager audioManager; + private final IntentFilter becomingNoisyReceiverIntentFilter = + new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY); + private boolean becomingNoisyReceiverRegistered; + private final IntentFilter bluetoothConnectedIntentFilter = + new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED); + private boolean bluetoothConnectedRegistered = false; + private final IntentFilter headsetReceiverIntentFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG); + private boolean headsetReceiverRegistered = false; private MediaSessionCompat mediaSession; private ContentObserver mediaStoreObserver; private HandlerThread musicPlayerHandlerThread; @@ -291,59 +291,59 @@ public class MusicService extends MediaBrowserServiceCompat private HandlerThread queueSaveHandlerThread; private boolean queuesRestored; private int repeatMode; - private int shuffleMode; - private SongPlayCountHelper songPlayCountHelper = new SongPlayCountHelper(); - private final BroadcastReceiver bluetoothReceiver = - new BroadcastReceiver() { - @Override - public void onReceive(final Context context, final Intent intent) { - String action = intent.getAction(); - if (action != null) { - if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action) - && PreferenceUtil.INSTANCE.isBluetoothSpeaker()) { - if (VERSION.SDK_INT >= VERSION_CODES.M) { - if (getAudioManager().getDevices(AudioManager.GET_DEVICES_OUTPUTS).length > 0) { + private int shuffleMode; + private final SongPlayCountHelper songPlayCountHelper = new SongPlayCountHelper(); + private final BroadcastReceiver bluetoothReceiver = + new BroadcastReceiver() { + @Override + public void onReceive(final Context context, final Intent intent) { + String action = intent.getAction(); + if (action != null) { + if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action) + && PreferenceUtil.INSTANCE.isBluetoothSpeaker()) { + if (VERSION.SDK_INT >= VERSION_CODES.M) { + if (getAudioManager().getDevices(AudioManager.GET_DEVICES_OUTPUTS).length > 0) { play(); - } - } else { - if (getAudioManager().isBluetoothA2dpOn()) { - play(); - } - } - } } - } - }; - private PhoneStateListener phoneStateListener = - new PhoneStateListener() { - @Override - public void onCallStateChanged(int state, String incomingNumber) { - switch (state) { - case TelephonyManager.CALL_STATE_IDLE: - // Not in call: Play music - play(); - break; - case TelephonyManager.CALL_STATE_RINGING: - case TelephonyManager.CALL_STATE_OFFHOOK: - // A call is dialing, active or on hold - pause(); - break; - default: + } else { + if (getAudioManager().isBluetoothA2dpOn()) { + play(); } - super.onCallStateChanged(state, incomingNumber); + } } - }; - private BroadcastReceiver headsetReceiver = - new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action != null) { - if (Intent.ACTION_HEADSET_PLUG.equals(action)) { - int state = intent.getIntExtra("state", -1); - switch (state) { - case 0: - pause(); + } + } + }; + private final PhoneStateListener phoneStateListener = + new PhoneStateListener() { + @Override + public void onCallStateChanged(int state, String incomingNumber) { + switch (state) { + case TelephonyManager.CALL_STATE_IDLE: + // Not in call: Play music + play(); + break; + case TelephonyManager.CALL_STATE_RINGING: + case TelephonyManager.CALL_STATE_OFFHOOK: + // A call is dialing, active or on hold + pause(); + break; + default: + } + super.onCallStateChanged(state, incomingNumber); + } + }; + private final BroadcastReceiver headsetReceiver = + new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + if (Intent.ACTION_HEADSET_PLUG.equals(action)) { + int state = intent.getIntExtra("state", -1); + switch (state) { + case 0: + pause(); break; case 1: play(); diff --git a/app/src/main/java/code/name/monkey/retromusic/util/AutoGeneratedPlaylistBitmap.java b/app/src/main/java/code/name/monkey/retromusic/util/AutoGeneratedPlaylistBitmap.java index cf2e38f33..aea4fa1d5 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/AutoGeneratedPlaylistBitmap.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/AutoGeneratedPlaylistBitmap.java @@ -146,7 +146,7 @@ public class AutoGeneratedPlaylistBitmap { try { return Glide.with(context) .asBitmap() - .load(MusicUtil.INSTANCE.getMediaStoreAlbumCoverUri(id)) + .load(MusicUtil.getMediaStoreAlbumCoverUri(id)) .submit(200, 200) .get(); } catch (Exception e) { diff --git a/app/src/main/java/code/name/monkey/retromusic/util/CalendarUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/CalendarUtil.java index b396df9ab..28a75cc14 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/CalendarUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/CalendarUtil.java @@ -22,7 +22,7 @@ public class CalendarUtil { private static final long MS_PER_MINUTE = 60 * 1000; private static final long MS_PER_DAY = 24 * 60 * MS_PER_MINUTE; - private Calendar calendar; + private final Calendar calendar; public CalendarUtil() { this.calendar = Calendar.getInstance(); diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PackageValidator.kt b/app/src/main/java/code/name/monkey/retromusic/util/PackageValidator.kt index d75bd28ba..352fb1e49 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/PackageValidator.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/PackageValidator.kt @@ -34,6 +34,8 @@ import org.xmlpull.v1.XmlPullParserException import java.io.IOException import java.security.MessageDigest import java.security.NoSuchAlgorithmException +import java.util.* +import kotlin.collections.LinkedHashMap /** * Validates that the calling package is authorized to browse a [MediaBrowserServiceCompat]. @@ -274,7 +276,8 @@ class PackageValidator( var eventType = parser.next() while (eventType != XmlResourceParser.END_TAG) { val isRelease = parser.getAttributeBooleanValue(null, "release", false) - val signature = parser.nextText().replace(WHITESPACE_REGEX, "").toLowerCase() + val signature = parser.nextText().replace(WHITESPACE_REGEX, "") + .lowercase(Locale.getDefault()) callerSignatures += KnownSignature(signature, isRelease) eventType = parser.next() @@ -319,14 +322,14 @@ class PackageValidator( } private data class KnownCallerInfo( - internal val name: String, - internal val packageName: String, - internal val signatures: MutableSet + val name: String, + val packageName: String, + val signatures: MutableSet ) private data class KnownSignature( - internal val signature: String, - internal val release: Boolean + val signature: String, + val release: Boolean ) /** @@ -334,11 +337,11 @@ class PackageValidator( * to see if it's a known caller. */ private data class CallerPackageInfo( - internal val name: String, - internal val packageName: String, - internal val uid: Int, - internal val signature: String?, - internal val permissions: Set + val name: String, + val packageName: String, + val uid: Int, + val signature: String?, + val permissions: Set ) } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/SwipeAndDragHelper.java b/app/src/main/java/code/name/monkey/retromusic/util/SwipeAndDragHelper.java index 2fdf38273..589f8d4b2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/SwipeAndDragHelper.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/SwipeAndDragHelper.java @@ -22,7 +22,7 @@ import androidx.recyclerview.widget.RecyclerView; public class SwipeAndDragHelper extends ItemTouchHelper.Callback { - private ActionCompletionContract contract; + private final ActionCompletionContract contract; public SwipeAndDragHelper(@NonNull ActionCompletionContract contract) { this.contract = contract; diff --git a/app/src/main/java/code/name/monkey/retromusic/util/color/MediaNotificationProcessor.java b/app/src/main/java/code/name/monkey/retromusic/util/color/MediaNotificationProcessor.java index 6f17f982e..80233a62c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/color/MediaNotificationProcessor.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/color/MediaNotificationProcessor.java @@ -77,7 +77,7 @@ public class MediaNotificationProcessor { private static final String TAG = "ColorPicking"; private float[] mFilteredBackgroundHsl = null; - private Palette.Filter mBlackWhiteFilter = + private final Palette.Filter mBlackWhiteFilter = (rgb, hsl) -> !isWhiteOrBlack(hsl); private boolean mIsLowPriority; private int backgroundColor; @@ -85,7 +85,7 @@ public class MediaNotificationProcessor { private int primaryTextColor; private int actionBarColor; private Drawable drawable; - private Context context; + private final Context context; public MediaNotificationProcessor(Context context, Drawable drawable) { this.context = context; diff --git a/app/src/main/java/code/name/monkey/retromusic/views/SeekArc.java b/app/src/main/java/code/name/monkey/retromusic/views/SeekArc.java index 029ef96ed..ccf533c46 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/SeekArc.java +++ b/app/src/main/java/code/name/monkey/retromusic/views/SeekArc.java @@ -38,14 +38,16 @@ import code.name.monkey.retromusic.R; public class SeekArc extends View { private static final String TAG = SeekArc.class.getSimpleName(); - private static int INVALID_PROGRESS_VALUE = -1; + private static final int INVALID_PROGRESS_VALUE = -1; // The initial rotational offset -90 means we start at 12 o'clock private final int mAngleOffset = -90; private Paint mArcPaint; // Internal variables private int mArcRadius = 0; - private RectF mArcRect = new RectF(); - /** The Width of the background arc for the SeekArc */ + private final RectF mArcRect = new RectF(); + /** + * The Width of the background arc for the SeekArc + */ private int mArcWidth = 2; /** Will the progress increase clockwise or anti-clockwise */ private boolean mClockwise = true; From 8eb6c493038e986bb4c9b522be01f7c44143dfc8 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Mon, 11 Oct 2021 12:49:38 +0530 Subject: [PATCH 078/149] Fixed mini player popping up in Playing queue when queue is reordered --- .../activities/base/AbsSlidingMusicPanelActivity.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt index 428c500e8..c6e67eb63 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt @@ -51,6 +51,7 @@ import code.name.monkey.retromusic.fragments.player.peak.PeakPlayerFragment import code.name.monkey.retromusic.fragments.player.plain.PlainPlayerFragment import code.name.monkey.retromusic.fragments.player.simple.SimplePlayerFragment import code.name.monkey.retromusic.fragments.player.tiny.TinyPlayerFragment +import code.name.monkey.retromusic.fragments.queue.PlayingQueueFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.CategoryInfo import code.name.monkey.retromusic.util.PreferenceUtil @@ -227,7 +228,11 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { override fun onQueueChanged() { super.onQueueChanged() - hideBottomBar(MusicPlayerRemote.playingQueue.isEmpty()) + // Mini player should be hidden in Playing Queue + // it may pop up if hideBottomBar is called + if (currentFragment(R.id.fragment_container) !is PlayingQueueFragment) { + hideBottomBar(MusicPlayerRemote.playingQueue.isEmpty()) + } } override fun onBackPressed() { From 0d970ed40efdf090b27565661019f8f8d40263e2 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Mon, 11 Oct 2021 16:55:17 +0530 Subject: [PATCH 079/149] Fixed a crash on startup --- .../code/name/monkey/retromusic/activities/MainActivity.kt | 3 +++ 1 file changed, 3 insertions(+) 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 42a7fc837..09f773b26 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 @@ -21,6 +21,7 @@ import android.net.Uri import android.os.Bundle import android.provider.MediaStore import androidx.lifecycle.lifecycleScope +import androidx.navigation.contains import androidx.navigation.ui.setupWithNavController import code.name.monkey.retromusic.* import code.name.monkey.retromusic.activities.base.AbsCastActivity @@ -72,6 +73,8 @@ class MainActivity : AbsCastActivity(), OnSharedPreferenceChangeListener { val categoryInfo: CategoryInfo = PreferenceUtil.libraryCategory.first { it.visible } if (categoryInfo.visible) { + if (!navGraph.contains(PreferenceUtil.lastTab)) PreferenceUtil.lastTab = + categoryInfo.category.id navGraph.setStartDestination( if (PreferenceUtil.rememberLastTab) { PreferenceUtil.lastTab.let { From 6a391219a84157235012907ea18b3df536ab28fc Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Tue, 12 Oct 2021 11:46:56 +0530 Subject: [PATCH 080/149] Updated gradle and spotless plugins --- build.gradle | 4 ++-- spotless.gradle | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 5c7e0c516..b9557bed7 100644 --- a/build.gradle +++ b/build.gradle @@ -7,11 +7,11 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:7.0.2' + classpath 'com.android.tools.build:gradle:7.0.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" def nav_version = "2.3.5" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" - classpath "com.diffplug.spotless:spotless-plugin-gradle:4.5.1" + classpath "com.diffplug.spotless:spotless-plugin-gradle:5.16.0" } } diff --git a/spotless.gradle b/spotless.gradle index c23417c96..7c8a5be2f 100644 --- a/spotless.gradle +++ b/spotless.gradle @@ -1,4 +1,4 @@ -apply plugin: "com.diffplug.gradle.spotless" +apply plugin: "com.diffplug.spotless" spotless { java { target "src/*.java" From c2647b9160112ba5ccf1df1dfc5b98f6e6c437e5 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 13 Oct 2021 13:08:25 +0530 Subject: [PATCH 081/149] Fixed bottom sheet for Immersive mode --- .../base/AbsSlidingMusicPanelActivity.kt | 31 +++++++++---------- .../retromusic/extensions/InsetsExtensions.kt | 7 +++++ .../retromusic/extensions/ViewExtensions.kt | 5 +-- .../res/layout/sliding_music_panel_layout.xml | 9 ------ app/src/main/res/values/styles.xml | 1 + 5 files changed, 25 insertions(+), 28 deletions(-) create mode 100644 app/src/main/java/code/name/monkey/retromusic/extensions/InsetsExtensions.kt diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt index c6e67eb63..192c4a653 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt @@ -14,17 +14,16 @@ */ package code.name.monkey.retromusic.activities.base -import android.graphics.Color import android.os.Bundle import android.view.View import android.view.ViewGroup import android.view.ViewTreeObserver import android.widget.FrameLayout import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.fragment.app.commit -import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.retromusic.R import code.name.monkey.retromusic.RetroBottomSheetBehavior import code.name.monkey.retromusic.databinding.SlidingMusicPanelLayoutBinding @@ -55,7 +54,6 @@ import code.name.monkey.retromusic.fragments.queue.PlayingQueueFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.CategoryInfo import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.RetroUtil import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomsheet.BottomSheetBehavior.* import org.koin.androidx.viewmodel.ext.android.viewModel @@ -66,6 +64,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { var fromNotification: Boolean = false } + private var windowInsets: WindowInsetsCompat? = null protected val libraryViewModel by viewModel() private lateinit var bottomSheetBehavior: RetroBottomSheetBehavior private var playerFragment: AbsPlayerFragment? = null @@ -81,8 +80,6 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { override fun onSlide(bottomSheet: View, slideOffset: Float) { setMiniPlayerAlphaProgress(slideOffset) - binding.dimBackground.show() - binding.dimBackground.alpha = slideOffset } override fun onStateChanged(bottomSheet: View, newState: Int) { @@ -92,7 +89,6 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { } STATE_COLLAPSED -> { onPanelCollapsed() - binding.dimBackground.hide() if (fromNotification) { hideBottomBar(MusicPlayerRemote.playingQueue.isEmpty()) fromNotification = false @@ -117,17 +113,16 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { super.onCreate(savedInstanceState) binding = createContentView() setContentView(binding.root) + ViewCompat.setOnApplyWindowInsetsListener( + binding.root + ) { _, insets -> + windowInsets = insets + insets + } binding.bottomNavigationView.drawAboveNavBarWithPadding() chooseFragmentForTheme() setupSlidingUpPanel() setupBottomSheet() - - val themeColor = resolveColor(android.R.attr.windowBackground, Color.GRAY) - binding.dimBackground.setBackgroundColor(ColorUtil.withAlpha(themeColor, 0.5f)) - binding.dimBackground.setOnClickListener { - println("dimBackground") - collapsePanel() - } } private fun setupBottomSheet() { @@ -291,13 +286,15 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { } fun hideBottomBar(hide: Boolean) { - val heightOfBar = RetroUtil.getNavigationBarHeight() + - if (MusicPlayerRemote.isCasting) dip(R.dimen.cast_mini_player_height) else dip(R.dimen.mini_player_height) + val heightOfBar = + windowInsets.safeGetBottomInsets() + + if (MusicPlayerRemote.isCasting) dip(R.dimen.cast_mini_player_height) else dip(R.dimen.mini_player_height) val heightOfBarWithTabs = heightOfBar + dip(R.dimen.bottom_nav_height) val isVisible = binding.bottomNavigationView.isVisible if (hide) { bottomSheetBehavior.isHideable = true bottomSheetBehavior.peekHeight = 0 + bottomSheetBehavior.state = STATE_HIDDEN libraryViewModel.setFabMargin(if (isVisible) dip(R.dimen.bottom_nav_height) else 0) ViewCompat.setElevation(binding.slidingPanel, 0f) ViewCompat.setElevation(binding.bottomNavigationView, 10f) @@ -312,11 +309,11 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { if (bottomSheetBehavior.state != STATE_EXPANDED) getBottomNavigationView().translateYAnimate(0F) bottomSheetBehavior.peekHeightAnimate(heightOfBarWithTabs) - libraryViewModel.setFabMargin(heightOfBarWithTabs - RetroUtil.getNavigationBarHeight()) + libraryViewModel.setFabMargin(heightOfBarWithTabs - windowInsets.safeGetBottomInsets()) } else { println("Details") bottomSheetBehavior.peekHeight = heightOfBar - libraryViewModel.setFabMargin(heightOfBar - RetroUtil.getNavigationBarHeight()) + libraryViewModel.setFabMargin(heightOfBar - windowInsets.safeGetBottomInsets()) } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/InsetsExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/InsetsExtensions.kt new file mode 100644 index 000000000..48a605546 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/InsetsExtensions.kt @@ -0,0 +1,7 @@ +package code.name.monkey.retromusic.extensions + +import androidx.core.view.WindowInsetsCompat + +fun WindowInsetsCompat?.safeGetBottomInsets(): Int { + return this?.getInsets(WindowInsetsCompat.Type.navigationBars())?.bottom ?: 0 +} diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt index 1ea708d74..026d7b342 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt @@ -28,6 +28,7 @@ import androidx.core.animation.doOnEnd import androidx.core.animation.doOnStart import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat +import androidx.core.view.WindowInsetsCompat.Type.navigationBars import androidx.core.view.updateLayoutParams import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.TintHelper @@ -141,7 +142,7 @@ fun View.drawAboveNavBar() { ) { v: View, insets: WindowInsetsCompat -> v.updateLayoutParams { bottomMargin = - insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom + insets.getInsets(navigationBars()).bottom } insets } @@ -154,7 +155,7 @@ fun View.drawAboveNavBarWithPadding() { ViewCompat.setOnApplyWindowInsetsListener( (this) ) { v: View, insets: WindowInsetsCompat -> - val navBarHeight = insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom + val navBarHeight = insets.getInsets(navigationBars()).bottom v.updatePadding(bottom = navBarHeight) insets } diff --git a/app/src/main/res/layout/sliding_music_panel_layout.xml b/app/src/main/res/layout/sliding_music_panel_layout.xml index 80bc7b2aa..53048a663 100644 --- a/app/src/main/res/layout/sliding_music_panel_layout.xml +++ b/app/src/main/res/layout/sliding_music_panel_layout.xml @@ -16,14 +16,6 @@ app:defaultNavHost="true" app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" /> - - @empty ?attr/bottomSheetTint + true \ No newline at end of file diff --git a/app/src/main/res/values-night/styles.xml b/app/src/main/res/values-night/styles.xml index c0d939ffa..4701fdf3a 100644 --- a/app/src/main/res/values-night/styles.xml +++ b/app/src/main/res/values-night/styles.xml @@ -30,5 +30,8 @@ @color/darkColorSurface @android:color/transparent @style/Widget.Material3.CardView.Elevated + + @style/Widget.MaterialComponents.FloatingActionButton + \ No newline at end of file diff --git a/app/src/main/res/values-v27/styles_parents.xml b/app/src/main/res/values-v27/styles_parents.xml index 07c1726d5..10adeefca 100644 --- a/app/src/main/res/values-v27/styles_parents.xml +++ b/app/src/main/res/values-v27/styles_parents.xml @@ -29,6 +29,9 @@ @style/Widget.Material3.CardView.Elevated @color/bottomSheetColor @color/elevationOverlay + + @style/Widget.MaterialComponents.FloatingActionButton + \ No newline at end of file diff --git a/app/src/main/res/values/styles_parents.xml b/app/src/main/res/values/styles_parents.xml index 2322e064f..39b394f2b 100644 --- a/app/src/main/res/values/styles_parents.xml +++ b/app/src/main/res/values/styles_parents.xml @@ -17,6 +17,9 @@ @style/Widget.Material3.CardView.Elevated @color/bottomSheetColor @color/elevationOverlay + + @style/Widget.MaterialComponents.FloatingActionButton + \ No newline at end of file diff --git a/app/src/main/res/values-night/styles.xml b/app/src/main/res/values-night/styles.xml index 4701fdf3a..817b47b54 100644 --- a/app/src/main/res/values-night/styles.xml +++ b/app/src/main/res/values-night/styles.xml @@ -12,7 +12,7 @@ ~ See the GNU General Public License for more details. --> - + \ No newline at end of file diff --git a/app/src/main/res/values-v27/styles_parents.xml b/app/src/main/res/values-v27/styles_parents.xml index 10adeefca..1a85dbf2b 100644 --- a/app/src/main/res/values-v27/styles_parents.xml +++ b/app/src/main/res/values-v27/styles_parents.xml @@ -12,7 +12,7 @@ ~ See the GNU General Public License for more details. --> - + \ No newline at end of file From 1c9630635cb309f141621baa0f9110de72ecb2ea Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 21 Oct 2021 21:48:17 +0530 Subject: [PATCH 091/149] Fixed overlapping navbar with all themes --- .../player/circle/CirclePlayerFragment.kt | 6 +- .../player/full/FullPlayerFragment.kt | 2 + .../player/gradient/GradientPlayerFragment.kt | 5 +- .../player/peak/PeakPlayerFragment.kt | 2 + .../res/layout/fragment_classic_player.xml | 2 +- .../main/res/layout/fragment_peak_player.xml | 160 +++++++++--------- 6 files changed, 85 insertions(+), 92 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt index 5701f5288..a5be3ab7d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt @@ -33,10 +33,7 @@ import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentCirclePlayerBinding -import code.name.monkey.retromusic.extensions.accentColor -import code.name.monkey.retromusic.extensions.applyColor -import code.name.monkey.retromusic.extensions.hide -import code.name.monkey.retromusic.extensions.show +import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.base.goToAlbum @@ -96,6 +93,7 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player), binding.text.setOnClickListener { goToArtist(requireActivity()) } + binding.songInfo.drawAboveNavBar() } private fun setUpPlayerToolbar() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlayerFragment.kt index bb2eee369..450dc3b15 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlayerFragment.kt @@ -22,6 +22,7 @@ import androidx.appcompat.widget.Toolbar import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentFullBinding +import code.name.monkey.retromusic.extensions.drawAboveNavBar import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.extensions.whichFragment @@ -62,6 +63,7 @@ class FullPlayerFragment : AbsPlayerFragment(R.layout.fragment_full) { setUpPlayerToolbar() setupArtist() binding.nextSong.isSelected = true + binding.playbackControlsFragment.drawAboveNavBar() } private fun setupArtist() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt index 113b11060..b910b3ce7 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt @@ -40,9 +40,7 @@ import code.name.monkey.retromusic.databinding.FragmentGradientPlayerBinding import code.name.monkey.retromusic.db.PlaylistEntity import code.name.monkey.retromusic.db.SongEntity import code.name.monkey.retromusic.db.toSongEntity -import code.name.monkey.retromusic.extensions.hide -import code.name.monkey.retromusic.extensions.ripAlpha -import code.name.monkey.retromusic.extensions.show +import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.base.goToAlbum @@ -157,6 +155,7 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play binding.playbackControlsFragment.text.setOnClickListener { goToArtist(requireActivity()) } + binding.container.drawAboveNavBarWithPadding() } @SuppressLint("ClickableViewAccessibility") diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerFragment.kt index 3fe48ac44..5ac12a645 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerFragment.kt @@ -21,6 +21,7 @@ import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentPeakPlayerBinding +import code.name.monkey.retromusic.extensions.drawAboveNavBar import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment @@ -55,6 +56,7 @@ class PeakPlayerFragment : AbsPlayerFragment(R.layout.fragment_peak_player) { binding.text.setOnClickListener { goToArtist(requireActivity()) } + binding.root.drawAboveNavBar() } private fun setUpSubFragments() { diff --git a/app/src/main/res/layout/fragment_classic_player.xml b/app/src/main/res/layout/fragment_classic_player.xml index e1c681895..8a7a01d60 100644 --- a/app/src/main/res/layout/fragment_classic_player.xml +++ b/app/src/main/res/layout/fragment_classic_player.xml @@ -78,6 +78,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="bottom" + style="@style/BottomSheetStyle" android:theme="@style/TopCornerCardView" app:behavior_hideable="false" app:cardElevation="24dp" @@ -87,7 +88,6 @@ diff --git a/app/src/main/res/layout/fragment_peak_player.xml b/app/src/main/res/layout/fragment_peak_player.xml index 3b9dc78ce..9fa465015 100644 --- a/app/src/main/res/layout/fragment_peak_player.xml +++ b/app/src/main/res/layout/fragment_peak_player.xml @@ -17,105 +17,97 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" + android:background="?attr/colorSurface" android:clickable="true" android:focusable="true" android:orientation="vertical"> - - - - - + + - + - + - + - + - + - \ No newline at end of file From 68787f4f0842e8c66ba11870a54ab4d40fb43215 Mon Sep 17 00:00:00 2001 From: Hemanth S Date: Thu, 21 Oct 2021 23:21:19 +0530 Subject: [PATCH 092/149] Text and color changes --- .../code/name/monkey/retromusic/views/AccentIcon.kt | 13 ++++++++++++- app/src/main/res/layout/card_credit.xml | 2 +- app/src/main/res/layout/card_other.xml | 2 +- app/src/main/res/layout/card_retro_info.xml | 2 +- app/src/main/res/layout/card_social.xml | 2 +- 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/views/AccentIcon.kt b/app/src/main/java/code/name/monkey/retromusic/views/AccentIcon.kt index c48c3c417..fd442a272 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/AccentIcon.kt +++ b/app/src/main/java/code/name/monkey/retromusic/views/AccentIcon.kt @@ -4,7 +4,13 @@ import android.content.Context import android.content.res.ColorStateList import android.util.AttributeSet import androidx.appcompat.widget.AppCompatImageView +import androidx.core.content.ContextCompat +import code.name.monkey.appthemehelper.ThemeStore +import code.name.monkey.appthemehelper.util.VersionUtils +import code.name.monkey.retromusic.App +import code.name.monkey.retromusic.R import code.name.monkey.retromusic.extensions.accentColor +import code.name.monkey.retromusic.util.PreferenceUtil class AccentIcon @JvmOverloads constructor( context: Context, @@ -12,6 +18,11 @@ class AccentIcon @JvmOverloads constructor( defStyleAttr: Int = -1 ) : AppCompatImageView(context, attrs, defStyleAttr) { init { - imageTintList = ColorStateList.valueOf(accentColor()) + val color = if (PreferenceUtil.materialYou && VersionUtils.hasS()) { + ContextCompat.getColor(context, R.color.m3_accent_color) + } else { + ThemeStore.accentColor(context) + } + imageTintList = ColorStateList.valueOf(color) } } \ No newline at end of file diff --git a/app/src/main/res/layout/card_credit.xml b/app/src/main/res/layout/card_credit.xml index f7900700b..13bd142f5 100644 --- a/app/src/main/res/layout/card_credit.xml +++ b/app/src/main/res/layout/card_credit.xml @@ -21,7 +21,7 @@ android:paddingEnd="?attr/listPreferredItemPaddingEnd" android:paddingBottom="?attr/listPreferredItemPaddingEnd" android:text="@string/credit_title" - android:textAppearance="@style/TextViewOverline" + android:textAppearance="@style/TextViewNormal" android:textColor="?android:attr/textColorSecondary" app:layout_constrainedWidth="true" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/card_other.xml b/app/src/main/res/layout/card_other.xml index 2a991b6af..987e48307 100644 --- a/app/src/main/res/layout/card_other.xml +++ b/app/src/main/res/layout/card_other.xml @@ -20,7 +20,7 @@ android:paddingEnd="?attr/listPreferredItemPaddingEnd" android:paddingBottom="?attr/listPreferredItemPaddingEnd" android:text="@string/others" - android:textAppearance="@style/TextViewOverline" + android:textAppearance="@style/TextViewNormal" android:textColor="?colorAccent" app:layout_constrainedWidth="true" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/card_retro_info.xml b/app/src/main/res/layout/card_retro_info.xml index 1e9018665..f56702068 100644 --- a/app/src/main/res/layout/card_retro_info.xml +++ b/app/src/main/res/layout/card_retro_info.xml @@ -20,7 +20,7 @@ android:paddingEnd="?attr/listPreferredItemPaddingEnd" android:paddingBottom="?attr/listPreferredItemPaddingEnd" android:text="@string/support_development" - android:textAppearance="@style/TextViewOverline" + android:textAppearance="@style/TextViewNormal" android:textColor="?android:attr/textColorSecondary" app:layout_constrainedWidth="true" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/card_social.xml b/app/src/main/res/layout/card_social.xml index 7eebc702d..0eade5e1d 100644 --- a/app/src/main/res/layout/card_social.xml +++ b/app/src/main/res/layout/card_social.xml @@ -20,7 +20,7 @@ android:paddingEnd="?attr/listPreferredItemPaddingEnd" android:paddingBottom="?attr/listPreferredItemPaddingEnd" android:text="@string/social" - android:textAppearance="@style/TextViewOverline" + android:textAppearance="@style/TextViewNormal" android:textColor="?colorAccent" app:layout_constrainedWidth="true" app:layout_constraintEnd_toEndOf="parent" From d8aaa5a21bb15bf2af4d95f20c3a36d0948d3349 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Fri, 22 Oct 2021 10:16:06 +0530 Subject: [PATCH 093/149] Added MD3 accent to all preferences --- app/src/main/res/layout/fragment_main_recycler.xml | 1 + .../common/prefs/supportv7/ATEPreferenceCategory.kt | 12 +++++++++++- .../common/prefs/supportv7/ATESeekBarPreference.kt | 11 ++++++++++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layout/fragment_main_recycler.xml b/app/src/main/res/layout/fragment_main_recycler.xml index 1c1478b7f..c1d2df149 100644 --- a/app/src/main/res/layout/fragment_main_recycler.xml +++ b/app/src/main/res/layout/fragment_main_recycler.xml @@ -84,5 +84,6 @@ android:layout_height="wrap_content" android:layout_gravity="bottom|right" app:srcCompat="@drawable/ic_shuffle" + style="@style/Widget.Material3.FloatingActionButton.Primary" android:layout_marginHorizontal="16dp"/> \ No newline at end of file diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATEPreferenceCategory.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATEPreferenceCategory.kt index e8dccf0a3..c2a890a35 100644 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATEPreferenceCategory.kt +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATEPreferenceCategory.kt @@ -17,9 +17,12 @@ package code.name.monkey.appthemehelper.common.prefs.supportv7 import android.content.Context import android.util.AttributeSet import android.widget.TextView +import androidx.core.content.ContextCompat import androidx.preference.PreferenceCategory import androidx.preference.PreferenceViewHolder +import code.name.monkey.appthemehelper.R import code.name.monkey.appthemehelper.ThemeStore +import code.name.monkey.appthemehelper.util.VersionUtils class ATEPreferenceCategory @JvmOverloads constructor( context: Context?, @@ -31,6 +34,13 @@ class ATEPreferenceCategory @JvmOverloads constructor( override fun onBindViewHolder(holder: PreferenceViewHolder) { super.onBindViewHolder(holder) val title = holder.itemView.findViewById(android.R.id.title) - title.setTextColor(ThemeStore.accentColor(context)) + title.setTextColor( + // Set MD3 accent if MD3 is enabled or in-app accent otherwise + if (ThemeStore.isMD3Enabled(context) && VersionUtils.hasS()) { + ContextCompat.getColor(context, R.color.m3_accent_color) + } else { + ThemeStore.accentColor(context) + } + ) } } diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATESeekBarPreference.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATESeekBarPreference.kt index 098cb8408..7963f5fa1 100644 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATESeekBarPreference.kt +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATESeekBarPreference.kt @@ -5,6 +5,7 @@ import android.text.Editable import android.util.AttributeSet import android.widget.SeekBar import android.widget.TextView +import androidx.core.content.ContextCompat import androidx.core.graphics.BlendModeColorFilterCompat import androidx.core.graphics.BlendModeCompat import androidx.core.widget.doAfterTextChanged @@ -14,6 +15,7 @@ import code.name.monkey.appthemehelper.R import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.TintHelper +import code.name.monkey.appthemehelper.util.VersionUtils class ATESeekBarPreference @JvmOverloads constructor( context: Context, @@ -43,7 +45,14 @@ class ATESeekBarPreference @JvmOverloads constructor( override fun onBindViewHolder(view: PreferenceViewHolder) { super.onBindViewHolder(view) val seekBar = view.findViewById(R.id.seekbar) as SeekBar - TintHelper.setTintAuto(seekBar, ThemeStore.accentColor(context), false) + TintHelper.setTintAuto( + seekBar, // Set MD3 accent if MD3 is enabled or in-app accent otherwise + if (ThemeStore.isMD3Enabled(context) && VersionUtils.hasS()) { + ContextCompat.getColor(context, R.color.m3_accent_color) + } else { + ThemeStore.accentColor(context) + }, false + ) (view.findViewById(R.id.seekbar_value) as TextView).apply { appendUnit(editableText) doAfterTextChanged { From 65d52776f84f39b76a11365e8b0defa0ae105103 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Fri, 22 Oct 2021 12:14:53 +0530 Subject: [PATCH 094/149] Fixed navbar overlapping in settings --- .../retromusic/extensions/ViewExtensions.kt | 29 +++++++++++++++---- .../fragments/settings/AbsSettingsFragment.kt | 10 +++++-- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt index 7d690ec21..a2c0a9e0f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt @@ -27,10 +27,8 @@ import android.widget.EditText import androidx.annotation.LayoutRes import androidx.core.animation.doOnEnd import androidx.core.animation.doOnStart -import androidx.core.view.ViewCompat -import androidx.core.view.WindowInsetsCompat +import androidx.core.view.* import androidx.core.view.WindowInsetsCompat.Type.navigationBars -import androidx.core.view.updateLayoutParams import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.util.PreferenceUtil @@ -138,11 +136,13 @@ fun ShapeableImageView.setCircleShape(boolean: Boolean) { * This will draw our view above the navigation bar instead of behind it by adding margins. */ fun View.drawAboveNavBar() { + // Create a snapshot of the view's margin state + val initialMargin = recordInitialMarginForView(this) ViewCompat.setOnApplyWindowInsetsListener( (this) ) { v: View, insets: WindowInsetsCompat -> v.updateLayoutParams { - bottomMargin = + bottomMargin = initialMargin.bottom + insets.getInsets(navigationBars()).bottom } insets @@ -153,11 +153,13 @@ fun View.drawAboveNavBar() { * This will draw our view above the navigation bar instead of behind it by adding padding. */ fun View.drawAboveNavBarWithPadding() { + val initialPadding = recordInitialPaddingForView(this) + ViewCompat.setOnApplyWindowInsetsListener( (this) ) { v: View, insets: WindowInsetsCompat -> val navBarHeight = insets.getInsets(navigationBars()).bottom - v.updatePadding(bottom = navBarHeight) + v.updatePadding(bottom = initialPadding.bottom + navBarHeight) insets } requestApplyInsetsWhenAttached() @@ -179,4 +181,19 @@ fun View.requestApplyInsetsWhenAttached() { override fun onViewDetachedFromWindow(v: View) = Unit }) } -} \ No newline at end of file +} + + +data class InitialMargin(val left: Int, val top: Int, + val right: Int, val bottom: Int) + +private fun recordInitialMarginForView(view: View) = InitialMargin( + view.marginLeft, view.marginTop, view.marginRight, view.marginBottom) + + + +data class InitialPadding(val left: Int, val top: Int, + val right: Int, val bottom: Int) + +private fun recordInitialPaddingForView(view: View) = InitialMargin( + view.paddingLeft, view.paddingTop, view.paddingRight, view.paddingBottom) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt index 075ec706f..94775a273 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt @@ -19,6 +19,7 @@ import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.View import android.widget.Toast +import androidx.core.view.updatePadding import androidx.preference.ListPreference import androidx.preference.Preference import androidx.preference.PreferenceManager @@ -26,6 +27,7 @@ import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEPreferenceFragm import code.name.monkey.retromusic.activities.OnThemeChangedListener import code.name.monkey.retromusic.preferences.* import code.name.monkey.retromusic.util.NavigationUtil +import code.name.monkey.retromusic.util.RetroUtil /** * @author Hemanth S (h4h13). @@ -65,8 +67,12 @@ abstract class AbsSettingsFragment : ATEPreferenceFragmentCompat() { super.onViewCreated(view, savedInstanceState) setDivider(ColorDrawable(Color.TRANSPARENT)) listView.overScrollMode = View.OVER_SCROLL_NEVER - listView.setPadding(0, 0, 0, 0) - listView.setPaddingRelative(0, 0, 0, 0) + // This is a workaround as CollapsingToolbarLayout consumes insets and + // insets are not passed to child views + // https://github.com/material-components/material-components-android/issues/1310 + if (!RetroUtil.isLandscape()) { + listView.updatePadding(bottom = RetroUtil.getNavigationBarHeight()) + } invalidateSettings() } From 94ccecc012e567aa7492b8527994572751911d91 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Fri, 22 Oct 2021 20:23:23 +0530 Subject: [PATCH 095/149] Fixed overlapping navbar in landscape --- .../retromusic/activities/MainActivity.kt | 2 + .../base/AbsSlidingMusicPanelActivity.kt | 5 ++ .../retromusic/extensions/InsetsExtensions.kt | 2 +- .../retromusic/extensions/ViewExtensions.kt | 65 ++++++++++++++----- .../fragments/base/AbsRecyclerViewFragment.kt | 2 + .../fragments/folder/FoldersFragment.kt | 2 + .../retromusic/fragments/home/HomeFragment.kt | 3 + .../player/gradient/GradientPlayerFragment.kt | 9 ++- .../fragments/player/normal/PlayerFragment.kt | 3 +- .../fragments/search/SearchFragment.kt | 1 + .../main/res/layout-land/fragment_player.xml | 1 + .../res/layout/fragment_main_recycler.xml | 3 +- 12 files changed, 72 insertions(+), 26 deletions(-) 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 83dafade7..004fa1fb0 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 @@ -27,6 +27,7 @@ import code.name.monkey.retromusic.* import code.name.monkey.retromusic.activities.base.AbsCastActivity import code.name.monkey.retromusic.databinding.SlidingMusicPanelLayoutBinding import code.name.monkey.retromusic.extensions.currentFragment +import code.name.monkey.retromusic.extensions.drawNextToNavbar import code.name.monkey.retromusic.extensions.extra import code.name.monkey.retromusic.extensions.findNavController import code.name.monkey.retromusic.fragments.base.AbsRecyclerViewFragment @@ -39,6 +40,7 @@ import code.name.monkey.retromusic.repository.PlaylistSongsLoader import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.AppRater import code.name.monkey.retromusic.util.PreferenceUtil +import com.google.android.material.appbar.AppBarLayout import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.launch import org.koin.android.ext.android.get diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt index 168a7e960..64fbc2dbd 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt @@ -55,6 +55,7 @@ import code.name.monkey.retromusic.fragments.queue.PlayingQueueFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.CategoryInfo import code.name.monkey.retromusic.util.PreferenceUtil +import code.name.monkey.retromusic.util.RetroUtil import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomsheet.BottomSheetBehavior.* import org.koin.androidx.viewmodel.ext.android.viewModel @@ -121,7 +122,11 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { windowInsets = insets insets } + //binding.fragmentContainer.drawAboveNavBar() binding.bottomNavigationView.drawAboveNavBarWithPadding() + if (RetroUtil.isLandscape()) { + binding.slidingPanel.drawAboveNavBarWithPadding(true) + } chooseFragmentForTheme() setupSlidingUpPanel() setupBottomSheet() diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/InsetsExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/InsetsExtensions.kt index 48a605546..b24168a33 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/InsetsExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/InsetsExtensions.kt @@ -3,5 +3,5 @@ package code.name.monkey.retromusic.extensions import androidx.core.view.WindowInsetsCompat fun WindowInsetsCompat?.safeGetBottomInsets(): Int { - return this?.getInsets(WindowInsetsCompat.Type.navigationBars())?.bottom ?: 0 + return this?.getInsets(WindowInsetsCompat.Type.systemBars())?.bottom ?: 0 } diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt index a2c0a9e0f..de5873961 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt @@ -33,6 +33,7 @@ import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.util.PreferenceUtil import com.afollestad.materialdialogs.utils.MDUtil.updatePadding +import com.google.android.material.appbar.AppBarLayout import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.imageview.ShapeableImageView import com.google.android.material.shape.ShapeAppearanceModel @@ -140,27 +141,34 @@ fun View.drawAboveNavBar() { val initialMargin = recordInitialMarginForView(this) ViewCompat.setOnApplyWindowInsetsListener( (this) - ) { v: View, insets: WindowInsetsCompat -> - v.updateLayoutParams { - bottomMargin = initialMargin.bottom + - insets.getInsets(navigationBars()).bottom + ) { _: View, windowInsets: WindowInsetsCompat -> + val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) + // Apply the insets as a margin to the view. + updateLayoutParams { + leftMargin = initialMargin.left + insets.left + bottomMargin = initialMargin.bottom + insets.bottom + rightMargin = initialMargin.right + insets.right } - insets + windowInsets } } /** * This will draw our view above the navigation bar instead of behind it by adding padding. */ -fun View.drawAboveNavBarWithPadding() { +fun View.drawAboveNavBarWithPadding(consume: Boolean = false) { val initialPadding = recordInitialPaddingForView(this) ViewCompat.setOnApplyWindowInsetsListener( (this) - ) { v: View, insets: WindowInsetsCompat -> - val navBarHeight = insets.getInsets(navigationBars()).bottom - v.updatePadding(bottom = initialPadding.bottom + navBarHeight) - insets + ) { v: View, windowInsets: WindowInsetsCompat -> + val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.updatePadding( + left = initialPadding.left + insets.left, + bottom = initialPadding.bottom + insets.bottom, + right = initialPadding.right + insets.right + ) + if (consume) WindowInsetsCompat.CONSUMED else windowInsets } requestApplyInsetsWhenAttached() } @@ -183,17 +191,38 @@ fun View.requestApplyInsetsWhenAttached() { } } +fun AppBarLayout.drawNextToNavbar() { + val initialMargin = recordInitialMarginForView(this) -data class InitialMargin(val left: Int, val top: Int, - val right: Int, val bottom: Int) + ViewCompat.setOnApplyWindowInsetsListener( + (this) + ) { v: View, windowInsets: WindowInsetsCompat -> + val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.updatePadding( + top = initialMargin.top + insets.top, + left = initialMargin.left + insets.left, + right = initialMargin.right + insets.right + ) + windowInsets + } + requestApplyInsetsWhenAttached() +} + +data class InitialMargin( + val left: Int, val top: Int, + val right: Int, val bottom: Int +) private fun recordInitialMarginForView(view: View) = InitialMargin( - view.marginLeft, view.marginTop, view.marginRight, view.marginBottom) + view.marginLeft, view.marginTop, view.marginRight, view.marginBottom +) +data class InitialPadding( + val left: Int, val top: Int, + val right: Int, val bottom: Int +) -data class InitialPadding(val left: Int, val top: Int, - val right: Int, val bottom: Int) - -private fun recordInitialPaddingForView(view: View) = InitialMargin( - view.paddingLeft, view.paddingTop, view.paddingRight, view.paddingBottom) +private fun recordInitialPaddingForView(view: View) = InitialPadding( + view.paddingLeft, view.paddingTop, view.paddingRight, view.paddingBottom +) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt index cda1b1a3b..0e21dde29 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt @@ -34,6 +34,7 @@ import code.name.monkey.retromusic.dialogs.CreatePlaylistDialog import code.name.monkey.retromusic.dialogs.ImportPlaylistDialog import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.extensions.dip +import code.name.monkey.retromusic.extensions.drawNextToNavbar import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.util.ThemedFastScroller.create import com.google.android.material.shape.MaterialShapeDrawable @@ -94,6 +95,7 @@ abstract class AbsRecyclerViewFragment
, LM : Recycle bottomMargin = it } }) + binding.appBarLayout.drawNextToNavbar() } open fun onShuffleClicked() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt index 312b2f4f4..68bcb2825 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt @@ -40,6 +40,7 @@ import code.name.monkey.retromusic.adapter.Storage import code.name.monkey.retromusic.adapter.StorageAdapter import code.name.monkey.retromusic.adapter.StorageClickListener import code.name.monkey.retromusic.databinding.FragmentFolderBinding +import code.name.monkey.retromusic.extensions.drawNextToNavbar import code.name.monkey.retromusic.extensions.surfaceColor import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment import code.name.monkey.retromusic.fragments.folder.FoldersFragment.ListPathsAsyncTask.OnPathsListedCallback @@ -123,6 +124,7 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder), } } }) + binding.appBarLayout.drawNextToNavbar() } private fun setUpTitle() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt index f7409d685..0d7bd31a9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt @@ -37,11 +37,13 @@ import code.name.monkey.retromusic.databinding.FragmentBannerHomeBinding import code.name.monkey.retromusic.databinding.FragmentHomeBinding import code.name.monkey.retromusic.dialogs.CreatePlaylistDialog import code.name.monkey.retromusic.dialogs.ImportPlaylistDialog +import code.name.monkey.retromusic.extensions.drawNextToNavbar import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.util.PreferenceUtil import com.google.android.gms.cast.framework.CastButtonFactory +import com.google.android.material.appbar.AppBarLayout import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.transition.MaterialSharedAxis @@ -74,6 +76,7 @@ class HomeFragment : view.doOnPreDraw { startPostponedEnterTransition() } binding.appBarLayout.statusBarForeground = MaterialShapeDrawable.createWithElevationOverlay(requireContext()) + binding.appBarLayout.drawNextToNavbar() } private fun setupListeners() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt index b910b3ce7..7f24e4cce 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt @@ -29,6 +29,7 @@ import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.Toolbar import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.view.ViewCompat +import androidx.core.view.updatePadding import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -86,11 +87,8 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play private val bottomSheetCallbackList = object : BottomSheetCallback() { override fun onSlide(bottomSheet: View, slideOffset: Float) { mainActivity.getBottomSheetBehavior().setAllowDragging(false) - binding.playerQueueSheet.setPadding( - binding.playerQueueSheet.paddingLeft, - (slideOffset * binding.statusBarLayout.statusBar.height).toInt(), - binding.playerQueueSheet.paddingRight, - binding.playerQueueSheet.paddingBottom + binding.playerQueueSheet.updatePadding( + bottom = (slideOffset * binding.statusBarLayout.statusBar.height).toInt() ) } @@ -156,6 +154,7 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play goToArtist(requireActivity()) } binding.container.drawAboveNavBarWithPadding() + binding.playbackControlsFragment.root.drawAboveNavBar() } @SuppressLint("ClickableViewAccessibility") diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt index 54ee37cca..bf7053137 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt @@ -30,6 +30,7 @@ import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.PreferenceUtil +import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import code.name.monkey.retromusic.views.DrawableGradient @@ -121,7 +122,7 @@ class PlayerFragment : AbsPlayerFragment(R.layout.fragment_player) { _binding = FragmentPlayerBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() - playerToolbar().drawAboveNavBar() + //playerToolbar().drawAboveNavBar() } override fun onDestroyView() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/search/SearchFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/search/SearchFragment.kt index fb5e4cb3f..fae6ab4be 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/search/SearchFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/search/SearchFragment.kt @@ -45,6 +45,7 @@ import com.google.android.material.transition.MaterialSharedAxis import java.util.* import kotlin.collections.ArrayList + class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWatcher, ChipGroup.OnCheckedChangeListener { companion object { diff --git a/app/src/main/res/layout-land/fragment_player.xml b/app/src/main/res/layout-land/fragment_player.xml index a982f11bb..e447c6198 100755 --- a/app/src/main/res/layout-land/fragment_player.xml +++ b/app/src/main/res/layout-land/fragment_player.xml @@ -50,6 +50,7 @@ diff --git a/app/src/main/res/layout/fragment_main_recycler.xml b/app/src/main/res/layout/fragment_main_recycler.xml index c1d2df149..010d7fe1e 100644 --- a/app/src/main/res/layout/fragment_main_recycler.xml +++ b/app/src/main/res/layout/fragment_main_recycler.xml @@ -82,8 +82,9 @@ android:id="@+id/shuffle_button" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="bottom|right" + android:layout_gravity="bottom|end" app:srcCompat="@drawable/ic_shuffle" + android:contentDescription="@string/shuffle" style="@style/Widget.Material3.FloatingActionButton.Primary" android:layout_marginHorizontal="16dp"/> \ No newline at end of file From f3ebd345311732a5ceb98a53b25d0b966e028f05 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Fri, 22 Oct 2021 20:31:43 +0530 Subject: [PATCH 096/149] Fixed miniplayer cutting fragment_container content --- .../base/AbsSlidingMusicPanelActivity.kt | 5 +++-- .../retromusic/extensions/ViewExtensions.kt | 19 +++++++++++++++++-- .../player/adaptive/AdaptiveFragment.kt | 4 ++-- .../player/blur/BlurPlayerFragment.kt | 4 ++-- .../fragments/player/card/CardFragment.kt | 4 ++-- .../player/cardblur/CardBlurFragment.kt | 4 ++-- .../player/circle/CirclePlayerFragment.kt | 2 +- .../fragments/player/color/ColorFragment.kt | 4 ++-- .../fragments/player/fit/FitFragment.kt | 4 ++-- .../player/flat/FlatPlayerFragment.kt | 4 ++-- .../player/full/FullPlayerFragment.kt | 4 ++-- .../player/gradient/GradientPlayerFragment.kt | 4 ++-- .../player/material/MaterialFragment.kt | 4 ++-- .../fragments/player/normal/PlayerFragment.kt | 2 -- .../player/peak/PeakPlayerFragment.kt | 4 ++-- .../player/plain/PlainPlayerFragment.kt | 4 ++-- .../player/simple/SimplePlayerFragment.kt | 4 ++-- .../player/tiny/TinyPlayerFragment.kt | 4 ++-- 18 files changed, 49 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt index 64fbc2dbd..e60d655c0 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt @@ -123,10 +123,11 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { insets } //binding.fragmentContainer.drawAboveNavBar() - binding.bottomNavigationView.drawAboveNavBarWithPadding() + binding.bottomNavigationView.drawAboveSystemBarsWithPadding() if (RetroUtil.isLandscape()) { - binding.slidingPanel.drawAboveNavBarWithPadding(true) + binding.slidingPanel.drawAboveSystemBarsWithPadding(true) } + binding.fragmentContainer.addBottomInsets() chooseFragmentForTheme() setupSlidingUpPanel() setupBottomSheet() diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt index de5873961..050fb1e89 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt @@ -136,7 +136,7 @@ fun ShapeableImageView.setCircleShape(boolean: Boolean) { /** * This will draw our view above the navigation bar instead of behind it by adding margins. */ -fun View.drawAboveNavBar() { +fun View.drawAboveSystemBars() { // Create a snapshot of the view's margin state val initialMargin = recordInitialMarginForView(this) ViewCompat.setOnApplyWindowInsetsListener( @@ -156,7 +156,7 @@ fun View.drawAboveNavBar() { /** * This will draw our view above the navigation bar instead of behind it by adding padding. */ -fun View.drawAboveNavBarWithPadding(consume: Boolean = false) { +fun View.drawAboveSystemBarsWithPadding(consume: Boolean = false) { val initialPadding = recordInitialPaddingForView(this) ViewCompat.setOnApplyWindowInsetsListener( @@ -208,6 +208,21 @@ fun AppBarLayout.drawNextToNavbar() { requestApplyInsetsWhenAttached() } +fun View.addBottomInsets() { + // Create a snapshot of the view's margin state + val initialMargin = recordInitialMarginForView(this) + ViewCompat.setOnApplyWindowInsetsListener( + (this) + ) { _: View, windowInsets: WindowInsetsCompat -> + val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) + // Apply the insets as a margin to the view. + updateLayoutParams { + bottomMargin = initialMargin.bottom + insets.bottom + } + windowInsets + } +} + data class InitialMargin( val left: Int, val top: Int, val right: Int, val bottom: Int diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt index 61a1b5a4b..225d7b208 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt @@ -21,7 +21,7 @@ import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentAdaptivePlayerBinding -import code.name.monkey.retromusic.extensions.drawAboveNavBar +import code.name.monkey.retromusic.extensions.drawAboveSystemBars import code.name.monkey.retromusic.extensions.surfaceColor import code.name.monkey.retromusic.extensions.textColorPrimary import code.name.monkey.retromusic.extensions.textColorSecondary @@ -47,7 +47,7 @@ class AdaptiveFragment : AbsPlayerFragment(R.layout.fragment_adaptive_player) { _binding = FragmentAdaptivePlayerBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() - binding.root.drawAboveNavBar() + binding.root.drawAboveSystemBars() } private fun setUpSubFragments() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt index 95ce6c50b..aec5f2e57 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt @@ -24,7 +24,7 @@ import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.NEW_BLUR_AMOUNT import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentBlurBinding -import code.name.monkey.retromusic.extensions.drawAboveNavBar +import code.name.monkey.retromusic.extensions.drawAboveSystemBars import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.glide.BlurTransformation @@ -56,7 +56,7 @@ class BlurPlayerFragment : AbsPlayerFragment(R.layout.fragment_blur), _binding = FragmentBlurBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() - binding.playerToolbar.drawAboveNavBar() + binding.playerToolbar.drawAboveSystemBars() } private fun setUpSubFragments() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardFragment.kt index c5650883b..3afb91669 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardFragment.kt @@ -21,7 +21,7 @@ import androidx.appcompat.widget.Toolbar import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentCardPlayerBinding -import code.name.monkey.retromusic.extensions.drawAboveNavBar +import code.name.monkey.retromusic.extensions.drawAboveSystemBars import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment @@ -83,7 +83,7 @@ class CardFragment : AbsPlayerFragment(R.layout.fragment_card_player) { _binding = FragmentCardPlayerBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() - (binding.playbackControlsFragment.parent as View).drawAboveNavBar() + (binding.playbackControlsFragment.parent as View).drawAboveSystemBars() } private fun setUpSubFragments() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt index 52763f67c..bec78c7e5 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt @@ -24,7 +24,7 @@ import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.NEW_BLUR_AMOUNT import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentCardBlurPlayerBinding -import code.name.monkey.retromusic.extensions.drawAboveNavBar +import code.name.monkey.retromusic.extensions.drawAboveSystemBars import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment @@ -94,7 +94,7 @@ class CardBlurFragment : AbsPlayerFragment(R.layout.fragment_card_blur_player), _binding = FragmentCardBlurPlayerBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() - binding.cardContainer?.drawAboveNavBar() + binding.cardContainer?.drawAboveSystemBars() } private fun setUpSubFragments() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt index a5be3ab7d..4d9826a38 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt @@ -93,7 +93,7 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player), binding.text.setOnClickListener { goToArtist(requireActivity()) } - binding.songInfo.drawAboveNavBar() + binding.songInfo.drawAboveSystemBars() } private fun setUpPlayerToolbar() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt index 1ac473f2d..5c58ba4c6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt @@ -24,7 +24,7 @@ import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentColorPlayerBinding -import code.name.monkey.retromusic.extensions.drawAboveNavBar +import code.name.monkey.retromusic.extensions.drawAboveSystemBars import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -115,7 +115,7 @@ class ColorFragment : AbsPlayerFragment(R.layout.fragment_color_player) { val playerAlbumCoverFragment = childFragmentManager.findFragmentById(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment playerAlbumCoverFragment.setCallbacks(this) - playerToolbar().drawAboveNavBar() + playerToolbar().drawAboveSystemBars() } private fun setUpSubFragments() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt index ad33baaac..3400f28fb 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt @@ -21,7 +21,7 @@ import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentFitBinding -import code.name.monkey.retromusic.extensions.drawAboveNavBar +import code.name.monkey.retromusic.extensions.drawAboveSystemBars import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -86,7 +86,7 @@ class FitFragment : AbsPlayerFragment(R.layout.fragment_fit) { _binding = FragmentFitBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() - playerToolbar().drawAboveNavBar() + playerToolbar().drawAboveSystemBars() } private fun setUpSubFragments() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt index 660748409..2d357fb83 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt @@ -26,7 +26,7 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentFlatPlayerBinding -import code.name.monkey.retromusic.extensions.drawAboveNavBar +import code.name.monkey.retromusic.extensions.drawAboveSystemBars import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -91,7 +91,7 @@ class FlatPlayerFragment : AbsPlayerFragment(R.layout.fragment_flat_player) { _binding = FragmentFlatPlayerBinding.bind(view) setUpPlayerToolbar() setUpSubFragments() - binding.playbackControlsFragment.drawAboveNavBar() + binding.playbackControlsFragment.drawAboveSystemBars() } override fun onShow() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlayerFragment.kt index 450dc3b15..11d843dbc 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlayerFragment.kt @@ -22,7 +22,7 @@ import androidx.appcompat.widget.Toolbar import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentFullBinding -import code.name.monkey.retromusic.extensions.drawAboveNavBar +import code.name.monkey.retromusic.extensions.drawAboveSystemBars import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.extensions.whichFragment @@ -63,7 +63,7 @@ class FullPlayerFragment : AbsPlayerFragment(R.layout.fragment_full) { setUpPlayerToolbar() setupArtist() binding.nextSong.isSelected = true - binding.playbackControlsFragment.drawAboveNavBar() + binding.playbackControlsFragment.drawAboveSystemBars() } private fun setupArtist() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt index 7f24e4cce..f43390882 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt @@ -153,8 +153,8 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play binding.playbackControlsFragment.text.setOnClickListener { goToArtist(requireActivity()) } - binding.container.drawAboveNavBarWithPadding() - binding.playbackControlsFragment.root.drawAboveNavBar() + binding.container.drawAboveSystemBarsWithPadding() + binding.playbackControlsFragment.root.drawAboveSystemBars() } @SuppressLint("ClickableViewAccessibility") diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialFragment.kt index fad08eefd..b70a38b9c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialFragment.kt @@ -21,7 +21,7 @@ import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentMaterialBinding -import code.name.monkey.retromusic.extensions.drawAboveNavBar +import code.name.monkey.retromusic.extensions.drawAboveSystemBars import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment @@ -94,7 +94,7 @@ class MaterialFragment : AbsPlayerFragment(R.layout.fragment_material) { _binding = FragmentMaterialBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() - playerToolbar().drawAboveNavBar() + playerToolbar().drawAboveSystemBars() } private fun setUpSubFragments() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt index bf7053137..9f8ac58eb 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt @@ -24,13 +24,11 @@ import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentPlayerBinding -import code.name.monkey.retromusic.extensions.drawAboveNavBar import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import code.name.monkey.retromusic.views.DrawableGradient diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerFragment.kt index 5ac12a645..9b2b0b119 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerFragment.kt @@ -21,7 +21,7 @@ import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentPeakPlayerBinding -import code.name.monkey.retromusic.extensions.drawAboveNavBar +import code.name.monkey.retromusic.extensions.drawAboveSystemBars import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment @@ -56,7 +56,7 @@ class PeakPlayerFragment : AbsPlayerFragment(R.layout.fragment_peak_player) { binding.text.setOnClickListener { goToArtist(requireActivity()) } - binding.root.drawAboveNavBar() + binding.root.drawAboveSystemBars() } private fun setUpSubFragments() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlayerFragment.kt index 796592c42..83d825b1f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlayerFragment.kt @@ -21,7 +21,7 @@ import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentPlainPlayerBinding -import code.name.monkey.retromusic.extensions.drawAboveNavBar +import code.name.monkey.retromusic.extensions.drawAboveSystemBars import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.base.goToAlbum import code.name.monkey.retromusic.fragments.base.goToArtist @@ -85,7 +85,7 @@ class PlainPlayerFragment : AbsPlayerFragment(R.layout.fragment_plain_player) { binding.text.setOnClickListener { goToArtist(requireActivity()) } - playerToolbar().drawAboveNavBar() + playerToolbar().drawAboveSystemBars() } private fun setUpSubFragments() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlayerFragment.kt index 10ac31aba..f4f434ca0 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlayerFragment.kt @@ -21,7 +21,7 @@ import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentSimplePlayerBinding -import code.name.monkey.retromusic.extensions.drawAboveNavBar +import code.name.monkey.retromusic.extensions.drawAboveSystemBars import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -52,7 +52,7 @@ class SimplePlayerFragment : AbsPlayerFragment(R.layout.fragment_simple_player) _binding = FragmentSimplePlayerBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() - playerToolbar().drawAboveNavBar() + playerToolbar().drawAboveSystemBars() } private fun setUpSubFragments() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt index a7393646d..80ba1c564 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt @@ -27,7 +27,7 @@ import androidx.appcompat.widget.Toolbar import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentTinyPlayerBinding -import code.name.monkey.retromusic.extensions.drawAboveNavBar +import code.name.monkey.retromusic.extensions.drawAboveSystemBars import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment @@ -148,7 +148,7 @@ class TinyPlayerFragment : AbsPlayerFragment(R.layout.fragment_tiny_player), binding.text.setOnClickListener { goToArtist(requireActivity()) } - playerToolbar().drawAboveNavBar() + playerToolbar().drawAboveSystemBars() } private fun setUpSubFragments() { From e247e56aeed8af491d40f0fb8b2f13cdd544a578 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Fri, 22 Oct 2021 21:22:57 +0530 Subject: [PATCH 097/149] Fixed bottom sheet not dragging when bottom navigation was invisible --- .../activities/base/AbsSlidingMusicPanelActivity.kt | 5 +++++ app/src/main/res/values/styles.xml | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt index e60d655c0..e1cb26e4d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt @@ -20,6 +20,7 @@ import android.view.View import android.view.ViewGroup import android.view.ViewTreeObserver import android.widget.FrameLayout +import androidx.core.animation.doOnEnd import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.isVisible @@ -311,6 +312,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { bottomSheetBehavior.peekHeightAnimate(heightOfBarWithTabs) bottomNavAnimator?.end() bottomNavAnimator = binding.bottomNavigationView.translateYAnimate(0F) + binding.bottomNavigationView.bringToFront() libraryViewModel.setFabMargin(heightOfBarWithTabs - windowInsets.safeGetBottomInsets()) } else { println("Details") @@ -318,6 +320,9 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { bottomNavAnimator?.end() bottomNavAnimator = getBottomNavigationView().translateYAnimate(dip(R.dimen.bottom_nav_height).toFloat()) + bottomNavAnimator?.doOnEnd { + binding.slidingPanel.bringToFront() + } libraryViewModel.setFabMargin(heightOfBar - windowInsets.safeGetBottomInsets()) } } diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index d28fc9c10..dadb45e84 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -191,7 +191,7 @@ \ No newline at end of file diff --git a/app/src/main/res/values-v31/styles.xml b/app/src/main/res/values-v31/styles.xml index 91f9f3745..fd8619d1c 100644 --- a/app/src/main/res/values-v31/styles.xml +++ b/app/src/main/res/values-v31/styles.xml @@ -7,6 +7,7 @@ @style/MaterialButtonTheme @color/transparent @color/transparent + false \ No newline at end of file diff --git a/app/src/main/res/values-night/styles.xml b/app/src/main/res/values-night/styles.xml index 424eb2c9b..7ab94a344 100644 --- a/app/src/main/res/values-night/styles.xml +++ b/app/src/main/res/values-night/styles.xml @@ -12,7 +12,7 @@ ~ See the GNU General Public License for more details. --> - + \ No newline at end of file diff --git a/app/src/main/res/values-v27/styles_parents.xml b/app/src/main/res/values-v27/styles_parents.xml index 1a85dbf2b..2aea8a247 100644 --- a/app/src/main/res/values-v27/styles_parents.xml +++ b/app/src/main/res/values-v27/styles_parents.xml @@ -33,6 +33,7 @@ @style/Widget.MaterialComponents.FloatingActionButton false + @drawable/popup_background \ No newline at end of file diff --git a/app/src/main/res/values-v31/styles.xml b/app/src/main/res/values-v31/styles.xml index fd8619d1c..f8479c491 100644 --- a/app/src/main/res/values-v31/styles.xml +++ b/app/src/main/res/values-v31/styles.xml @@ -8,6 +8,7 @@ @color/transparent @color/transparent false + @drawable/popup_background - - - - -