From 9f5b9d32ada37ed299f4aefb3c3ed74c0cdf2e14 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Mon, 27 Sep 2021 21:41:27 +0530 Subject: [PATCH] Classified fragment classes into suitable packages & optimized imports --- app/src/main/AndroidManifest.xml | 2 - .../activities/PlayingQueueActivity.kt | 202 ------------------ .../base/AbsSlidingMusicPanelActivity.kt | 2 +- .../tageditor/AlbumTagEditorActivity.kt | 1 - .../adapter/song/PlayingQueueAdapter.kt | 3 +- .../base/AbsPlayerControlsFragment.kt | 2 +- .../{ => other}/DetailListFragment.kt | 2 +- .../fragments/{ => other}/LyricsFragment.kt | 2 +- .../{ => other}/MiniPlayerFragment.kt | 2 +- .../fragments/other/PlayingQueueRVFragment.kt | 159 ++++++++++++++ .../fragments/{ => other}/UserInfoFragment.kt | 2 +- .../fragments/{ => other}/VolumeFragment.kt | 2 +- .../player/classic/ClassicPlayerFragment.kt | 2 +- .../fragments/player/color/ColorFragment.kt | 1 - .../player/gradient/GradientPlayerFragment.kt | 3 +- .../material/MaterialControlsFragment.kt | 1 - .../fragments/queue/PlayingQueueFragment.kt | 173 +++++++++------ ...g_queue.xml => fragment_playing_queue.xml} | 0 ...g_queue.xml => fragment_playing_queue.xml} | 0 .../res/layout/sliding_music_panel_layout.xml | 2 +- app/src/main/res/navigation/main_graph.xml | 6 +- 21 files changed, 279 insertions(+), 290 deletions(-) delete mode 100644 app/src/main/java/code/name/monkey/retromusic/activities/PlayingQueueActivity.kt rename app/src/main/java/code/name/monkey/retromusic/fragments/{ => other}/DetailListFragment.kt (99%) rename app/src/main/java/code/name/monkey/retromusic/fragments/{ => other}/LyricsFragment.kt (99%) rename app/src/main/java/code/name/monkey/retromusic/fragments/{ => other}/MiniPlayerFragment.kt (99%) create mode 100644 app/src/main/java/code/name/monkey/retromusic/fragments/other/PlayingQueueRVFragment.kt rename app/src/main/java/code/name/monkey/retromusic/fragments/{ => other}/UserInfoFragment.kt (99%) rename app/src/main/java/code/name/monkey/retromusic/fragments/{ => other}/VolumeFragment.kt (99%) mode change 100755 => 100644 rename app/src/main/res/layout-sw600dp/{activity_playing_queue.xml => fragment_playing_queue.xml} (100%) rename app/src/main/res/layout/{activity_playing_queue.xml => fragment_playing_queue.xml} (100%) mode change 100755 => 100644 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 313c7e76..a5235207 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -107,11 +107,9 @@ - - 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 deleted file mode 100644 index 8adb96bc..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/activities/PlayingQueueActivity.kt +++ /dev/null @@ -1,202 +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.activities - -import android.content.res.ColorStateList -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 -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.helper.MusicPlayerRemote -import code.name.monkey.retromusic.util.MusicUtil -import code.name.monkey.retromusic.util.ThemedFastScroller -import com.h6ah4i.android.widget.advrecyclerview.animator.DraggableItemAnimator -import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager -import com.h6ah4i.android.widget.advrecyclerview.swipeable.RecyclerViewSwipeManager -import com.h6ah4i.android.widget.advrecyclerview.touchguard.RecyclerViewTouchActionGuardManager -import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils - -open class PlayingQueueActivity : AbsMusicServiceActivity() { - - private lateinit var binding: ActivityPlayingQueueBinding - private var wrappedAdapter: RecyclerView.Adapter<*>? = null - private var recyclerViewDragDropManager: RecyclerViewDragDropManager? = null - private var recyclerViewSwipeManager: RecyclerViewSwipeManager? = null - private var recyclerViewTouchActionGuardManager: RecyclerViewTouchActionGuardManager? = null - private var playingQueueAdapter: PlayingQueueAdapter? = null - private lateinit var linearLayoutManager: LinearLayoutManager - - private fun getUpNextAndQueueTime(): String { - val duration = MusicPlayerRemote.getQueueDurationMillis(MusicPlayerRemote.position) - return MusicUtil.buildInfoString( - resources.getString(R.string.up_next), - MusicUtil.getReadableDurationString(duration) - ) - } - - override fun onCreate(savedInstanceState: Bundle?) { - setDrawUnderStatusBar() - super.onCreate(savedInstanceState) - binding = ActivityPlayingQueueBinding.inflate(layoutInflater) - setContentView(binding.root) - setLightStatusbarAuto(ATHUtil.resolveColor(this, R.attr.colorSurface)) - setTaskDescriptionColorAuto() - - setupToolbar() - setUpRecyclerView() - - binding.clearQueue.setOnClickListener { - MusicPlayerRemote.clearQueue() - } - checkForPadding() - } - - override fun onOptionsItemSelected(item: MenuItem): Boolean { - return when (item.itemId) { - android.R.id.home -> { - onBackPressed() - true - } - else -> super.onOptionsItemSelected(item) - } - } - - private fun setUpRecyclerView() { - recyclerViewTouchActionGuardManager = RecyclerViewTouchActionGuardManager() - recyclerViewDragDropManager = RecyclerViewDragDropManager() - recyclerViewSwipeManager = RecyclerViewSwipeManager() - - val animator = DraggableItemAnimator() - animator.supportsChangeAnimations = false - - playingQueueAdapter = PlayingQueueAdapter( - this, - MusicPlayerRemote.playingQueue.toMutableList(), - MusicPlayerRemote.position, - R.layout.item_queue - ) - wrappedAdapter = recyclerViewDragDropManager?.createWrappedAdapter(playingQueueAdapter!!) - wrappedAdapter = wrappedAdapter?.let { recyclerViewSwipeManager?.createWrappedAdapter(it) } - - linearLayoutManager = LinearLayoutManager(this) - - binding.recyclerView.layoutManager = linearLayoutManager - binding.recyclerView.adapter = wrappedAdapter - binding.recyclerView.itemAnimator = animator - recyclerViewTouchActionGuardManager?.attachRecyclerView(binding.recyclerView) - recyclerViewDragDropManager?.attachRecyclerView(binding.recyclerView) - recyclerViewSwipeManager?.attachRecyclerView(binding.recyclerView) - linearLayoutManager.scrollToPositionWithOffset(MusicPlayerRemote.position + 1, 0) - - binding.recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() { - override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { - super.onScrolled(recyclerView, dx, dy) - if (dy > 0) { - binding.clearQueue.shrink() - } else if (dy < 0) { - binding.clearQueue.extend() - } - } - }) - ThemedFastScroller.create(binding.recyclerView) - } - - private fun checkForPadding() { - } - - override fun onQueueChanged() { - if (MusicPlayerRemote.playingQueue.isEmpty()) { - finish() - return - } - checkForPadding() - updateQueue() - updateCurrentSong() - } - - override fun onMediaStoreChanged() { - updateQueue() - updateCurrentSong() - } - - private fun updateCurrentSong() { - binding.toolbar.subtitle = getUpNextAndQueueTime() - } - - override fun onPlayingMetaChanged() { - updateQueuePosition() - } - - private fun updateQueuePosition() { - playingQueueAdapter?.setCurrent(MusicPlayerRemote.position) - resetToCurrentPosition() - binding.toolbar.subtitle = getUpNextAndQueueTime() - } - - private fun updateQueue() { - playingQueueAdapter?.swapDataSet(MusicPlayerRemote.playingQueue, MusicPlayerRemote.position) - resetToCurrentPosition() - } - - private fun resetToCurrentPosition() { - binding.recyclerView.stopScroll() - linearLayoutManager.scrollToPositionWithOffset(MusicPlayerRemote.position + 1, 0) - } - - override fun onPause() { - if (recyclerViewDragDropManager != null) { - recyclerViewDragDropManager!!.cancelDrag() - } - super.onPause() - } - - override fun onDestroy() { - if (recyclerViewDragDropManager != null) { - recyclerViewDragDropManager!!.release() - recyclerViewDragDropManager = null - } - if (recyclerViewSwipeManager != null) { - recyclerViewSwipeManager?.release() - recyclerViewSwipeManager = null - } - if (wrappedAdapter != null) { - WrapperAdapterUtils.releaseAll(wrappedAdapter) - wrappedAdapter = null - } - playingQueueAdapter = null - super.onDestroy() - } - - private fun setupToolbar() { - binding.toolbar.subtitle = getUpNextAndQueueTime() - //binding.toolbar.setBackgroundColor(surfaceColor()) - setSupportActionBar(binding.toolbar) - binding.clearQueue.backgroundTintList = ColorStateList.valueOf(accentColor()) - ColorStateList.valueOf( - MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(accentColor())) - ).apply { - binding.clearQueue.setTextColor(this) - binding.clearQueue.iconTint = this - } - } -} 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 0c968857..5f80b71e 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 @@ -32,10 +32,10 @@ import code.name.monkey.retromusic.RetroBottomSheetBehavior import code.name.monkey.retromusic.databinding.SlidingMusicPanelLayoutBinding import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.fragments.LibraryViewModel -import code.name.monkey.retromusic.fragments.MiniPlayerFragment import code.name.monkey.retromusic.fragments.NowPlayingScreen import code.name.monkey.retromusic.fragments.NowPlayingScreen.* import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment +import code.name.monkey.retromusic.fragments.other.MiniPlayerFragment import code.name.monkey.retromusic.fragments.player.adaptive.AdaptiveFragment import code.name.monkey.retromusic.fragments.player.blur.BlurPlayerFragment import code.name.monkey.retromusic.fragments.player.card.CardFragment 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 de04ed5c..6bbae4d9 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 @@ -29,7 +29,6 @@ import android.view.LayoutInflater import android.widget.ImageView import android.widget.Toast import code.name.monkey.appthemehelper.util.ATHUtil -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 diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlayingQueueAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlayingQueueAdapter.kt index 46b99c23..506eb1c1 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlayingQueueAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlayingQueueAdapter.kt @@ -16,7 +16,6 @@ package code.name.monkey.retromusic.adapter.song import android.view.MenuItem import android.view.View -import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.FragmentActivity import code.name.monkey.retromusic.R import code.name.monkey.retromusic.glide.GlideApp @@ -41,7 +40,7 @@ import com.h6ah4i.android.widget.advrecyclerview.swipeable.action.SwipeResultAct import me.zhanghai.android.fastscroll.PopupTextProvider class PlayingQueueAdapter( - activity: AppCompatActivity, + activity: FragmentActivity, dataSet: MutableList, private var current: Int, itemLayoutRes: Int diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerControlsFragment.kt index 93c2346a..3530d8f6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerControlsFragment.kt @@ -20,7 +20,7 @@ import android.view.animation.AccelerateInterpolator import android.view.animation.DecelerateInterpolator import androidx.annotation.LayoutRes import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.fragments.VolumeFragment +import code.name.monkey.retromusic.fragments.other.VolumeFragment import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/DetailListFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/other/DetailListFragment.kt similarity index 99% rename from app/src/main/java/code/name/monkey/retromusic/fragments/DetailListFragment.kt rename to app/src/main/java/code/name/monkey/retromusic/fragments/other/DetailListFragment.kt index b001c1e8..ed1a5c72 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/DetailListFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/other/DetailListFragment.kt @@ -12,7 +12,7 @@ * See the GNU General Public License for more details. * */ -package code.name.monkey.retromusic.fragments +package code.name.monkey.retromusic.fragments.other import android.os.Bundle import android.view.View diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/LyricsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/other/LyricsFragment.kt similarity index 99% rename from app/src/main/java/code/name/monkey/retromusic/fragments/LyricsFragment.kt rename to app/src/main/java/code/name/monkey/retromusic/fragments/other/LyricsFragment.kt index c4aa78a7..b86785ee 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/LyricsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/other/LyricsFragment.kt @@ -12,7 +12,7 @@ * See the GNU General Public License for more details. * */ -package code.name.monkey.retromusic.fragments +package code.name.monkey.retromusic.fragments.other import android.os.Bundle import android.text.InputType diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/other/MiniPlayerFragment.kt similarity index 99% rename from app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt rename to app/src/main/java/code/name/monkey/retromusic/fragments/other/MiniPlayerFragment.kt index b1361630..8b5295e5 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/other/MiniPlayerFragment.kt @@ -12,7 +12,7 @@ * See the GNU General Public License for more details. * */ -package code.name.monkey.retromusic.fragments +package code.name.monkey.retromusic.fragments.other import android.animation.ObjectAnimator import android.annotation.SuppressLint diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/other/PlayingQueueRVFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/other/PlayingQueueRVFragment.kt new file mode 100644 index 00000000..206e914c --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/other/PlayingQueueRVFragment.kt @@ -0,0 +1,159 @@ +/* + * 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.other + +import android.os.Bundle +import android.view.View +import androidx.appcompat.app.AppCompatActivity +import androidx.navigation.findNavController +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.adapter.song.PlayingQueueAdapter +import code.name.monkey.retromusic.fragments.base.AbsRecyclerViewFragment +import code.name.monkey.retromusic.helper.MusicPlayerRemote +import com.h6ah4i.android.widget.advrecyclerview.animator.DraggableItemAnimator +import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager +import com.h6ah4i.android.widget.advrecyclerview.swipeable.RecyclerViewSwipeManager +import com.h6ah4i.android.widget.advrecyclerview.touchguard.RecyclerViewTouchActionGuardManager +import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils + +/** + * Created by hemanths on 2019-12-08. + */ +class PlayingQueueRVFragment : AbsRecyclerViewFragment() { + + private lateinit var wrappedAdapter: RecyclerView.Adapter<*> + private var recyclerViewDragDropManager: RecyclerViewDragDropManager? = null + private var recyclerViewSwipeManager: RecyclerViewSwipeManager? = null + private var recyclerViewTouchActionGuardManager: RecyclerViewTouchActionGuardManager? = null + override val titleRes: Int + get() = R.string.now_playing_queue + override val isShuffleVisible: Boolean + get() = false + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupRecyclerView() + setupToolbar() + } + + private fun setupToolbar() { + toolbar().apply { + setNavigationOnClickListener { + findNavController().navigateUp() + } + setNavigationIcon(R.drawable.ic_keyboard_backspace_black) + } + } + + private fun setupRecyclerView() { + recyclerViewTouchActionGuardManager = RecyclerViewTouchActionGuardManager() + recyclerViewDragDropManager = RecyclerViewDragDropManager() + recyclerViewSwipeManager = RecyclerViewSwipeManager() + + val animator = DraggableItemAnimator() + animator.supportsChangeAnimations = false + wrappedAdapter = + recyclerViewDragDropManager?.createWrappedAdapter(adapter!!) as RecyclerView.Adapter<*> + wrappedAdapter = + recyclerViewSwipeManager?.createWrappedAdapter(wrappedAdapter) as RecyclerView.Adapter<*> + recyclerView().layoutManager = layoutManager + recyclerView().adapter = wrappedAdapter + recyclerView().itemAnimator = animator + recyclerViewTouchActionGuardManager?.attachRecyclerView(recyclerView()) + recyclerViewDragDropManager?.attachRecyclerView(recyclerView()) + recyclerViewSwipeManager?.attachRecyclerView(recyclerView()) + + layoutManager?.scrollToPositionWithOffset(MusicPlayerRemote.position + 1, 0) + } + + override fun createLayoutManager(): LinearLayoutManager { + return LinearLayoutManager(requireContext()) + } + + override fun createAdapter(): PlayingQueueAdapter { + return PlayingQueueAdapter( + requireActivity() as AppCompatActivity, + MusicPlayerRemote.playingQueue.toMutableList(), + MusicPlayerRemote.position, + R.layout.item_queue + ) + } + + override fun onServiceConnected() { + super.onServiceConnected() + updateQueue() + } + + override fun onQueueChanged() { + super.onQueueChanged() + updateQueue() + mainActivity.hideBottomBar(true) + } + + override fun onPlayingMetaChanged() { + updateQueuePosition() + mainActivity.hideBottomBar(true) + } + + private fun updateQueuePosition() { + adapter?.setCurrent(MusicPlayerRemote.position) + resetToCurrentPosition() + } + + private fun updateQueue() { + adapter?.swapDataSet(MusicPlayerRemote.playingQueue, MusicPlayerRemote.position) + resetToCurrentPosition() + } + + private fun resetToCurrentPosition() { + recyclerView().stopScroll() + layoutManager?.scrollToPositionWithOffset(MusicPlayerRemote.position + 1, 0) + } + + override fun onPause() { + recyclerViewDragDropManager?.cancelDrag() + super.onPause() + } + + override val emptyMessage: Int + get() = R.string.no_playing_queue + + override fun onDestroyView() { + super.onDestroyView() + if (recyclerViewDragDropManager != null) { + recyclerViewDragDropManager?.release() + recyclerViewDragDropManager = null + } + + if (recyclerViewSwipeManager != null) { + recyclerViewSwipeManager?.release() + recyclerViewSwipeManager = null + } + + WrapperAdapterUtils.releaseAll(wrappedAdapter) + } + + companion object { + @JvmField + val TAG: String = PlayingQueueRVFragment::class.java.simpleName + + @JvmStatic + fun newInstance(): PlayingQueueRVFragment { + return PlayingQueueRVFragment() + } + } +} diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/UserInfoFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/other/UserInfoFragment.kt similarity index 99% rename from app/src/main/java/code/name/monkey/retromusic/fragments/UserInfoFragment.kt rename to app/src/main/java/code/name/monkey/retromusic/fragments/other/UserInfoFragment.kt index 063f04ef..30a96ebc 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/UserInfoFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/other/UserInfoFragment.kt @@ -12,7 +12,7 @@ * See the GNU General Public License for more details. * */ -package code.name.monkey.retromusic.fragments +package code.name.monkey.retromusic.fragments.other import android.app.Activity import android.content.Intent diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/other/VolumeFragment.kt old mode 100755 new mode 100644 similarity index 99% rename from app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt rename to app/src/main/java/code/name/monkey/retromusic/fragments/other/VolumeFragment.kt index 27c8b92a..89d3f530 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/other/VolumeFragment.kt @@ -12,7 +12,7 @@ * See the GNU General Public License for more details. * */ -package code.name.monkey.retromusic.fragments +package code.name.monkey.retromusic.fragments.other import android.content.Context import android.graphics.Color diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerFragment.kt index 34f30bd2..78b84e5d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerFragment.kt @@ -38,11 +38,11 @@ import code.name.monkey.retromusic.adapter.song.PlayingQueueAdapter import code.name.monkey.retromusic.databinding.FragmentClassicPlayerBinding import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show -import code.name.monkey.retromusic.fragments.VolumeFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.base.goToAlbum import code.name.monkey.retromusic.fragments.base.goToArtist +import code.name.monkey.retromusic.fragments.other.VolumeFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper 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 eb7c5e0f..80a26abd 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 @@ -21,7 +21,6 @@ import android.view.View import androidx.appcompat.widget.Toolbar import androidx.core.animation.doOnEnd 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.databinding.FragmentColorPlayerBinding 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 803d5171..113b1106 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 @@ -43,11 +43,11 @@ 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.fragments.VolumeFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.base.goToAlbum import code.name.monkey.retromusic.fragments.base.goToArtist +import code.name.monkey.retromusic.fragments.other.VolumeFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler @@ -55,7 +55,6 @@ 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 3aed2af3..2be4a5c6 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,7 +36,6 @@ 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/queue/PlayingQueueFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/queue/PlayingQueueFragment.kt index 670fee51..447ce115 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 @@ -14,146 +14,185 @@ */ package code.name.monkey.retromusic.fragments.queue +import android.content.res.ColorStateList import android.os.Bundle import android.view.View -import androidx.appcompat.app.AppCompatActivity import androidx.navigation.findNavController +import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import code.name.monkey.appthemehelper.util.ColorUtil +import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.song.PlayingQueueAdapter -import code.name.monkey.retromusic.fragments.base.AbsRecyclerViewFragment +import code.name.monkey.retromusic.databinding.FragmentPlayingQueueBinding +import code.name.monkey.retromusic.extensions.accentColor +import code.name.monkey.retromusic.fragments.base.AbsMusicServiceFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote +import code.name.monkey.retromusic.util.MusicUtil +import code.name.monkey.retromusic.util.ThemedFastScroller import com.h6ah4i.android.widget.advrecyclerview.animator.DraggableItemAnimator import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager import com.h6ah4i.android.widget.advrecyclerview.swipeable.RecyclerViewSwipeManager import com.h6ah4i.android.widget.advrecyclerview.touchguard.RecyclerViewTouchActionGuardManager import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils -/** - * Created by hemanths on 2019-12-08. - */ -class PlayingQueueFragment : AbsRecyclerViewFragment() { +class PlayingQueueFragment : AbsMusicServiceFragment(R.layout.fragment_playing_queue) { - private lateinit var wrappedAdapter: RecyclerView.Adapter<*> + private var _binding: FragmentPlayingQueueBinding? = null + private val binding get() = _binding!! + private var wrappedAdapter: RecyclerView.Adapter<*>? = null private var recyclerViewDragDropManager: RecyclerViewDragDropManager? = null private var recyclerViewSwipeManager: RecyclerViewSwipeManager? = null private var recyclerViewTouchActionGuardManager: RecyclerViewTouchActionGuardManager? = null - override val titleRes: Int - get() = R.string.now_playing_queue - override val isShuffleVisible: Boolean - get() = false + private var playingQueueAdapter: PlayingQueueAdapter? = null + private lateinit var linearLayoutManager: LinearLayoutManager + + private fun getUpNextAndQueueTime(): String { + val duration = MusicPlayerRemote.getQueueDurationMillis(MusicPlayerRemote.position) + return MusicUtil.buildInfoString( + resources.getString(R.string.up_next), + MusicUtil.getReadableDurationString(duration) + ) + } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - setupRecyclerView() + _binding = FragmentPlayingQueueBinding.bind(view) + setupToolbar() - } + setUpRecyclerView() - private fun setupToolbar() { - toolbar().apply { - setNavigationOnClickListener { - findNavController().navigateUp() - } - setNavigationIcon(R.drawable.ic_keyboard_backspace_black) + binding.clearQueue.setOnClickListener { + MusicPlayerRemote.clearQueue() } + checkForPadding() } - private fun setupRecyclerView() { + private fun setUpRecyclerView() { recyclerViewTouchActionGuardManager = RecyclerViewTouchActionGuardManager() recyclerViewDragDropManager = RecyclerViewDragDropManager() recyclerViewSwipeManager = RecyclerViewSwipeManager() val animator = DraggableItemAnimator() animator.supportsChangeAnimations = false - wrappedAdapter = - recyclerViewDragDropManager?.createWrappedAdapter(adapter!!) as RecyclerView.Adapter<*> - wrappedAdapter = - recyclerViewSwipeManager?.createWrappedAdapter(wrappedAdapter) as RecyclerView.Adapter<*> - recyclerView().layoutManager = layoutManager - recyclerView().adapter = wrappedAdapter - recyclerView().itemAnimator = animator - recyclerViewTouchActionGuardManager?.attachRecyclerView(recyclerView()) - recyclerViewDragDropManager?.attachRecyclerView(recyclerView()) - recyclerViewSwipeManager?.attachRecyclerView(recyclerView()) - layoutManager?.scrollToPositionWithOffset(MusicPlayerRemote.position + 1, 0) - } - - override fun createLayoutManager(): LinearLayoutManager { - return LinearLayoutManager(requireContext()) - } - - override fun createAdapter(): PlayingQueueAdapter { - return PlayingQueueAdapter( - requireActivity() as AppCompatActivity, + playingQueueAdapter = PlayingQueueAdapter( + requireActivity(), MusicPlayerRemote.playingQueue.toMutableList(), MusicPlayerRemote.position, R.layout.item_queue ) + wrappedAdapter = recyclerViewDragDropManager?.createWrappedAdapter(playingQueueAdapter!!) + wrappedAdapter = wrappedAdapter?.let { recyclerViewSwipeManager?.createWrappedAdapter(it) } + + linearLayoutManager = LinearLayoutManager(requireContext()) + + binding.recyclerView.layoutManager = linearLayoutManager + binding.recyclerView.adapter = wrappedAdapter + binding.recyclerView.itemAnimator = animator + recyclerViewTouchActionGuardManager?.attachRecyclerView(binding.recyclerView) + recyclerViewDragDropManager?.attachRecyclerView(binding.recyclerView) + recyclerViewSwipeManager?.attachRecyclerView(binding.recyclerView) + linearLayoutManager.scrollToPositionWithOffset(MusicPlayerRemote.position + 1, 0) + + binding.recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() { + override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { + super.onScrolled(recyclerView, dx, dy) + if (dy > 0) { + binding.clearQueue.shrink() + } else if (dy < 0) { + binding.clearQueue.extend() + } + } + }) + ThemedFastScroller.create(binding.recyclerView) } - override fun onServiceConnected() { - super.onServiceConnected() - updateQueue() + private fun checkForPadding() { } override fun onQueueChanged() { - super.onQueueChanged() + if (MusicPlayerRemote.playingQueue.isEmpty()) { + findNavController().navigateUp() + return + } + checkForPadding() updateQueue() - mainActivity.hideBottomBar(true) + updateCurrentSong() + } + + override fun onMediaStoreChanged() { + updateQueue() + updateCurrentSong() + } + + private fun updateCurrentSong() { + binding.toolbar.subtitle = getUpNextAndQueueTime() } override fun onPlayingMetaChanged() { updateQueuePosition() - mainActivity.hideBottomBar(true) } private fun updateQueuePosition() { - adapter?.setCurrent(MusicPlayerRemote.position) + playingQueueAdapter?.setCurrent(MusicPlayerRemote.position) resetToCurrentPosition() + binding.toolbar.subtitle = getUpNextAndQueueTime() } private fun updateQueue() { - adapter?.swapDataSet(MusicPlayerRemote.playingQueue, MusicPlayerRemote.position) + playingQueueAdapter?.swapDataSet(MusicPlayerRemote.playingQueue, MusicPlayerRemote.position) resetToCurrentPosition() } private fun resetToCurrentPosition() { - recyclerView().stopScroll() - layoutManager?.scrollToPositionWithOffset(MusicPlayerRemote.position + 1, 0) + binding.recyclerView.stopScroll() + linearLayoutManager.scrollToPositionWithOffset(MusicPlayerRemote.position + 1, 0) } override fun onPause() { - recyclerViewDragDropManager?.cancelDrag() + if (recyclerViewDragDropManager != null) { + recyclerViewDragDropManager!!.cancelDrag() + } super.onPause() } - override val emptyMessage: Int - get() = R.string.no_playing_queue - - override fun onDestroyView() { - super.onDestroyView() + override fun onDestroy() { if (recyclerViewDragDropManager != null) { - recyclerViewDragDropManager?.release() + recyclerViewDragDropManager!!.release() recyclerViewDragDropManager = null } - if (recyclerViewSwipeManager != null) { recyclerViewSwipeManager?.release() recyclerViewSwipeManager = null } - - WrapperAdapterUtils.releaseAll(wrappedAdapter) + if (wrappedAdapter != null) { + WrapperAdapterUtils.releaseAll(wrappedAdapter) + wrappedAdapter = null + } + playingQueueAdapter = null + super.onDestroy() } - companion object { - @JvmField - val TAG: String = PlayingQueueFragment::class.java.simpleName - - @JvmStatic - fun newInstance(): PlayingQueueFragment { - return PlayingQueueFragment() + private fun setupToolbar() { + binding.toolbar.subtitle = getUpNextAndQueueTime() + binding.clearQueue.backgroundTintList = ColorStateList.valueOf(accentColor()) + ColorStateList.valueOf( + MaterialValueHelper.getPrimaryTextColor( + requireContext(), + ColorUtil.isColorLight(accentColor()) + ) + ).apply { + binding.clearQueue.setTextColor(this) + binding.clearQueue.iconTint = this + } + binding.toolbar.apply { + setNavigationOnClickListener { + findNavController().navigateUp() + } + setNavigationIcon(R.drawable.ic_keyboard_backspace_black) } } } + diff --git a/app/src/main/res/layout-sw600dp/activity_playing_queue.xml b/app/src/main/res/layout-sw600dp/fragment_playing_queue.xml similarity index 100% rename from app/src/main/res/layout-sw600dp/activity_playing_queue.xml rename to app/src/main/res/layout-sw600dp/fragment_playing_queue.xml diff --git a/app/src/main/res/layout/activity_playing_queue.xml b/app/src/main/res/layout/fragment_playing_queue.xml old mode 100755 new mode 100644 similarity index 100% rename from app/src/main/res/layout/activity_playing_queue.xml rename to app/src/main/res/layout/fragment_playing_queue.xml 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 131d34b4..9b40ae73 100644 --- a/app/src/main/res/layout/sliding_music_panel_layout.xml +++ b/app/src/main/res/layout/sliding_music_panel_layout.xml @@ -40,7 +40,7 @@ diff --git a/app/src/main/res/navigation/main_graph.xml b/app/src/main/res/navigation/main_graph.xml index 4b7150c1..499f527f 100644 --- a/app/src/main/res/navigation/main_graph.xml +++ b/app/src/main/res/navigation/main_graph.xml @@ -62,7 +62,7 @@ + android:name="code.name.monkey.retromusic.fragments.other.UserInfoFragment" /> + android:name="code.name.monkey.retromusic.fragments.other.LyricsFragment" /> \ No newline at end of file