Update Settings design

This commit is contained in:
Niko Diamadis
2023-02-03 16:26:59 +01:00
parent 863034f9ce
commit 6a819f87da

View File

@@ -1,6 +1,7 @@
package com.github.gotify.settings
import android.app.AlertDialog
import android.app.Dialog
import android.content.DialogInterface
import android.content.Intent
import android.content.SharedPreferences
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
@@ -9,11 +10,13 @@ import android.view.MenuItem
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.preference.ListPreference
import androidx.preference.ListPreferenceDialogFragmentCompat
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceManager
import com.github.gotify.R
import com.github.gotify.databinding.SettingsActivityBinding
import com.google.android.material.dialog.MaterialAlertDialogBuilder
internal class SettingsActivity : AppCompatActivity(), OnSharedPreferenceChangeListener {
private lateinit var binding: SettingsActivityBinding
@@ -64,7 +67,7 @@ internal class SettingsActivity : AppCompatActivity(), OnSharedPreferenceChangeL
findPreference(getString(R.string.setting_key_message_layout))
messageLayout?.onPreferenceChangeListener =
Preference.OnPreferenceChangeListener { _, _ ->
AlertDialog.Builder(context)
MaterialAlertDialogBuilder(requireContext())
.setTitle(R.string.setting_message_layout_dialog_title)
.setMessage(R.string.setting_message_layout_dialog_message)
.setPositiveButton(
@@ -81,6 +84,24 @@ internal class SettingsActivity : AppCompatActivity(), OnSharedPreferenceChangeL
}
}
override fun onDisplayPreferenceDialog(preference: Preference) {
if (preference is ListPreference) {
showListPreferenceDialog(preference)
} else {
super.onDisplayPreferenceDialog(preference)
}
}
private fun showListPreferenceDialog(preference: ListPreference) {
val dialogFragment = MaterialListPreference()
dialogFragment.arguments = Bundle(1).apply { putString("key", preference.key) }
dialogFragment.setTargetFragment(this, 0)
dialogFragment.show(
parentFragmentManager,
"androidx.preference.PreferenceFragment.DIALOG"
)
}
private fun restartApp() {
val packageManager = requireContext().packageManager
val packageName = requireContext().packageName
@@ -91,4 +112,46 @@ internal class SettingsActivity : AppCompatActivity(), OnSharedPreferenceChangeL
Runtime.getRuntime().exit(0)
}
}
class MaterialListPreference : ListPreferenceDialogFragmentCompat() {
private var mWhichButtonClicked = 0
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
mWhichButtonClicked = DialogInterface.BUTTON_NEGATIVE
val builder = MaterialAlertDialogBuilder(requireActivity())
.setTitle(preference.dialogTitle)
.setPositiveButton(preference.positiveButtonText, this)
.setNegativeButton(preference.negativeButtonText, this)
val contentView = context?.let { onCreateDialogView(it) }
if (contentView != null) {
onBindDialogView(contentView)
builder.setView(contentView)
} else {
builder.setMessage(preference.dialogMessage)
}
onPrepareDialogBuilder(builder)
return builder.create()
}
override fun onClick(dialog: DialogInterface, which: Int) {
mWhichButtonClicked = which
}
override fun onDismiss(dialog: DialogInterface) {
onDialogClosedWasCalledFromOnDismiss = true
super.onDismiss(dialog)
}
private var onDialogClosedWasCalledFromOnDismiss = false
override fun onDialogClosed(positiveResult: Boolean) {
if (onDialogClosedWasCalledFromOnDismiss) {
onDialogClosedWasCalledFromOnDismiss = false
super.onDialogClosed(mWhichButtonClicked == DialogInterface.BUTTON_POSITIVE)
} else {
super.onDialogClosed(positiveResult)
}
}
}
}