Update Settings design
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package com.github.gotify.settings
|
package com.github.gotify.settings
|
||||||
|
|
||||||
import android.app.AlertDialog
|
import android.app.Dialog
|
||||||
|
import android.content.DialogInterface
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
|
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
|
||||||
@@ -9,11 +10,13 @@ import android.view.MenuItem
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
|
import androidx.preference.ListPreferenceDialogFragmentCompat
|
||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
import androidx.preference.PreferenceFragmentCompat
|
import androidx.preference.PreferenceFragmentCompat
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import com.github.gotify.R
|
import com.github.gotify.R
|
||||||
import com.github.gotify.databinding.SettingsActivityBinding
|
import com.github.gotify.databinding.SettingsActivityBinding
|
||||||
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
|
|
||||||
internal class SettingsActivity : AppCompatActivity(), OnSharedPreferenceChangeListener {
|
internal class SettingsActivity : AppCompatActivity(), OnSharedPreferenceChangeListener {
|
||||||
private lateinit var binding: SettingsActivityBinding
|
private lateinit var binding: SettingsActivityBinding
|
||||||
@@ -64,7 +67,7 @@ internal class SettingsActivity : AppCompatActivity(), OnSharedPreferenceChangeL
|
|||||||
findPreference(getString(R.string.setting_key_message_layout))
|
findPreference(getString(R.string.setting_key_message_layout))
|
||||||
messageLayout?.onPreferenceChangeListener =
|
messageLayout?.onPreferenceChangeListener =
|
||||||
Preference.OnPreferenceChangeListener { _, _ ->
|
Preference.OnPreferenceChangeListener { _, _ ->
|
||||||
AlertDialog.Builder(context)
|
MaterialAlertDialogBuilder(requireContext())
|
||||||
.setTitle(R.string.setting_message_layout_dialog_title)
|
.setTitle(R.string.setting_message_layout_dialog_title)
|
||||||
.setMessage(R.string.setting_message_layout_dialog_message)
|
.setMessage(R.string.setting_message_layout_dialog_message)
|
||||||
.setPositiveButton(
|
.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() {
|
private fun restartApp() {
|
||||||
val packageManager = requireContext().packageManager
|
val packageManager = requireContext().packageManager
|
||||||
val packageName = requireContext().packageName
|
val packageName = requireContext().packageName
|
||||||
@@ -91,4 +112,46 @@ internal class SettingsActivity : AppCompatActivity(), OnSharedPreferenceChangeL
|
|||||||
Runtime.getRuntime().exit(0)
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user