From 1c0a42680590ebe4ed3732ce1198a474c8350220 Mon Sep 17 00:00:00 2001 From: Hemanth S Date: Thu, 21 May 2020 00:54:11 +0530 Subject: [PATCH] Add scroll helper --- app/build.gradle | 1 + .../monkey/retromusic/RetroScrollHelper.kt | 66 +++++++++++++ .../retromusic/activities/MainActivity.java | 26 ++--- .../activities/SupportDevelopmentActivity.kt | 4 +- .../base/AbsSlidingMusicPanelActivity.kt | 11 ++- .../monkey/retromusic/extensions/ColorExt.kt | 34 +++++++ .../extensions/ContextExtensions.kt | 10 ++ .../fragments/MiniPlayerFragment.kt | 4 +- .../fragments/albums/AlbumsFragment.kt | 3 +- .../fragments/artists/ArtistsFragment.kt | 5 +- .../AbsLibraryPagerRecyclerViewFragment.kt | 51 +--------- .../FoldersFragment.java | 5 +- .../fragments/genres/GenresFragment.kt | 5 +- .../fragments/home/BannerHomeFragment.kt | 5 +- .../player/adaptive/AdaptiveFragment.kt | 4 +- .../LockScreenPlayerControlsFragment.kt | 2 +- .../material/MaterialControlsFragment.kt | 4 +- .../fragments/playlists/PlaylistsFragment.kt | 3 +- .../fragments/queue/PlayingQueueFragment.kt | 3 +- .../settings/MainSettingsFragment.kt | 2 + .../fragments/songs/SongsFragment.kt | 4 +- .../AlbumCoverStylePreferenceDialog.kt | 3 +- .../preferences/BlacklistPreferenceDialog.kt | 2 +- .../preferences/LibraryPreference.kt | 2 +- .../preferences/MaterialListPreference.kt | 2 +- .../NowPlayingScreenPreferenceDialog.kt | 2 +- .../retromusic/util/PreferenceUtil.java | 2 +- .../retromusic/util/ThemedFastScroller.kt | 19 ++-- .../retromusic/views/StatusBarView.java | 59 ------------ .../monkey/retromusic/views/StatusBarView.kt | 42 ++++++++ .../main/res/layout/activity_main_content.xml | 85 ++++++++--------- .../main/res/layout/fragment_banner_home.xml | 3 +- app/src/main/res/layout/fragment_home.xml | 95 +++++++++---------- .../fragment_main_activity_recycler_view.xml | 5 +- .../res/layout/fragment_main_settings.xml | 4 +- .../main/res/layout/fragment_mini_player.xml | 2 +- app/src/main/res/layout/status_bar.xml | 1 - 37 files changed, 312 insertions(+), 268 deletions(-) create mode 100644 app/src/main/java/code/name/monkey/retromusic/RetroScrollHelper.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/extensions/ContextExtensions.kt rename app/src/main/java/code/name/monkey/retromusic/fragments/{mainactivity => folder}/FoldersFragment.java (99%) delete mode 100644 app/src/main/java/code/name/monkey/retromusic/views/StatusBarView.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/views/StatusBarView.kt diff --git a/app/build.gradle b/app/build.gradle index 7e4817c11..3b8744ff6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -183,4 +183,5 @@ dependencies { implementation 'com.google.android.play:core:1.7.2' implementation 'me.jorgecastillo:androidcolorx:0.2.0' debugImplementation 'com.amitshekhar.android:debug-db:1.0.4' + implementation 'com.github.ologe:scroll-helper:2.0.0-beta01' } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/RetroScrollHelper.kt b/app/src/main/java/code/name/monkey/retromusic/RetroScrollHelper.kt new file mode 100644 index 000000000..0353e33e9 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/RetroScrollHelper.kt @@ -0,0 +1,66 @@ +package code.name.monkey.retromusic + +import android.view.View +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentActivity +import androidx.recyclerview.widget.RecyclerView +import androidx.viewpager2.widget.ViewPager2 +import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment +import dev.olog.scrollhelper.ScrollHelper + +class RetroScrollHelper( + private val activity: FragmentActivity +) : ScrollHelper( + activity, + true, + false // TODO when true, scrolls both bottomsheet and bottom navigation +) { + private val skipFragment = listOf( + PlayerFragment::class.java.name + ) + + // TODO every fragment has to have it's unique tag in order to work correctly + // here you can decide what fragment will be processed by the library + // probably you want to skip player fragments, ecc .. + override fun shouldSkipFragment(fragment: Fragment): Boolean { + return fragment::class.java.name in skipFragment + } + + override fun findBottomNavigation(): View? { + return activity.findViewById(R.id.bottomNavigationView) + } + + override fun findBottomSheet(): View? { + return activity.findViewById(R.id.slidingPanel) + } + + override fun findFab(fragment: Fragment): View? { + return null + } + + override fun findRecyclerView(fragment: Fragment): RecyclerView? { + return fragment.requireView().findViewById(R.id.recyclerView) + } + + override fun findToolbar(fragment: Fragment): View? { + return fragment.requireActivity().findViewById(R.id.toolbar) + } + + override fun findTabLayout(fragment: Fragment): View? { + return null + } + + override fun findViewPager(fragment: Fragment): ViewPager2? { + return null + } + + // TODO override this if you want to apply custom padding + override fun updateRecyclerViewPadding( + fragment: Fragment, + recyclerView: RecyclerView, + topPadding: Int, + bottomPadding: Int + ) { + super.updateRecyclerViewPadding(fragment, recyclerView, topPadding, bottomPadding) + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.java b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.java index 452bbd610..506204f2c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.java +++ b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.java @@ -39,7 +39,6 @@ import androidx.fragment.app.Fragment; import com.afollestad.materialcab.MaterialCab; import com.afollestad.materialcab.MaterialCab.Callback; -import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.snackbar.Snackbar; import com.google.android.play.core.appupdate.AppUpdateInfo; import com.google.android.play.core.appupdate.AppUpdateManager; @@ -61,14 +60,15 @@ import code.name.monkey.appthemehelper.ThemeStore; 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.RetroScrollHelper; import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity; import code.name.monkey.retromusic.dialogs.CreatePlaylistDialog; import code.name.monkey.retromusic.fragments.albums.AlbumsFragment; import code.name.monkey.retromusic.fragments.artists.ArtistsFragment; import code.name.monkey.retromusic.fragments.base.AbsLibraryPagerRecyclerViewCustomGridSizeFragment; +import code.name.monkey.retromusic.fragments.folder.FoldersFragment; import code.name.monkey.retromusic.fragments.genres.GenresFragment; import code.name.monkey.retromusic.fragments.home.BannerHomeFragment; -import code.name.monkey.retromusic.fragments.mainactivity.FoldersFragment; import code.name.monkey.retromusic.fragments.playlists.PlaylistsFragment; import code.name.monkey.retromusic.fragments.queue.PlayingQueueFragment; import code.name.monkey.retromusic.fragments.songs.SongsFragment; @@ -89,13 +89,13 @@ import code.name.monkey.retromusic.util.NavigationUtil; import code.name.monkey.retromusic.util.PreferenceUtil; import code.name.monkey.retromusic.util.RetroColorUtil; import code.name.monkey.retromusic.util.RetroUtil; +import dev.olog.scrollhelper.ScrollHelper; /** * Created by hemanths on 2020-02-19. */ public class MainActivity extends AbsSlidingMusicPanelActivity implements CabHolder, SharedPreferences.OnSharedPreferenceChangeListener { - public static final String TAG = MainActivity.class.getSimpleName(); public static final int APP_INTRO_REQUEST = 100; public static final String EXPAND_PANEL = "expand_panel"; @@ -115,10 +115,11 @@ public class MainActivity extends AbsSlidingMusicPanelActivity } } }; + @SuppressWarnings("FieldCanBeLocal") + private ScrollHelper scrollHelper; private MainActivityFragmentCallbacks currentFragment; private boolean blockRequestPermissions = false; private MaterialCab cab; - private AppBarLayout mAppBarLayout; private Toolbar mToolbar; private AppUpdateManager appUpdateManager; InstallStateUpdatedListener listener = new InstallStateUpdatedListener() { @@ -163,7 +164,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity } mToolbar = findViewById(R.id.toolbar); - mAppBarLayout = findViewById(R.id.appBarLayout); //checkShowChangelog(); AppRater.appLaunched(this); @@ -177,7 +177,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity selectedFragment(item.getItemId()); return true; }); - mIntentFilter.addAction(MusicService.MEDIA_STORE_CHANGED); + scrollHelper = new RetroScrollHelper(this); } @@ -253,14 +253,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity PreferenceUtil.getInstance(this).unregisterOnSharedPreferenceChangedListener(this); } - public void addOnAppBarOffsetChangedListener( - @NonNull AppBarLayout.OnOffsetChangedListener onOffsetChangedListener) { - mAppBarLayout.addOnOffsetChangedListener(onOffsetChangedListener); - } - - public int getTotalAppBarScrollingRange() { - return mAppBarLayout.getTotalScrollRange(); - } @Override public boolean handleBackPress() { @@ -405,11 +397,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity return cab; } - public void removeOnAppBarOffsetChangedListener( - @NonNull AppBarLayout.OnOffsetChangedListener onOffsetChangedListener) { - mAppBarLayout.removeOnOffsetChangedListener(onOffsetChangedListener); - } - public void setCurrentFragment(@NonNull Fragment fragment, @NonNull String tag) { String currentTag = null; if (getSupportFragmentManager().findFragmentByTag(tag) != null) { @@ -830,7 +817,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity private void setupToolbar() { setTitle(null); mToolbar.setBackgroundColor(ATHUtil.INSTANCE.resolveColor(this, R.attr.colorSurface)); - mAppBarLayout.setBackgroundColor(ATHUtil.INSTANCE.resolveColor(this, R.attr.colorSurface)); setSupportActionBar(mToolbar); } } 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 382a94a02..9dcec81b8 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 @@ -212,9 +212,9 @@ class SkuDetailsAdapter( val titleTextColor = if (purchased) ATHUtil.resolveColor( donationsDialog, android.R.attr.textColorHint - ) else textColorPrimary(donationsDialog) + ) else donationsDialog.textColorPrimary() val contentTextColor = - if (purchased) titleTextColor else textColorSecondary(donationsDialog) + if (purchased) titleTextColor else donationsDialog.textColorSecondary() viewHolder.title.setTextColor(titleTextColor) viewHolder.text.setTextColor(contentTextColor) 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 077cac51d..903de82d2 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 @@ -127,10 +127,14 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), } } + override fun onPause() { + super.onPause() + behavior.removeBottomSheetCallback(bottomSheetCallbackList) + } + override fun onDestroy() { super.onDestroy() - behavior.removeBottomSheetCallback(bottomSheetCallbackList) - if (navigationBarColorAnimator != null) navigationBarColorAnimator?.cancel() // just in case + navigationBarColorAnimator?.cancel() } protected fun wrapSlidingMusicPanel(@LayoutRes resId: Int): View { @@ -158,7 +162,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), // necessary to make the views below clickable miniPlayerFragment?.view?.visibility = if (alpha == 0f) View.GONE else View.VISIBLE - bottomNavigationView.translationY = progress * 500 + //bottomNavigationView.translationY = progress * 500 //bottomNavigationView.alpha = alpha } @@ -387,4 +391,5 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), bottomNavigationView.hide() } } + } \ No newline at end of file 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 b22359c3f..85b0313f9 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 @@ -17,7 +17,9 @@ package code.name.monkey.retromusic.extensions import android.content.Context import android.content.res.ColorStateList import android.graphics.Color +import android.view.View import androidx.appcompat.widget.Toolbar +import androidx.fragment.app.Fragment import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ColorUtil @@ -31,10 +33,26 @@ fun Context.accentColor(): Int { return ThemeStore.accentColor(this) } +fun View.accentColor(): Int { + return ThemeStore.accentColor(context) +} + +fun Fragment.accentColor(): Int { + return ThemeStore.accentColor(requireContext()) +} + fun Context.surfaceColor(): Int { return ATHUtil.resolveColor(this, R.attr.colorSurface, Color.WHITE) } +fun View.surfaceColor(): Int { + return ATHUtil.resolveColor(context, R.attr.colorSurface, Color.WHITE) +} + +fun Fragment.surfaceColor(): Int { + return ATHUtil.resolveColor(requireContext(), R.attr.colorSurface, Color.WHITE) +} + fun Toolbar.backgroundTintList() { val surfaceColor = ATHUtil.resolveColor(context, R.attr.colorSurface, Color.BLACK) val colorStateList = ColorStateList.valueOf(surfaceColor) @@ -45,10 +63,26 @@ fun Context.textColorSecondary(): Int { return ATHUtil.resolveColor(this, android.R.attr.textColorSecondary) } +fun Fragment.textColorSecondary(): Int { + return ATHUtil.resolveColor(requireContext(), android.R.attr.textColorSecondary) +} + fun Context.colorControlNormal(): Int { return ATHUtil.resolveColor(this, android.R.attr.colorControlNormal) } +fun View.colorControlNormal(): Int { + return ATHUtil.resolveColor(context, android.R.attr.colorControlNormal) +} + fun Context.textColorPrimary(): Int { return ATHUtil.resolveColor(this, android.R.attr.textColorPrimary) +} + +fun View.textColorPrimary(): Int { + return ATHUtil.resolveColor(context, android.R.attr.textColorPrimary) +} + +fun Fragment.textColorPrimary(): Int { + return ATHUtil.resolveColor(requireContext(), android.R.attr.textColorPrimary) } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ContextExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ContextExtensions.kt new file mode 100644 index 000000000..e025320fe --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ContextExtensions.kt @@ -0,0 +1,10 @@ +package code.name.monkey.retromusic.extensions + +import android.content.Context +import androidx.annotation.DimenRes + +@Suppress("NOTHING_TO_INLINE") +inline fun Context.dip(value: Int): Int = (value * resources.displayMetrics.density).toInt() + +@Suppress("NOTHING_TO_INLINE") +inline fun Context.dimen(@DimenRes resource: Int): Int = resources.getDimensionPixelSize(resource) \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt index 9efa2f464..337e257db 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt @@ -84,10 +84,10 @@ open class MiniPlayerFragment : AbsMusicServiceFragment(), MusicProgressViewUpda val song = MusicPlayerRemote.currentSong val title = SpannableString(song.title) - title.setSpan(ForegroundColorSpan(textColorPrimary(requireContext())), 0, title.length, 0) + title.setSpan(ForegroundColorSpan(textColorPrimary()), 0, title.length, 0) val text = SpannableString(song.artistName) - text.setSpan(ForegroundColorSpan(textColorSecondary(requireContext())), 0, text.length, 0) + text.setSpan(ForegroundColorSpan(textColorSecondary()), 0, text.length, 0) builder.append(title).append(" • ").append(text) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt index 0ba59b98f..21755b14c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt @@ -10,6 +10,7 @@ import code.name.monkey.retromusic.adapter.album.AlbumAdapter import code.name.monkey.retromusic.fragments.base.AbsLibraryPagerRecyclerViewCustomGridSizeFragment import code.name.monkey.retromusic.interfaces.MainActivityFragmentCallbacks import code.name.monkey.retromusic.util.PreferenceUtil +import dev.olog.scrollhelper.layoutmanagers.OverScrollGridLayoutManager class AlbumsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment(), @@ -32,7 +33,7 @@ class AlbumsFragment : get() = R.string.no_albums override fun createLayoutManager(): GridLayoutManager { - return GridLayoutManager(requireActivity(), getGridSize()) + return OverScrollGridLayoutManager(requireActivity(), getGridSize()) } override fun createAdapter(): AlbumAdapter { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt index 34385c5b5..039b0a746 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt @@ -10,12 +10,13 @@ import code.name.monkey.retromusic.adapter.artist.ArtistAdapter import code.name.monkey.retromusic.fragments.base.AbsLibraryPagerRecyclerViewCustomGridSizeFragment import code.name.monkey.retromusic.interfaces.MainActivityFragmentCallbacks import code.name.monkey.retromusic.util.PreferenceUtil +import dev.olog.scrollhelper.layoutmanagers.OverScrollGridLayoutManager class ArtistsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment(), MainActivityFragmentCallbacks { - lateinit var artistViewModel: ArtistViewModel + private lateinit var artistViewModel: ArtistViewModel override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -46,7 +47,7 @@ class ArtistsFragment : } override fun createLayoutManager(): GridLayoutManager { - return GridLayoutManager(requireActivity(), getGridSize()) + return OverScrollGridLayoutManager(requireActivity(), getGridSize()) } override fun createAdapter(): ArtistAdapter { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsLibraryPagerRecyclerViewFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsLibraryPagerRecyclerViewFragment.kt index 2ef27d5f5..bd7b45a8e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsLibraryPagerRecyclerViewFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsLibraryPagerRecyclerViewFragment.kt @@ -8,17 +8,13 @@ import androidx.annotation.NonNull import androidx.annotation.StringRes import androidx.recyclerview.widget.RecyclerView import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.helper.MusicPlayerRemote -import code.name.monkey.retromusic.util.DensityUtil import code.name.monkey.retromusic.util.ThemedFastScroller.create -import code.name.monkey.retromusic.views.ScrollingViewOnApplyWindowInsetsListener -import com.google.android.material.appbar.AppBarLayout import kotlinx.android.synthetic.main.fragment_main_activity_recycler_view.* import me.zhanghai.android.fastscroll.FastScroller import me.zhanghai.android.fastscroll.FastScrollerBuilder abstract class AbsLibraryPagerRecyclerViewFragment, LM : RecyclerView.LayoutManager> : - AbsLibraryPagerFragment(), AppBarLayout.OnOffsetChangedListener { + AbsLibraryPagerFragment() { protected var adapter: A? = null protected var layoutManager: LM? = null @@ -31,7 +27,6 @@ abstract class AbsLibraryPagerRecyclerViewFragment, override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - mainActivity.addOnAppBarOffsetChangedListener(this) initLayoutManager() initAdapter() setUpRecyclerView() @@ -41,13 +36,6 @@ abstract class AbsLibraryPagerRecyclerViewFragment, recyclerView.layoutManager = layoutManager recyclerView.adapter = adapter val fastScroller = create(recyclerView) - recyclerView.setOnApplyWindowInsetsListener( - ScrollingViewOnApplyWindowInsetsListener( - recyclerView, - fastScroller - ) - ) - checkForPadding() } protected open fun createFastScroller(recyclerView: RecyclerView): FastScroller { @@ -60,7 +48,6 @@ abstract class AbsLibraryPagerRecyclerViewFragment, override fun onChanged() { super.onChanged() checkIsEmpty() - checkForPadding() } }) } @@ -78,18 +65,6 @@ abstract class AbsLibraryPagerRecyclerViewFragment, empty.visibility = if (adapter!!.itemCount == 0) View.VISIBLE else View.GONE } - private fun checkForPadding() { - val itemCount: Int = adapter?.itemCount ?: 0 - val params = container.layoutParams as ViewGroup.MarginLayoutParams - if (itemCount > 0 && MusicPlayerRemote.playingQueue.isNotEmpty()) { - val height = DensityUtil.dip2px(requireContext(), 104f) - params.bottomMargin = height - } else { - val height = DensityUtil.dip2px(requireContext(), 52f) - params.bottomMargin = height - } - } - private fun initLayoutManager() { layoutManager = createLayoutManager() } @@ -99,25 +74,6 @@ abstract class AbsLibraryPagerRecyclerViewFragment, @NonNull protected abstract fun createAdapter(): A - override fun onOffsetChanged(p0: AppBarLayout?, i: Int) { - container.setPadding( - container.paddingLeft, - container.paddingTop, - container.paddingRight, - mainActivity.totalAppBarScrollingRange + i - ) - } - - override fun onQueueChanged() { - super.onQueueChanged() - checkForPadding() - } - - override fun onServiceConnected() { - super.onServiceConnected() - checkForPadding() - } - protected fun invalidateLayoutManager() { initLayoutManager() recyclerView.layoutManager = layoutManager @@ -129,11 +85,6 @@ abstract class AbsLibraryPagerRecyclerViewFragment, recyclerView.adapter = adapter } - override fun onDestroyView() { - super.onDestroyView() - mainActivity.removeOnAppBarOffsetChangedListener(this) - } - fun recyclerView(): RecyclerView { return recyclerView } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/FoldersFragment.java b/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.java similarity index 99% rename from app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/FoldersFragment.java rename to app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.java index e87eb2aaa..e5f6e6188 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/FoldersFragment.java +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.java @@ -12,7 +12,7 @@ * See the GNU General Public License for more details. */ -package code.name.monkey.retromusic.fragments.mainactivity; +package code.name.monkey.retromusic.fragments.folder; import android.app.Dialog; import android.content.Context; @@ -73,6 +73,7 @@ import code.name.monkey.retromusic.util.RetroColorUtil; import code.name.monkey.retromusic.util.ThemedFastScroller; import code.name.monkey.retromusic.views.BreadCrumbLayout; import code.name.monkey.retromusic.views.ScrollingViewOnApplyWindowInsetsListener; +import dev.olog.scrollhelper.layoutmanagers.OverScrollLinearLayoutManager; import me.zhanghai.android.fastscroll.FastScroller; public class FoldersFragment extends AbsMainActivityFragment implements @@ -478,7 +479,7 @@ public class FoldersFragment extends AbsMainActivityFragment implements } private void setUpRecyclerView() { - recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); + recyclerView.setLayoutManager(new OverScrollLinearLayoutManager(getActivity())); FastScroller fastScroller = ThemedFastScroller.INSTANCE.create(recyclerView); recyclerView.setOnApplyWindowInsetsListener( new ScrollingViewOnApplyWindowInsetsListener(recyclerView, fastScroller)); diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenresFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenresFragment.kt index 2541365e5..c451b4147 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenresFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenresFragment.kt @@ -24,11 +24,12 @@ import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.GenreAdapter import code.name.monkey.retromusic.fragments.base.AbsLibraryPagerRecyclerViewFragment import code.name.monkey.retromusic.interfaces.MainActivityFragmentCallbacks +import dev.olog.scrollhelper.layoutmanagers.OverScrollLinearLayoutManager class GenresFragment : AbsLibraryPagerRecyclerViewFragment(), MainActivityFragmentCallbacks { - lateinit var genreViewModel: GenreViewModel + private lateinit var genreViewModel: GenreViewModel override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -52,7 +53,7 @@ class GenresFragment : AbsLibraryPagerRecyclerViewFragment(), @@ -38,7 +39,7 @@ class PlaylistsFragment : get() = R.string.no_playlists override fun createLayoutManager(): GridLayoutManager { - return GridLayoutManager(requireContext(), 1) + return OverScrollGridLayoutManager(requireContext(), 1) } override fun createAdapter(): PlaylistAdapter { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/queue/PlayingQueueFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/queue/PlayingQueueFragment.kt index a618c66e8..73852e803 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/queue/PlayingQueueFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/queue/PlayingQueueFragment.kt @@ -28,6 +28,7 @@ import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropM import com.h6ah4i.android.widget.advrecyclerview.swipeable.RecyclerViewSwipeManager import com.h6ah4i.android.widget.advrecyclerview.touchguard.RecyclerViewTouchActionGuardManager import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils +import dev.olog.scrollhelper.layoutmanagers.OverScrollLinearLayoutManager import kotlinx.android.synthetic.main.activity_playing_queue.* /** @@ -73,7 +74,7 @@ class PlayingQueueFragment : } override fun createLayoutManager(): LinearLayoutManager { - return LinearLayoutManager(requireContext()) + return OverScrollLinearLayoutManager(requireContext()) } override fun createAdapter(): PlayingQueueAdapter { 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 2a690c087..6fed08669 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 @@ -68,7 +68,9 @@ class MainSettingsFragment : Fragment(), View.OnClickListener { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + scrollView.setOnScrollChangeListener(View.OnScrollChangeListener { v, scrollX, scrollY, oldScrollX, oldScrollY -> + }) generalSettings.setOnClickListener(this) audioSettings.setOnClickListener(this) nowPlayingSettings.setOnClickListener(this) 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 4b2c0777f..1cbdf2a2e 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 @@ -14,6 +14,7 @@ import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.mvp.presenter.SongPresenter import code.name.monkey.retromusic.mvp.presenter.SongView import code.name.monkey.retromusic.util.PreferenceUtil +import dev.olog.scrollhelper.layoutmanagers.OverScrollGridLayoutManager import java.util.* import javax.inject.Inject @@ -38,8 +39,7 @@ class SongsFragment : } override fun createLayoutManager(): GridLayoutManager { - println("createLayoutManager: ${getGridSize()}") - return GridLayoutManager(requireActivity(), getGridSize()).apply { + return OverScrollGridLayoutManager(requireActivity(), getGridSize()).apply { spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() { override fun getSpanSize(position: Int): Int { return if (position == 0) { diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt index cb24d941f..20f98b0d8 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt @@ -57,9 +57,10 @@ class AlbumCoverStylePreference @JvmOverloads constructor( } init { + icon?.colorFilter = BlendModeColorFilterCompat.createBlendModeColorFilterCompat( - colorControlNormal(context), + context.colorControlNormal(), SRC_IN ) } diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt index 6ed4eda13..2e2b51ffa 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt @@ -43,7 +43,7 @@ class BlacklistPreference @JvmOverloads constructor( init { icon?.colorFilter = BlendModeColorFilterCompat.createBlendModeColorFilterCompat( - colorControlNormal(context), + context.colorControlNormal( ), SRC_IN ) } diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/LibraryPreference.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/LibraryPreference.kt index 12f887bc0..7360df5d6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/LibraryPreference.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/LibraryPreference.kt @@ -45,7 +45,7 @@ class LibraryPreference @JvmOverloads constructor( init { icon?.colorFilter = BlendModeColorFilterCompat.createBlendModeColorFilterCompat( - colorControlNormal(context), + context.colorControlNormal(), SRC_IN ) } diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/MaterialListPreference.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/MaterialListPreference.kt index 180165a91..ddb3c473d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/MaterialListPreference.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/MaterialListPreference.kt @@ -43,7 +43,7 @@ class MaterialListPreference @JvmOverloads constructor( init { icon?.colorFilter = BlendModeColorFilterCompat.createBlendModeColorFilterCompat( - colorControlNormal(context), + context.colorControlNormal(), SRC_IN ) } diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt index 4704f27b7..822668e8b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt @@ -57,7 +57,7 @@ class NowPlayingScreenPreference @JvmOverloads constructor( init { icon?.colorFilter = BlendModeColorFilterCompat.createBlendModeColorFilterCompat( - colorControlNormal(context), + context.colorControlNormal(), SRC_IN ) } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.java index 358b38de3..5c42d1701 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.java @@ -44,7 +44,7 @@ import java.util.Objects; import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.fragments.AlbumCoverStyle; import code.name.monkey.retromusic.fragments.NowPlayingScreen; -import code.name.monkey.retromusic.fragments.mainactivity.FoldersFragment; +import code.name.monkey.retromusic.fragments.folder.FoldersFragment; import code.name.monkey.retromusic.helper.SortOrder.AlbumSongSortOrder; import code.name.monkey.retromusic.model.CategoryInfo; import code.name.monkey.retromusic.model.CategoryInfo.Category; 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..7700c3260 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 @@ -14,21 +14,23 @@ package code.name.monkey.retromusic.util import android.view.ViewGroup -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.retromusic.R +import code.name.monkey.retromusic.extensions.accentColor +import code.name.monkey.retromusic.extensions.dimen +import code.name.monkey.retromusic.extensions.dip import code.name.monkey.retromusic.views.PopupBackground import me.zhanghai.android.fastscroll.FastScroller import me.zhanghai.android.fastscroll.FastScrollerBuilder import me.zhanghai.android.fastscroll.PopupStyles -import me.zhanghai.android.fastscroll.R + object ThemedFastScroller { fun create(view: ViewGroup): FastScroller { val context = view.context - val color = accentColor(context) - val textColor = getPrimaryTextColor(context, isColorLight(color)) + val textColor = getPrimaryTextColor(context, isColorLight(context.accentColor())) val fastScrollerBuilder = FastScrollerBuilder(view) fastScrollerBuilder.useMd2Style() fastScrollerBuilder.setPopupStyle { popupText -> @@ -36,12 +38,17 @@ object ThemedFastScroller { popupText.background = PopupBackground(context) popupText.setTextColor(textColor) } - + fastScrollerBuilder.setPadding( + 0, + view.context.dimen(R.dimen.toolbar_height) + view.context.dip(8), + 0, + view.context.dimen(R.dimen.mini_player_height) + ) fastScrollerBuilder.setThumbDrawable( TintHelper.createTintedDrawable( context, R.drawable.afs_md2_thumb, - color + context.accentColor() ) ) return fastScrollerBuilder.build() diff --git a/app/src/main/java/code/name/monkey/retromusic/views/StatusBarView.java b/app/src/main/java/code/name/monkey/retromusic/views/StatusBarView.java deleted file mode 100644 index 8eaf325d4..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/views/StatusBarView.java +++ /dev/null @@ -1,59 +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.views; - -import android.content.Context; -import android.content.res.Resources; -import android.util.AttributeSet; -import android.view.View; - -import androidx.annotation.NonNull; - -public class StatusBarView extends View { - - - public StatusBarView(@NonNull Context context) { - super(context); - init(context); - } - - public StatusBarView(@NonNull Context context, @NonNull AttributeSet attrs) { - super(context, attrs); - init(context); - } - - public StatusBarView(@NonNull Context context, @NonNull AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(context); - } - - public static int getStatusBarHeight(@NonNull Resources r) { - int result = 0; - int resourceId = r.getIdentifier("status_bar_height", "dimen", "android"); - if (resourceId > 0) { - result = r.getDimensionPixelSize(resourceId); - } - return result; - } - - private void init(Context context) { - - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), getStatusBarHeight(getResources())); - } -} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/views/StatusBarView.kt b/app/src/main/java/code/name/monkey/retromusic/views/StatusBarView.kt new file mode 100644 index 000000000..765bac66b --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/views/StatusBarView.kt @@ -0,0 +1,42 @@ +/* + * 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.views + +import android.content.Context +import android.util.AttributeSet +import android.view.View + +class StatusBarView( + context: Context, + attrs: AttributeSet +) : View(context, attrs) { + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + if (isInEditMode) { + return + } + setOnApplyWindowInsetsListener { _, insets -> + val height = insets?.systemWindowInsetTop ?: 0 + setHeight(height) + insets + } + } + + private fun setHeight(px: Int) { + val params = layoutParams ?: return + params.height = px + layoutParams = params + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main_content.xml b/app/src/main/res/layout/activity_main_content.xml index 4b0a8efb3..519dfefd2 100644 --- a/app/src/main/res/layout/activity_main_content.xml +++ b/app/src/main/res/layout/activity_main_content.xml @@ -1,60 +1,55 @@ - + android:background="?colorSurface"> + + + + + + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/status_bar"> - + + - - + - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_banner_home.xml b/app/src/main/res/layout/fragment_banner_home.xml index 57690f205..0552c419e 100644 --- a/app/src/main/res/layout/fragment_banner_home.xml +++ b/app/src/main/res/layout/fragment_banner_home.xml @@ -15,9 +15,10 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" - android:overScrollMode="never" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginTop="@dimen/toolbar_height" + android:overScrollMode="never" app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"> - - + - + - + - - - - - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main_activity_recycler_view.xml b/app/src/main/res/layout/fragment_main_activity_recycler_view.xml index 9a925d898..3a738f320 100644 --- a/app/src/main/res/layout/fragment_main_activity_recycler_view.xml +++ b/app/src/main/res/layout/fragment_main_activity_recycler_view.xml @@ -5,11 +5,12 @@ android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent"> - + + - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_mini_player.xml b/app/src/main/res/layout/fragment_mini_player.xml index a4c30349a..c2264f79a 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:id="@+id/miniPlayerContent" android:layout_width="match_parent" - android:layout_height="@dimen/bottom_sheet_peek_1_height" + android:layout_height="@dimen/mini_player_height" android:background="?attr/colorSurface" android:clickable="true" android:focusable="true" diff --git a/app/src/main/res/layout/status_bar.xml b/app/src/main/res/layout/status_bar.xml index e29b5c77e..3f1a8f4b5 100755 --- a/app/src/main/res/layout/status_bar.xml +++ b/app/src/main/res/layout/status_bar.xml @@ -5,5 +5,4 @@ android:layout_width="match_parent" android:layout_height="0dp" android:background="@android:color/transparent" - android:elevation="@dimen/toolbar_elevation" tools:ignore="UnusedAttribute" /> \ No newline at end of file