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("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("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("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("media_cache_size")?.let { it.summary = getString(R.string.settings_media_cache_size_summary, it.value) } preferenceManager.findPreference("version")?.let { it.summary = "${audio.funkwhale.ffa.BuildConfig.VERSION_NAME} (${audio.funkwhale.ffa.BuildConfig.VERSION_CODE})" } } } }