From 32681f6ea8a6a6452bdcb7a254622ce590019ef5 Mon Sep 17 00:00:00 2001 From: johan12345 Date: Sat, 3 Jul 2021 22:01:46 +0200 Subject: [PATCH] add detailed dialog for data source selection --- .../evmap/fragment/DataSourceSelectDialog.kt | 80 +++++++++++++ .../evmap/storage/PreferenceDataSource.kt | 6 + .../ui/DataSourceSelectDialogPreference.kt | 18 +++ .../res/layout/dialog_data_source_select.xml | 109 ++++++++++++++++++ app/src/main/res/values-de/arrays.xml | 2 +- app/src/main/res/values-de/strings.xml | 5 + app/src/main/res/values/arrays.xml | 2 +- app/src/main/res/values/strings.xml | 5 + app/src/main/res/xml/settings.xml | 2 +- 9 files changed, 226 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/net/vonforst/evmap/fragment/DataSourceSelectDialog.kt create mode 100644 app/src/main/java/net/vonforst/evmap/ui/DataSourceSelectDialogPreference.kt create mode 100644 app/src/main/res/layout/dialog_data_source_select.xml diff --git a/app/src/main/java/net/vonforst/evmap/fragment/DataSourceSelectDialog.kt b/app/src/main/java/net/vonforst/evmap/fragment/DataSourceSelectDialog.kt new file mode 100644 index 00000000..ffa47a7d --- /dev/null +++ b/app/src/main/java/net/vonforst/evmap/fragment/DataSourceSelectDialog.kt @@ -0,0 +1,80 @@ +package net.vonforst.evmap.fragment + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.appcompat.app.AppCompatDialogFragment +import net.vonforst.evmap.databinding.DialogDataSourceSelectBinding +import net.vonforst.evmap.storage.PreferenceDataSource +import java.util.* + +class DataSourceSelectDialog : AppCompatDialogFragment() { + private lateinit var binding: DialogDataSourceSelectBinding + var okListener: ((String) -> Unit)? = null + + companion object { + fun getInstance( + cancelEnabled: Boolean + ): DataSourceSelectDialog { + val dialog = DataSourceSelectDialog() + dialog.arguments = Bundle().apply { + putBoolean("cancel_enabled", cancelEnabled) + } + return dialog + } + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + binding = DialogDataSourceSelectBinding.inflate(inflater, container, false) + prefs = PreferenceDataSource(requireContext()) + return binding.root + } + + override fun onStart() { + super.onStart() + + dialog?.window?.setLayout( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT + ) + } + + private lateinit var prefs: PreferenceDataSource + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + val args = requireArguments() + binding.btnCancel.visibility = + if (args.getBoolean("cancel_enabled")) View.VISIBLE else View.GONE + + if (prefs.dataSourceSet) { + when (prefs.dataSource) { + "goingelectric" -> binding.rbGoingElectric.isChecked = true + "openchargemap" -> binding.rbOpenChargeMap.isChecked = true + } + } + + binding.btnCancel.setOnClickListener { + dismiss() + } + binding.btnOK.setOnClickListener { + val result = if (binding.rbGoingElectric.isChecked) { + "goingelectric" + } else if (binding.rbOpenChargeMap.isChecked) { + "openchargemap" + } else { + return@setOnClickListener + } + prefs.dataSource = result + okListener?.let { listener -> + listener(result) + } + prefs.dataSourceSet = true + dismiss() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/net/vonforst/evmap/storage/PreferenceDataSource.kt b/app/src/main/java/net/vonforst/evmap/storage/PreferenceDataSource.kt index 276be791..f9b76c6a 100644 --- a/app/src/main/java/net/vonforst/evmap/storage/PreferenceDataSource.kt +++ b/app/src/main/java/net/vonforst/evmap/storage/PreferenceDataSource.kt @@ -17,6 +17,12 @@ class PreferenceDataSource(val context: Context) { sp.edit().putString("data_source", value).apply() } + var dataSourceSet: Boolean + get() = sp.getBoolean("data_source_set", false) + set(value) { + sp.edit().putBoolean("data_source_set", value).apply() + } + var navigateUseMaps: Boolean get() = sp.getBoolean("navigate_use_maps", true) set(value) { diff --git a/app/src/main/java/net/vonforst/evmap/ui/DataSourceSelectDialogPreference.kt b/app/src/main/java/net/vonforst/evmap/ui/DataSourceSelectDialogPreference.kt new file mode 100644 index 00000000..36fdd7b8 --- /dev/null +++ b/app/src/main/java/net/vonforst/evmap/ui/DataSourceSelectDialogPreference.kt @@ -0,0 +1,18 @@ +package net.vonforst.evmap.ui + +import android.content.Context +import android.util.AttributeSet +import androidx.appcompat.app.AppCompatActivity +import androidx.preference.ListPreference +import net.vonforst.evmap.fragment.DataSourceSelectDialog + +class DataSourceSelectDialogPreference(ctx: Context, attrs: AttributeSet) : + ListPreference(ctx, attrs) { + override fun onClick() { + val dialog = DataSourceSelectDialog.getInstance(true) + dialog.okListener = { selected -> + value = selected + } + dialog.show((context as AppCompatActivity).supportFragmentManager, null) + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_data_source_select.xml b/app/src/main/res/layout/dialog_data_source_select.xml new file mode 100644 index 00000000..8877c87f --- /dev/null +++ b/app/src/main/res/layout/dialog_data_source_select.xml @@ -0,0 +1,109 @@ + + + + + + + + +