PlayerAndroid/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt

116 lines
4.3 KiB
Kotlin

/*
* 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.settings
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.core.view.ViewCompat
import androidx.core.view.updatePadding
import androidx.preference.ListPreference
import androidx.preference.Preference
import androidx.preference.PreferenceManager
import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEPreferenceFragmentCompat
import code.name.monkey.retromusic.activities.OnThemeChangedListener
import code.name.monkey.retromusic.extensions.safeGetBottomInsets
import code.name.monkey.retromusic.preferences.*
import code.name.monkey.retromusic.util.NavigationUtil
/**
* @author Hemanth S (h4h13).
*/
abstract class AbsSettingsFragment : ATEPreferenceFragmentCompat() {
internal fun showProToastAndNavigate(message: String) {
Toast.makeText(requireContext(), "$message is Pro version feature.", Toast.LENGTH_SHORT)
.show()
NavigationUtil.goToProVersion(requireActivity())
}
internal fun setSummary(preference: Preference, value: Any?) {
val stringValue = value.toString()
if (preference is ListPreference) {
val index = preference.findIndexOfValue(stringValue)
preference.setSummary(if (index >= 0) preference.entries[index] else null)
} else {
preference.summary = stringValue
}
}
abstract fun invalidateSettings()
protected fun setSummary(preference: Preference?) {
preference?.let {
setSummary(
it, PreferenceManager
.getDefaultSharedPreferences(it.context)
.getString(it.key, "")
)
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setDivider(ColorDrawable(Color.TRANSPARENT))
// CollapsingToolbarLayout consumes insets and insets are not passed to child views
// So we get insets from root view
// https://github.com/material-components/material-components-android/issues/1310
ViewCompat.setOnApplyWindowInsetsListener(
view
) { _, insets ->
listView.updatePadding(bottom = insets.safeGetBottomInsets())
insets
}
invalidateSettings()
}
override fun onDisplayPreferenceDialog(preference: Preference) {
when (preference) {
is LibraryPreference -> {
val fragment = LibraryPreferenceDialog.newInstance()
fragment.show(childFragmentManager, preference.key)
}
is NowPlayingScreenPreference -> {
val fragment = NowPlayingScreenPreferenceDialog.newInstance()
fragment.show(childFragmentManager, preference.key)
}
is AlbumCoverStylePreference -> {
val fragment = AlbumCoverStylePreferenceDialog.newInstance()
fragment.show(childFragmentManager, preference.key)
}
is BlacklistPreference -> {
val fragment = BlacklistPreferenceDialog.newInstance()
fragment.show(childFragmentManager, preference.key)
}
is DurationPreference -> {
val fragment = DurationPreferenceDialog.newInstance()
fragment.show(childFragmentManager, preference.key)
}
else -> super.onDisplayPreferenceDialog(preference)
}
}
fun restartActivity() {
if (activity is OnThemeChangedListener) {
(activity as OnThemeChangedListener).onThemeValuesChanged()
} else {
activity?.recreate()
}
}
}