Fixed the issue where dialogue is showing wrong
This commit is contained in:
@@ -28,6 +28,7 @@ import androidx.fragment.app.Fragment
|
|||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
import androidx.preference.PreferenceFragmentCompat
|
import androidx.preference.PreferenceFragmentCompat
|
||||||
|
import androidx.preference.PreferenceManager
|
||||||
import androidx.preference.SwitchPreferenceCompat
|
import androidx.preference.SwitchPreferenceCompat
|
||||||
import com.example.hpostesting.data.constant.Constants
|
import com.example.hpostesting.data.constant.Constants
|
||||||
import com.example.hpostesting.data.constant.DataHolder
|
import com.example.hpostesting.data.constant.DataHolder
|
||||||
@@ -35,6 +36,7 @@ import com.example.hpostesting.data.constant.LanguageManager
|
|||||||
import com.example.hpostesting.data.repository.DatabaseRepository
|
import com.example.hpostesting.data.repository.DatabaseRepository
|
||||||
import com.example.hpostesting.firebase.FirebaseConfig
|
import com.example.hpostesting.firebase.FirebaseConfig
|
||||||
import com.example.hpostesting.firebase.FirebaseManager
|
import com.example.hpostesting.firebase.FirebaseManager
|
||||||
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import `in`.sminnovations.hpostesting.R
|
import `in`.sminnovations.hpostesting.R
|
||||||
import `in`.sminnovations.hpostesting.databinding.FragmentSlideshowBinding
|
import `in`.sminnovations.hpostesting.databinding.FragmentSlideshowBinding
|
||||||
|
|
||||||
@@ -148,24 +150,28 @@ class PrefsFragment : PreferenceFragmentCompat() {
|
|||||||
true
|
true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
val servers = firebaseManager.getAvailableServers()
|
val servers = firebaseManager.getAvailableServers()
|
||||||
val serverNames = servers.map { it.serverName }.toTypedArray()
|
val serverNames = servers.map { it.serverName }.toTypedArray()
|
||||||
|
|
||||||
val serverSelectorPreference = ListPreference(requireContext()).apply {
|
val serverSelectorPreference = CustomDialogPreference(requireContext()).apply {
|
||||||
key = "server_preference"
|
key = "server_preference"
|
||||||
title = "Select the Server"
|
title = "Select the Server"
|
||||||
summary = "Current server : $currentServer "
|
summary = "Current server: $currentServer"
|
||||||
entries = serverNames
|
setEntries(serverNames)
|
||||||
entryValues = serverNames
|
setEntryValues(serverNames)
|
||||||
value = currentServer
|
setValue(currentServer)
|
||||||
setDefaultValue(currentServer)
|
|
||||||
icon = ContextCompat.getDrawable(requireContext(), R.drawable.baseline_cloud_sync_24)
|
icon = ContextCompat.getDrawable(requireContext(), R.drawable.baseline_cloud_sync_24)
|
||||||
onPreferenceChangeListener = Preference.OnPreferenceChangeListener { old, newValue ->
|
setOnPreferenceChangeListener { newValue ->
|
||||||
val getPreferenceConfig = servers.find { it.serverName ==newValue }
|
val preferenceConfig = servers.find { it.serverName == newValue }
|
||||||
switchFirebaseServer(getPreferenceConfig!!)
|
switchFirebaseServer(preferenceConfig!!)
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add preferences to screen
|
||||||
|
preferenceScreen.addPreference(languagePreference)
|
||||||
preferenceScreen.addPreference(languagePreference)
|
preferenceScreen.addPreference(languagePreference)
|
||||||
|
|
||||||
|
|
||||||
@@ -239,23 +245,16 @@ class PrefsFragment : PreferenceFragmentCompat() {
|
|||||||
if (isLanguageChanged) {
|
if (isLanguageChanged) {
|
||||||
Toast.makeText(requireContext(), R.string.language_update, Toast.LENGTH_SHORT).show()
|
Toast.makeText(requireContext(), R.string.language_update, Toast.LENGTH_SHORT).show()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private fun updateServerPreference(newServer: String) {
|
private fun updateServerPreference(newServer: String) {
|
||||||
preferenceManager.findPreference<ListPreference>("server_preference")?.let { pref ->
|
(findPreference<CustomDialogPreference>("server_preference"))?.let { pref ->
|
||||||
pref.value = newServer
|
pref.setValue(newServer)
|
||||||
pref.summary = "Current server: $newServer"
|
pref.summary = "Current server: $newServer"
|
||||||
pref.callChangeListener(newServer)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private fun switchFirebaseServer(firebaseConfig: FirebaseConfig) {
|
private fun switchFirebaseServer(firebaseConfig: FirebaseConfig) {
|
||||||
firebaseManager.switchServer(firebaseConfig)
|
firebaseManager.switchServer(firebaseConfig)
|
||||||
Toast.makeText(
|
Toast.makeText(
|
||||||
@@ -295,3 +294,47 @@ class PrefsFragment : PreferenceFragmentCompat() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// CustomDialogPreference.kt
|
||||||
|
class CustomDialogPreference(context: Context) : Preference(context) {
|
||||||
|
private var entries: Array<String> = arrayOf()
|
||||||
|
private var entryValues: Array<String> = arrayOf()
|
||||||
|
private var currentValue: String = ""
|
||||||
|
private var onValueChangeListener: ((String) -> Boolean)? = null
|
||||||
|
|
||||||
|
fun setEntries(entries: Array<String>) {
|
||||||
|
this.entries = entries
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setEntryValues(values: Array<String>) {
|
||||||
|
this.entryValues = values
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setValue(value: String) {
|
||||||
|
currentValue = value
|
||||||
|
persistString(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setOnPreferenceChangeListener(listener: (String) -> Boolean) {
|
||||||
|
onValueChangeListener = listener
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onClick() {
|
||||||
|
val builder = MaterialAlertDialogBuilder(context)
|
||||||
|
builder.setTitle(title)
|
||||||
|
|
||||||
|
builder.setSingleChoiceItems(entries, entries.indexOf(currentValue)) { dialog, which ->
|
||||||
|
val newValue = entryValues[which]
|
||||||
|
if (onValueChangeListener?.invoke(newValue) == true) {
|
||||||
|
setValue(newValue)
|
||||||
|
dialog.dismiss()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.setNegativeButton("Cancel") { dialog, _ ->
|
||||||
|
dialog.dismiss()
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user