diff --git a/app/build.gradle b/app/build.gradle index d355e7076..b2d7efc15 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -165,6 +165,6 @@ dependencies { implementation 'com.github.dhaval2404:imagepicker:2.1' implementation 'me.zhanghai.android.fastscroll:library:1.1.8' implementation 'cat.ereza:customactivityoncrash:2.3.0' - implementation 'me.tankery.lib:circularSeekBar:1.3.2' - debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.9.1' + implementation 'me.tankery.lib:circularSeekBar:1.4.0' + //debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.9.1' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f1449cd37..3c45688e8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -116,7 +116,6 @@ - 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 59532ab49..3818186d3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/Constants.kt +++ b/app/src/main/java/code/name/monkey/retromusic/Constants.kt @@ -88,12 +88,7 @@ const val CIRCULAR_ALBUM_ART = "circular_album_art" const val USER_NAME = "user_name" const val TOGGLE_FULL_SCREEN = "toggle_full_screen" const val TOGGLE_VOLUME = "toggle_volume" -const val ROUND_CORNERS = "corner_window" -const val TOGGLE_GENRE = "toggle_genre" -const val PROFILE_IMAGE_PATH = "profile_image_path" -const val BANNER_IMAGE_PATH = "banner_image_path" const val ADAPTIVE_COLOR_APP = "adaptive_color_app" -const val TOGGLE_SEPARATE_LINE = "toggle_separate_line" const val HOME_ARTIST_GRID_STYLE = "home_artist_grid_style" const val HOME_ALBUM_GRID_STYLE = "home_album_grid_style" const val TOGGLE_ADD_CONTROLS = "toggle_add_controls" @@ -108,7 +103,6 @@ const val SAF_SDCARD_URI = "saf_sdcard_uri" const val SONG_SORT_ORDER = "song_sort_order" const val SONG_GRID_SIZE = "song_grid_size" const val GENRE_SORT_ORDER = "genre_sort_order" -const val LAST_PAGE = "last_start_page" const val BLUETOOTH_PLAYBACK = "bluetooth_playback" const val INITIALIZED_BLACKLIST = "initialized_blacklist" const val ARTIST_SORT_ORDER = "artist_sort_order" 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 b338915ea..4a147b5f0 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 @@ -15,18 +15,17 @@ package code.name.monkey.retromusic.activities import android.content.Intent -import android.content.SharedPreferences -import android.content.SharedPreferences.OnSharedPreferenceChangeListener 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.R import code.name.monkey.retromusic.activities.base.AbsCastActivity import code.name.monkey.retromusic.databinding.SlidingMusicPanelLayoutBinding import code.name.monkey.retromusic.extensions.* +import code.name.monkey.retromusic.fragments.settings.OnThemeChangedListener import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.SearchQueryHelper.getSongs import code.name.monkey.retromusic.interfaces.IScrollHelper @@ -40,7 +39,7 @@ import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.launch import org.koin.android.ext.android.get -class MainActivity : AbsCastActivity(), OnSharedPreferenceChangeListener { +class MainActivity : AbsCastActivity(), OnThemeChangedListener { companion object { const val TAG = "MainActivity" const val EXPAND_PANEL = "expand_panel" @@ -137,20 +136,18 @@ class MainActivity : AbsCastActivity(), OnSharedPreferenceChangeListener { } } - override fun onResume() { - super.onResume() - PreferenceUtil.registerOnSharedPreferenceChangedListener(this) + override fun onThemeValuesChanged() { + restart() } - override fun onDestroy() { - super.onDestroy() - PreferenceUtil.unregisterOnSharedPreferenceChangedListener(this) - } - - override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) { - if (key == GENERAL_THEME || key == MATERIAL_YOU || key == WALLPAPER_ACCENT || key == BLACK_THEME || key == ADAPTIVE_COLOR_APP || key == USER_NAME || key == TOGGLE_FULL_SCREEN || key == TOGGLE_VOLUME || key == ROUND_CORNERS || key == CAROUSEL_EFFECT || key == NOW_PLAYING_SCREEN_ID || key == TOGGLE_GENRE || key == BANNER_IMAGE_PATH || key == PROFILE_IMAGE_PATH || key == CIRCULAR_ALBUM_ART || key == KEEP_SCREEN_ON || key == TOGGLE_SEPARATE_LINE || key == TOGGLE_HOME_BANNER || key == TOGGLE_ADD_CONTROLS || key == ALBUM_COVER_STYLE || key == HOME_ARTIST_GRID_STYLE || key == ALBUM_COVER_TRANSFORM || key == DESATURATED_COLOR || key == EXTRA_SONG_INFO || key == TAB_TEXT_MODE || key == LANGUAGE_NAME || key == LIBRARY_CATEGORIES || key == CUSTOM_FONT || key == APPBAR_MODE || key == CIRCLE_PLAY_BUTTON || key == SWIPE_DOWN_DISMISS) { - postRecreate() + private fun restart() { + val savedInstanceState = Bundle().apply { + onSaveInstanceState(this) } + finish() + val intent = Intent(this, this::class.java).putExtra(TAG, savedInstanceState) + startActivity(intent) + overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out) } override fun onServiceConnected() { 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 7130f3901..c6a0e2106 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 @@ -16,6 +16,7 @@ package code.name.monkey.retromusic.activities.base import android.animation.ArgbEvaluator import android.animation.ValueAnimator +import android.content.SharedPreferences import android.content.res.ColorStateList import android.graphics.Color import android.os.Bundle @@ -29,7 +30,7 @@ import androidx.core.view.* import androidx.fragment.app.Fragment import androidx.fragment.app.commit import code.name.monkey.appthemehelper.util.VersionUtils -import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.* import code.name.monkey.retromusic.databinding.SlidingMusicPanelLayoutBinding import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.fragments.LibraryViewModel @@ -65,7 +66,8 @@ import com.google.android.material.bottomsheet.BottomSheetBehavior.* import org.koin.androidx.viewmodel.ext.android.viewModel -abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { +abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), + SharedPreferences.OnSharedPreferenceChangeListener { companion object { val TAG: String = AbsSlidingMusicPanelActivity::class.java.simpleName } @@ -166,6 +168,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { override fun onResume() { super.onResume() + PreferenceUtil.registerOnSharedPreferenceChangedListener(this) if (nowPlayingScreen != PreferenceUtil.nowPlayingScreen) { postRecreate() } @@ -177,6 +180,46 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { override fun onDestroy() { super.onDestroy() bottomSheetBehavior.removeBottomSheetCallback(bottomSheetCallbackList) + PreferenceUtil.unregisterOnSharedPreferenceChangedListener(this) + } + + override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) { + when (key) { + SWIPE_DOWN_DISMISS -> { + bottomSheetBehavior.isHideable = PreferenceUtil.swipeDownToDismiss + } + TOGGLE_ADD_CONTROLS -> { + miniPlayerFragment?.setUpButtons() + } + NOW_PLAYING_SCREEN_ID, ALBUM_COVER_TRANSFORM, CAROUSEL_EFFECT, + ALBUM_COVER_STYLE, TOGGLE_VOLUME, EXTRA_SONG_INFO, CIRCLE_PLAY_BUTTON, + -> { + chooseFragmentForTheme() + onServiceConnected() + } + ADAPTIVE_COLOR_APP -> { + if (PreferenceUtil.nowPlayingScreen in listOf(Normal, Material, Flat)) { + chooseFragmentForTheme() + onServiceConnected() + } + } + LIBRARY_CATEGORIES -> { + updateTabs() + } + TAB_TEXT_MODE -> { + bottomNavigationView.labelVisibilityMode = PreferenceUtil.tabTitleMode + } + TOGGLE_FULL_SCREEN -> { + if (!PreferenceUtil.isFullScreenMode) exitFullscreen() + setEdgeToEdgeOrImmersive() + } + SCREEN_ON_LYRICS -> { + keepScreenOn(bottomSheetBehavior.state == STATE_EXPANDED && PreferenceUtil.lyricsScreenOn && PreferenceUtil.showLyrics || PreferenceUtil.isScreenOnEnabled) + } + KEEP_SCREEN_ON -> { + maybeSetScreenOn() + } + } } protected fun wrapSlidingMusicPanel(): SlidingMusicPanelLayoutBinding { @@ -367,18 +410,20 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { ) return } - val mAnimate = animate && bottomSheetBehavior.state == STATE_COLLAPSED - if (mAnimate) { - if (visible) { - binding.bottomNavigationView.bringToFront() - binding.bottomNavigationView.show() + if (visible xor bottomNavigationView.isVisible) { + val mAnimate = animate && bottomSheetBehavior.state == STATE_COLLAPSED + if (mAnimate) { + if (visible) { + binding.bottomNavigationView.bringToFront() + binding.bottomNavigationView.show() + } else { + binding.bottomNavigationView.hide() + } } else { - binding.bottomNavigationView.hide() - } - } else { - binding.bottomNavigationView.isVisible = false - if (visible && bottomSheetBehavior.state != STATE_EXPANDED) { - binding.bottomNavigationView.bringToFront() + binding.bottomNavigationView.isVisible = false + if (visible && bottomSheetBehavior.state != STATE_EXPANDED) { + binding.bottomNavigationView.bringToFront() + } } } hideBottomSheet( @@ -393,10 +438,10 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { animate: Boolean = false, isBottomNavVisible: Boolean = bottomNavigationView.isVisible, ) { - val heightOfBar = windowInsets.safeGetBottomInsets() + dip(R.dimen.mini_player_height) + val heightOfBar = windowInsets.getBottomInsets() + dip(R.dimen.mini_player_height) val heightOfBarWithTabs = heightOfBar + dip(R.dimen.bottom_nav_height) if (hide) { - bottomSheetBehavior.peekHeight = -windowInsets.safeGetBottomInsets() + bottomSheetBehavior.peekHeight = -windowInsets.getBottomInsets() bottomSheetBehavior.state = STATE_COLLAPSED libraryViewModel.setFabMargin( this, @@ -458,7 +503,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { Classic -> ClassicPlayerFragment() MD3 -> MD3PlayerFragment() else -> PlayerFragment() - } // must implement AbsPlayerFragment + } // must extend AbsPlayerFragment supportFragmentManager.commit { replace(R.id.playerFragmentContainer, fragment) } 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 5e7a8f8eb..20e499e94 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 @@ -44,7 +44,7 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable { super.onCreate(savedInstanceState) setEdgeToEdgeOrImmersive() registerSystemUiVisibility() - toggleScreenOn() + maybeSetScreenOn() setLightNavigationBarAuto() setLightStatusBarAuto(surfaceColor()) if (VersionUtils.hasQ()) { @@ -61,9 +61,6 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable { if (PreferenceUtil.isCustomFont) { setTheme(R.style.FontThemeOverlay) } - if (PreferenceUtil.circlePlayButton) { - setTheme(R.style.CircleFABOverlay) - } } override fun onWindowFocusChanged(hasFocus: Boolean) { diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityThemeExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityThemeExtensions.kt index c4a5c7ee8..d6c5a559d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityThemeExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityThemeExtensions.kt @@ -16,7 +16,7 @@ import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.util.PreferenceUtil -fun AppCompatActivity.toggleScreenOn() { +fun AppCompatActivity.maybeSetScreenOn() { if (PreferenceUtil.isScreenOnEnabled) { window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } else { 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 bc2f1bde9..70c8a10f4 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 @@ -4,7 +4,7 @@ import androidx.core.view.WindowInsetsCompat import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.RetroUtil -fun WindowInsetsCompat?.safeGetBottomInsets(): Int { +fun WindowInsetsCompat?.getBottomInsets(): Int { return if (PreferenceUtil.isFullScreenMode) { return 0 } else { 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 0147255a0..fba21e4ce 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 @@ -119,6 +119,11 @@ fun BottomNavigationView.show() { fun BottomNavigationView.hide() { if (isGone) return + if (!isLaidOut) { + isGone = true + return + } + val drawable = BitmapDrawable(context.resources, drawToBitmap()) val parent = parent as ViewGroup drawable.setBounds(left, top, right, bottom) @@ -255,7 +260,7 @@ fun View.updateMargin( @Px left: Int = marginLeft, @Px top: Int = marginTop, @Px right: Int = marginRight, - @Px bottom: Int = marginBottom + @Px bottom: Int = marginBottom, ) { (layoutParams as ViewGroup.MarginLayoutParams).updateMargins(left, top, right, bottom) } @@ -296,7 +301,7 @@ fun View.requestApplyInsetsWhenAttached() { data class InitialPadding( val left: Int, val top: Int, - val right: Int, val bottom: Int + val right: Int, val bottom: Int, ) fun recordInitialPaddingForView(view: View) = InitialPadding( diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt index 8a8069d2f..20e1ccceb 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt @@ -163,8 +163,10 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme R.id.now_playing -> { requireActivity().findNavController(R.id.fragment_container).navigate( R.id.playing_queue_fragment, - null + null, + navOptions { launchSingleTop = true } ) + mainActivity.collapsePanel() return true } R.id.action_show_lyrics -> { @@ -289,6 +291,15 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme } } + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + if (PreferenceUtil.circlePlayButton) { + requireContext().theme.applyStyle(R.style.CircleFABOverlay, true) + } else { + requireContext().theme.applyStyle(R.style.RoundedFABOverlay, true) + } + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) if (PreferenceUtil.isFullScreenMode && @@ -421,8 +432,7 @@ fun goToLyrics(activity: Activity) { findNavController(R.id.fragment_container).navigate( R.id.lyrics_fragment, null, - navOptions { launchSingleTop = true }, - null + navOptions { launchSingleTop = true } ) } } \ No newline at end of file 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 a3004be8b..e96379512 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 @@ -216,7 +216,7 @@ abstract class AbsRecyclerViewFragment, LM : Recycle override fun onMenuItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.action_settings -> findNavController().navigate( - R.id.settingsActivity, + R.id.settings_fragment, null, navOptions ) 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 d1a70aeb3..48b89c66e 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 @@ -374,7 +374,7 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder), } R.id.action_settings -> { findNavController().navigate( - R.id.settingsActivity, + R.id.settings_fragment, null, navOptions ) 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 0992eb06a..b160361bc 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 @@ -47,6 +47,7 @@ import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.interfaces.IScrollHelper import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.PreferenceUtil.userName import com.google.android.gms.cast.framework.CastButtonFactory import com.google.android.material.shape.MaterialShapeDrawable @@ -221,7 +222,7 @@ class HomeFragment : } private fun loadSuggestions(songs: List) { - if (songs.isEmpty()) { + if (!PreferenceUtil.homeSuggestions || songs.isEmpty()) { binding.suggestions.root.isVisible = false return } @@ -277,7 +278,7 @@ class HomeFragment : override fun onMenuItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.action_settings -> findNavController().navigate( - R.id.settingsActivity, + R.id.settings_fragment, null, navOptions ) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/library/LibraryFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/library/LibraryFragment.kt index 41f465fd1..e70047a3e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/library/LibraryFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/library/LibraryFragment.kt @@ -105,7 +105,7 @@ class LibraryFragment : AbsMainActivityFragment(R.layout.fragment_library) { override fun onMenuItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.action_settings -> findNavController().navigate( - R.id.settingsActivity, + R.id.settings_fragment, null, navOptions ) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/other/MiniPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/other/MiniPlayerFragment.kt index d4eebd6d2..fe3180e64 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/other/MiniPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/other/MiniPlayerFragment.kt @@ -66,7 +66,10 @@ open class MiniPlayerFragment : AbsMusicServiceFragment(R.layout.fragment_mini_p _binding = FragmentMiniPlayerBinding.bind(view) view.setOnTouchListener(FlingPlayBackController(requireContext())) setUpMiniPlayer() + setUpButtons() + } + fun setUpButtons() { if (RetroUtil.isTablet) { binding.actionNext.show() binding.actionPrevious.show() diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt index e99ad40cc..ace1d8873 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt @@ -28,9 +28,7 @@ import androidx.preference.PreferenceManager import androidx.viewpager.widget.ViewPager import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper -import code.name.monkey.retromusic.LYRICS_TYPE -import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.SHOW_LYRICS +import code.name.monkey.retromusic.* import code.name.monkey.retromusic.adapter.album.AlbumCoverPagerAdapter import code.name.monkey.retromusic.adapter.album.AlbumCoverPagerAdapter.AlbumCoverFragment import code.name.monkey.retromusic.databinding.FragmentPlayerAlbumCoverBinding @@ -115,6 +113,22 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(R.layout.fragment_playe override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = FragmentPlayerAlbumCoverBinding.bind(view) + setupViewPager() + progressViewUpdateHelper = MusicProgressViewUpdateHelper(this, 500, 1000) + maybeInitLyrics() + lrcView.apply { + setDraggable(true) { time -> + MusicPlayerRemote.seekTo(time.toInt()) + MusicPlayerRemote.resumePlaying() + true + } + setOnClickListener { + goToLyrics(requireActivity()) + } + } + } + + private fun setupViewPager() { binding.viewPager.addOnPageChangeListener(this) val nps = PreferenceUtil.nowPlayingScreen @@ -140,18 +154,6 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(R.layout.fragment_playe PreferenceUtil.albumCoverTransform ) } - progressViewUpdateHelper = MusicProgressViewUpdateHelper(this, 500, 1000) - maybeInitLyrics() - lrcView.apply { - setDraggable(true) { time -> - MusicPlayerRemote.seekTo(time.toInt()) - MusicPlayerRemote.resumePlaying() - true - } - setOnClickListener { - goToLyrics(requireActivity()) - } - } } override fun onResume() { @@ -185,15 +187,18 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(R.layout.fragment_playe } override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String?) { - if (key == SHOW_LYRICS) { - if (sharedPreferences.getBoolean(key, false)) { - maybeInitLyrics() - } else { - showLyrics(false) - progressViewUpdateHelper?.stop() + when (key) { + SHOW_LYRICS -> { + if (PreferenceUtil.showLyrics) { + maybeInitLyrics() + } else { + showLyrics(false) + progressViewUpdateHelper?.stop() + } + } + LYRICS_TYPE -> { + maybeInitLyrics() } - } else if (key == LYRICS_TYPE) { - maybeInitLyrics() } } 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 541010167..15a3ccc66 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 @@ -161,7 +161,7 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play ViewCompat.setOnApplyWindowInsetsListener( (binding.container) ) { v: View, insets: WindowInsetsCompat -> - navBarHeight = insets.safeGetBottomInsets() + navBarHeight = insets.getBottomInsets() v.updatePadding(bottom = navBarHeight) insets } 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 fba9d5c4a..4a29ca229 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 @@ -50,6 +50,9 @@ class PlayingQueueFragment : AbsMusicServiceFragment(R.layout.fragment_playing_q private var playingQueueAdapter: PlayingQueueAdapter? = null private lateinit var linearLayoutManager: LinearLayoutManager + val mainActivity: MainActivity + get() = activity as MainActivity + private fun getUpNextAndQueueTime(): String { val duration = MusicPlayerRemote.getQueueDurationMillis(MusicPlayerRemote.position) return MusicUtil.buildInfoString( @@ -69,6 +72,7 @@ class PlayingQueueFragment : AbsMusicServiceFragment(R.layout.fragment_playing_q MusicPlayerRemote.clearQueue() } checkForPadding() + mainActivity.collapsePanel() } private fun setUpRecyclerView() { @@ -175,7 +179,7 @@ class PlayingQueueFragment : AbsMusicServiceFragment(R.layout.fragment_playing_q playingQueueAdapter = null super.onDestroy() if (MusicPlayerRemote.playingQueue.isNotEmpty()) - (requireActivity() as MainActivity).expandPanel() + mainActivity.expandPanel() } private fun setupToolbar() { 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 0b8632826..2441d1e9b 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 @@ -25,7 +25,6 @@ import androidx.preference.PreferenceManager import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEPreferenceFragmentCompat import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.activities.OnThemeChangedListener import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.preferences.* import code.name.monkey.retromusic.util.NavigationUtil diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonalizeSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonalizeSettingsFragment.kt index 3ebd069cd..3de0fafc3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonalizeSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonalizeSettingsFragment.kt @@ -22,18 +22,12 @@ import code.name.monkey.retromusic.* class PersonalizeSettingsFragment : AbsSettingsFragment() { - override fun invalidateSettings() { - val toggleFullScreen: TwoStatePreference? = findPreference(TOGGLE_FULL_SCREEN) - toggleFullScreen?.setOnPreferenceChangeListener { _, _ -> - restartActivity() - true - } - } - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { addPreferencesFromResource(R.xml.pref_ui) } + override fun invalidateSettings() {} + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val homeArtistStyle: ATEListPreference? = findPreference(HOME_ARTIST_GRID_STYLE) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/SettingsFragment.kt similarity index 60% rename from app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt rename to app/src/main/java/code/name/monkey/retromusic/fragments/settings/SettingsFragment.kt index fd273b40c..1f728fe9b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/SettingsFragment.kt @@ -12,42 +12,44 @@ * See the GNU General Public License for more details. * */ -package code.name.monkey.retromusic.activities +package code.name.monkey.retromusic.fragments.settings -import android.Manifest.permission.BLUETOOTH_CONNECT -import android.content.Intent import android.os.Bundle -import android.view.MenuItem +import android.view.View +import androidx.core.view.updatePadding import androidx.navigation.NavController 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.appshortcuts.DynamicShortcutManager -import code.name.monkey.retromusic.databinding.ActivitySettingsBinding +import code.name.monkey.retromusic.databinding.FragmentSettingsBinding import code.name.monkey.retromusic.extensions.* +import code.name.monkey.retromusic.fragments.base.AbsMusicServiceFragment +import code.name.monkey.retromusic.helper.MusicPlayerRemote import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.color.ColorCallback -class SettingsActivity : AbsBaseActivity(), ColorCallback, OnThemeChangedListener { - private lateinit var binding: ActivitySettingsBinding +class SettingsFragment : AbsMusicServiceFragment(R.layout.fragment_settings), ColorCallback { + private var _binding: FragmentSettingsBinding? = null + private val binding get() = _binding!! + override fun onCreate(savedInstanceState: Bundle?) { val mSavedInstanceState = extra(TAG).value ?: savedInstanceState super.onCreate(mSavedInstanceState) - binding = ActivitySettingsBinding.inflate(layoutInflater) - setContentView(binding.root) - setupToolbar() - setPermissionDeniedMessage(getString(R.string.permission_bluetooth_denied)) } - override fun onResume() { - super.onResume() - setNavigationBarColorPreOreo(surfaceColor()) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + _binding = FragmentSettingsBinding.bind(view) + setupToolbar() + updateBottomPadding() } private fun setupToolbar() { applyToolbar(binding.toolbar) + binding.toolbar.setNavigationOnClickListener { + requireActivity().onBackPressed() + } val navController: NavController = findNavController(R.id.contentFrame) navController.addOnDestinationChangedListener { _, _, _ -> binding.collapsingToolbarLayout.title = @@ -72,48 +74,32 @@ class SettingsActivity : AbsBaseActivity(), ColorCallback, OnThemeChangedListene return getString(idRes) } - override fun onSupportNavigateUp(): Boolean { - return findNavController(R.id.contentFrame).navigateUp() || super.onSupportNavigateUp() - } - - override fun onOptionsItemSelected(item: MenuItem): Boolean { - if (item.itemId == android.R.id.home) { - onBackPressed() - } - return super.onOptionsItemSelected(item) - } - - override fun getPermissionsToRequest(): Array { - return if (VersionUtils.hasS()) { - arrayOf(BLUETOOTH_CONNECT) - } else { - arrayOf() - } - } - override fun invoke(dialog: MaterialDialog, color: Int) { - ThemeStore.editTheme(this).accentColor(color).commit() + ThemeStore.editTheme(requireContext()).accentColor(color).commit() if (VersionUtils.hasNougatMR()) - DynamicShortcutManager(this).updateDynamicShortcuts() - restart() + DynamicShortcutManager(requireContext()).updateDynamicShortcuts() + restartActivity() } - override fun onThemeValuesChanged() { - restart() - } - - private fun restart() { - val savedInstanceState = Bundle().apply { - onSaveInstanceState(this) + fun restartActivity() { + if (activity is OnThemeChangedListener && !VersionUtils.hasS()) { + (activity as OnThemeChangedListener).onThemeValuesChanged() + } else { + activity?.recreate() } - finish() - val intent = Intent(this, this::class.java).putExtra(TAG, savedInstanceState) - startActivity(intent) - overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out) + } + + override fun onQueueChanged() { + updateBottomPadding() + } + + private fun updateBottomPadding() { + binding.root.updatePadding( + bottom = if (MusicPlayerRemote.playingQueue.isEmpty()) 0 else dip(R.dimen.mini_player_height)) } companion object { - val TAG: String = SettingsActivity::class.java.simpleName + val TAG: String = SettingsFragment::class.java.simpleName } } 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 6d339be7c..f0be5ae6b 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 @@ -29,6 +29,9 @@ import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.* import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager import code.name.monkey.retromusic.extensions.materialDialog +import code.name.monkey.retromusic.fragments.NowPlayingScreen.Normal +import code.name.monkey.retromusic.fragments.NowPlayingScreen.Material +import code.name.monkey.retromusic.fragments.NowPlayingScreen.Flat import code.name.monkey.retromusic.util.PreferenceUtil import com.afollestad.materialdialogs.color.colorChooser import com.google.android.material.color.DynamicColors @@ -130,6 +133,10 @@ class ThemeSettingsFragment : AbsSettingsFragment() { restartActivity() true } + + val adaptiveColor: ATESwitchPreference? = findPreference(ADAPTIVE_COLOR_APP) + adaptiveColor?.isEnabled = + PreferenceUtil.nowPlayingScreen in listOf(Normal, Material, Flat) } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { 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 fdbcb48e9..a49f5ccef 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 @@ -377,7 +377,6 @@ class RealRepository( } override suspend fun suggestions(): List { - if (!PreferenceUtil.homeSuggestions) return listOf() return NotPlayedPlaylist().songs().shuffled().takeIf { it.size > 9 } ?: emptyList() diff --git a/app/src/main/java/code/name/monkey/retromusic/views/HomeImageLayout.kt b/app/src/main/java/code/name/monkey/retromusic/views/HomeImageLayout.kt index 1a84dc8e5..015bf3951 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/HomeImageLayout.kt +++ b/app/src/main/java/code/name/monkey/retromusic/views/HomeImageLayout.kt @@ -20,7 +20,7 @@ class HomeImageLayout @JvmOverloads constructor( private var bannerImageBinding: BannerImageLayoutBinding? = null init { - if (PreferenceUtil.isHomeBanner) { + if (isInEditMode || PreferenceUtil.isHomeBanner) { bannerImageBinding = BannerImageLayoutBinding.inflate(LayoutInflater.from(context), this, true) } else { userImageBinding = UserImageLayoutBinding.inflate(LayoutInflater.from(context), this, true) diff --git a/app/src/main/res/layout/fragment_folder.xml b/app/src/main/res/layout/fragment_folder.xml index 6521a4a0a..2fae59bce 100644 --- a/app/src/main/res/layout/fragment_folder.xml +++ b/app/src/main/res/layout/fragment_folder.xml @@ -7,7 +7,16 @@ android:fitsSystemWindows="true" android:transitionGroup="true"> - + + - + - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/fragment_settings.xml similarity index 100% rename from app/src/main/res/layout/activity_settings.xml rename to app/src/main/res/layout/fragment_settings.xml diff --git a/app/src/main/res/navigation/main_graph.xml b/app/src/main/res/navigation/main_graph.xml index 63ecf9dc7..b6c840c52 100644 --- a/app/src/main/res/navigation/main_graph.xml +++ b/app/src/main/res/navigation/main_graph.xml @@ -75,10 +75,9 @@ android:label="SearchFragment" tools:layout="@layout/fragment_search" /> - + 20dp - 48dp 112dp @@ -13,10 +12,8 @@ 8dp 56dp - 64dp 128dp - 136dp 72dp diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 9452f0649..6e466ba72 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -247,5 +247,11 @@ + +