Added Collapsing appbar to library tabs with an option to switch back to simple appbar
This commit is contained in:
parent
ffd251ab62
commit
b2e1ab2128
12 changed files with 159 additions and 46 deletions
|
@ -158,3 +158,4 @@ const val LYRICS_TYPE = "lyrics_type"
|
|||
const val PLAYBACK_SPEED = "playback_speed"
|
||||
const val PLAYBACK_PITCH = "playback_pitch"
|
||||
const val CUSTOM_FONT = "custom_font"
|
||||
const val APPBAR_MODE = "appbar_mode"
|
||||
|
|
|
@ -147,7 +147,7 @@ class MainActivity : AbsCastActivity(), OnSharedPreferenceChangeListener {
|
|||
}
|
||||
|
||||
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
|
||||
if (key == GENERAL_THEME || key == MATERIAL_YOU || 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) {
|
||||
if (key == GENERAL_THEME || key == MATERIAL_YOU || 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) {
|
||||
postRecreate()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,12 +32,10 @@ import code.name.monkey.retromusic.dialogs.CreatePlaylistDialog
|
|||
import code.name.monkey.retromusic.dialogs.ImportPlaylistDialog
|
||||
import code.name.monkey.retromusic.extensions.accentColor
|
||||
import code.name.monkey.retromusic.extensions.dip
|
||||
import code.name.monkey.retromusic.extensions.drawNextToNavbar
|
||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||
import code.name.monkey.retromusic.interfaces.IScrollHelper
|
||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||
import code.name.monkey.retromusic.util.ThemedFastScroller.create
|
||||
import com.google.android.material.shape.MaterialShapeDrawable
|
||||
import com.google.android.material.transition.MaterialFadeThrough
|
||||
import me.zhanghai.android.fastscroll.FastScroller
|
||||
import me.zhanghai.android.fastscroll.FastScrollerBuilder
|
||||
|
@ -59,7 +57,7 @@ abstract class AbsRecyclerViewFragment<A : RecyclerView.Adapter<*>, LM : Recycle
|
|||
view.doOnPreDraw { startPostponedEnterTransition() }
|
||||
enterTransition = MaterialFadeThrough().addTarget(binding.recyclerView)
|
||||
reenterTransition = MaterialFadeThrough().addTarget(binding.recyclerView)
|
||||
mainActivity.setSupportActionBar(binding.toolbar)
|
||||
mainActivity.setSupportActionBar(toolbar)
|
||||
mainActivity.supportActionBar?.title = null
|
||||
initLayoutManager()
|
||||
initAdapter()
|
||||
|
@ -98,12 +96,10 @@ abstract class AbsRecyclerViewFragment<A : RecyclerView.Adapter<*>, LM : Recycle
|
|||
open fun onShuffleClicked() {
|
||||
}
|
||||
|
||||
fun toolbar(): Toolbar {
|
||||
return binding.toolbar
|
||||
}
|
||||
val toolbar: Toolbar get() = binding.appBarLayout.toolbar
|
||||
|
||||
private fun setupToolbar() {
|
||||
binding.toolbar.setNavigationOnClickListener {
|
||||
toolbar.setNavigationOnClickListener {
|
||||
findNavController().navigate(
|
||||
R.id.action_search,
|
||||
null,
|
||||
|
@ -111,10 +107,8 @@ abstract class AbsRecyclerViewFragment<A : RecyclerView.Adapter<*>, LM : Recycle
|
|||
)
|
||||
}
|
||||
val appName = resources.getString(titleRes)
|
||||
binding.appNameText.text = appName
|
||||
binding.toolbarContainer.drawNextToNavbar()
|
||||
binding.appBarLayout.statusBarForeground =
|
||||
MaterialShapeDrawable.createWithElevationOverlay(requireContext())
|
||||
binding.appBarLayout.title = appName
|
||||
//toolbarContainer.drawNextToNavbar()
|
||||
}
|
||||
|
||||
abstract val titleRes: Int
|
||||
|
@ -208,7 +202,7 @@ abstract class AbsRecyclerViewFragment<A : RecyclerView.Adapter<*>, LM : Recycle
|
|||
|
||||
override fun onPrepareOptionsMenu(menu: Menu) {
|
||||
super.onPrepareOptionsMenu(menu)
|
||||
ToolbarContentTintHelper.handleOnPrepareOptionsMenu(requireActivity(), binding.toolbar)
|
||||
ToolbarContentTintHelper.handleOnPrepareOptionsMenu(requireActivity(), toolbar)
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
||||
|
@ -216,9 +210,9 @@ abstract class AbsRecyclerViewFragment<A : RecyclerView.Adapter<*>, LM : Recycle
|
|||
inflater.inflate(R.menu.menu_main, menu)
|
||||
ToolbarContentTintHelper.handleOnCreateOptionsMenu(
|
||||
requireContext(),
|
||||
binding.toolbar,
|
||||
toolbar,
|
||||
menu,
|
||||
ATHToolbarActivity.getToolbarBackgroundColor(binding.toolbar)
|
||||
ATHToolbarActivity.getToolbarBackgroundColor(toolbar)
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ class PlayingQueueRVFragment : AbsRecyclerViewFragment<PlayingQueueAdapter, Line
|
|||
}
|
||||
|
||||
private fun setupToolbar() {
|
||||
toolbar().apply {
|
||||
toolbar.apply {
|
||||
setNavigationOnClickListener {
|
||||
findNavController().navigateUp()
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ import code.name.monkey.retromusic.helper.SortOrder.*
|
|||
import code.name.monkey.retromusic.model.CategoryInfo
|
||||
import code.name.monkey.retromusic.transform.*
|
||||
import code.name.monkey.retromusic.util.theme.ThemeMode
|
||||
import code.name.monkey.retromusic.views.TopAppBarLayout
|
||||
import com.google.android.material.bottomnavigation.BottomNavigationView
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.JsonSyntaxException
|
||||
|
@ -133,7 +134,7 @@ object PreferenceUtil {
|
|||
|
||||
var artistDetailSongSortOrder
|
||||
get() = sharedPreferences.getStringOrDefault(
|
||||
ARTIST_DETAIL_SONG_SORT_ORDER,
|
||||
ARTIST_DETAIL_SONG_SORT_ORDER,
|
||||
ArtistSongSortOrder.SONG_A_Z
|
||||
)
|
||||
set(value) = sharedPreferences.edit { putString(ARTIST_DETAIL_SONG_SORT_ORDER, value) }
|
||||
|
@ -667,7 +668,7 @@ object PreferenceUtil {
|
|||
get() = sharedPreferences.getBoolean(MATERIAL_YOU, VersionUtils.hasS())
|
||||
|
||||
val isCustomFont
|
||||
get() = sharedPreferences.getBoolean(CUSTOM_FONT, false)
|
||||
get() = sharedPreferences.getBoolean(CUSTOM_FONT, false)
|
||||
|
||||
val isSnowFalling
|
||||
get() = sharedPreferences.getBoolean(SNOWFALL, false)
|
||||
|
@ -688,6 +689,13 @@ object PreferenceUtil {
|
|||
get() = sharedPreferences
|
||||
.getFloat(PLAYBACK_PITCH, 1F)
|
||||
set(value) = sharedPreferences.edit { putFloat(PLAYBACK_PITCH, value) }
|
||||
|
||||
val appBarMode: TopAppBarLayout.AppBarMode
|
||||
get() = if (sharedPreferences.getString(APPBAR_MODE, "0") == "0") {
|
||||
TopAppBarLayout.AppBarMode.COLLAPSING
|
||||
} else {
|
||||
TopAppBarLayout.AppBarMode.SIMPLE
|
||||
}
|
||||
}
|
||||
enum class LyricsType {
|
||||
REPLACE_LYRICS, OVER_LYRICS
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
package code.name.monkey.retromusic.views
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import code.name.monkey.retromusic.databinding.CollapsingAppbarLayoutBinding
|
||||
import code.name.monkey.retromusic.databinding.SimpleAppbarLayoutBinding
|
||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||
import com.google.android.material.appbar.AppBarLayout
|
||||
import com.google.android.material.shape.MaterialShapeDrawable
|
||||
|
||||
class TopAppBarLayout @JvmOverloads constructor(
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = -1,
|
||||
) : AppBarLayout(context, attrs, defStyleAttr) {
|
||||
private var simpleAppbarBinding: SimpleAppbarLayoutBinding? = null
|
||||
private var collapsingAppbarBinding: CollapsingAppbarLayoutBinding? = null
|
||||
|
||||
val mode: AppBarMode = PreferenceUtil.appBarMode
|
||||
|
||||
init {
|
||||
if (mode == AppBarMode.COLLAPSING) {
|
||||
collapsingAppbarBinding =
|
||||
CollapsingAppbarLayoutBinding.inflate(LayoutInflater.from(context), this, true)
|
||||
} else {
|
||||
simpleAppbarBinding =
|
||||
SimpleAppbarLayoutBinding.inflate(LayoutInflater.from(context), this, true)
|
||||
statusBarForeground = MaterialShapeDrawable.createWithElevationOverlay(context)
|
||||
}
|
||||
}
|
||||
|
||||
val toolbar: Toolbar
|
||||
get() = if (mode == AppBarMode.COLLAPSING) {
|
||||
collapsingAppbarBinding?.toolbar!!
|
||||
} else {
|
||||
simpleAppbarBinding?.toolbar!!
|
||||
}
|
||||
|
||||
var title: String
|
||||
get() = if (mode == AppBarMode.COLLAPSING) {
|
||||
collapsingAppbarBinding?.collapsingToolbarLayout?.title.toString()
|
||||
} else {
|
||||
simpleAppbarBinding?.appNameText?.text.toString()
|
||||
}
|
||||
set(value) {
|
||||
if (mode == AppBarMode.COLLAPSING) {
|
||||
collapsingAppbarBinding?.collapsingToolbarLayout?.title = value
|
||||
} else {
|
||||
simpleAppbarBinding?.appNameText?.text = value
|
||||
}
|
||||
}
|
||||
|
||||
enum class AppBarMode {
|
||||
COLLAPSING,
|
||||
SIMPLE
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue