funkwhale-android/app/src/main/java/audio/funkwhale/ffa/activities/SettingsActivity.kt

161 wiersze
5.4 KiB
Kotlin

package audio.funkwhale.ffa.activities
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import androidx.preference.ListPreference
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.SeekBarPreference
import audio.funkwhale.ffa.FFA
import audio.funkwhale.ffa.R
import audio.funkwhale.ffa.databinding.ActivitySettingsBinding
import audio.funkwhale.ffa.utils.Command
import audio.funkwhale.ffa.utils.CommandBus
import audio.funkwhale.ffa.utils.FFACache
class SettingsActivity : AppCompatActivity() {
private lateinit var binding: ActivitySettingsBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivitySettingsBinding.inflate(layoutInflater)
setContentView(binding.root)
supportFragmentManager
.beginTransaction()
.replace(
R.id.container,
SettingsFragment()
)
.commit()
}
}
class SettingsFragment :
PreferenceFragmentCompat(),
SharedPreferences.OnSharedPreferenceChangeListener {
override fun onResume() {
super.onResume()
preferenceScreen.sharedPreferences?.registerOnSharedPreferenceChangeListener(this)
}
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.settings, rootKey)
updateValues()
}
override fun onPreferenceTreeClick(preference: Preference): Boolean {
when (preference?.key) {
"oss_licences" -> startActivity(Intent(activity, LicencesActivity::class.java))
"crash" -> {
activity?.let { activity ->
(activity.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager)?.also { clip ->
FFACache.getLines(activity, "crashdump")?.joinToString("\n").also {
clip.setPrimaryClip(ClipData.newPlainText("Funkwhale logs", it))
Toast.makeText(
activity,
activity.getString(R.string.settings_crash_report_copied),
Toast.LENGTH_SHORT
).show()
}
}
}
}
"logout" -> {
context?.let { context ->
AlertDialog.Builder(context)
.setTitle(context.getString(R.string.logout_title))
.setMessage(context.getString(R.string.logout_content))
.setPositiveButton(android.R.string.ok) { _, _ ->
CommandBus.send(Command.ClearQueue)
FFA.get().deleteAllData(context)
activity?.setResult(MainActivity.ResultCode.LOGOUT.code)
activity?.finish()
}
.setNegativeButton(android.R.string.cancel, null)
.show()
}
}
}
updateValues()
return super.onPreferenceTreeClick(preference)
}
override fun onSharedPreferenceChanged(preferences: SharedPreferences?, key: String?) {
updateValues()
}
private fun updateValues() {
(activity as? AppCompatActivity)?.let { activity ->
preferenceManager.findPreference<ListPreference>("media_quality")?.let {
it.summary = when (it.value) {
"quality" -> activity.getString(R.string.settings_media_quality_summary_quality)
"size" -> activity.getString(R.string.settings_media_quality_summary_size)
else -> activity.getString(R.string.settings_media_quality_summary_size)
}
}
preferenceManager.findPreference<ListPreference>("play_order")?.let {
it.summary = when (it.value) {
"shuffle" -> activity.getString(R.string.settings_play_order_shuffle_summary)
"in_order" -> activity.getString(R.string.settings_play_order_in_order_summary)
else -> activity.getString(R.string.settings_play_order_shuffle_summary)
}
}
preferenceManager.findPreference<ListPreference>("night_mode")?.let {
when (it.value) {
"on" -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
activity.delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_YES
it.summary = getString(R.string.settings_night_mode_on_summary)
}
"off" -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
activity.delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_NO
it.summary = getString(R.string.settings_night_mode_off_summary)
}
else -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
activity.delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
it.summary = getString(R.string.settings_night_mode_system_summary)
}
}
}
preferenceManager.findPreference<SeekBarPreference>("media_cache_size")?.let {
it.summary = getString(R.string.settings_media_cache_size_summary, it.value)
}
preferenceManager.findPreference<Preference>("version")?.let {
it.summary =
"${audio.funkwhale.ffa.BuildConfig.VERSION_NAME} (${audio.funkwhale.ffa.BuildConfig.VERSION_CODE})"
}
}
}
}