add detailed dialog for data source selection

This commit is contained in:
johan12345
2021-07-03 22:01:46 +02:00
parent d77f67aa91
commit 32681f6ea8
9 changed files with 226 additions and 3 deletions

View File

@@ -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()
}
}
}

View File

@@ -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) {

View File

@@ -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)
}
}

View File

@@ -0,0 +1,109 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/dialogTitle"
android:textAppearance="@style/TextAppearance.MaterialComponents.Headline6"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="18dp"
android:layout_marginEnd="16dp"
android:text="@string/pref_data_source"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/dataSourceDescription"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:text="@string/data_sources_description"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/dialogTitle" />
<Button
android:id="@+id/btnOK"
style="@style/Widget.MaterialComponents.Button.TextButton.Dialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:text="@string/ok"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/radioGroup2" />
<Button
android:id="@+id/btnCancel"
style="@style/Widget.MaterialComponents.Button.TextButton.Dialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="8dp"
android:text="@string/cancel"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/btnOK"
app:layout_constraintTop_toBottomOf="@+id/radioGroup2" />
<RadioGroup
android:id="@+id/radioGroup2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/dataSourceDescription">
<RadioButton
android:id="@+id/rbGoingElectric"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/data_source_goingelectric"
android:textColor="#098ac7"
android:buttonTint="#098ac7"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textView27"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="-8dp"
android:layout_marginBottom="8dp"
android:layout_marginStart="32dp"
android:text="@string/data_source_goingelectric_desc" />
<RadioButton
android:id="@+id/rbOpenChargeMap"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/data_source_openchargemap"
android:textColor="#587e25"
android:buttonTint="#587e25"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textView28"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="-8dp"
android:layout_marginStart="32dp"
android:text="@string/data_source_openchargemap_desc" />
</RadioGroup>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -12,6 +12,6 @@
</string-array>
<string-array name="pref_data_source_names">
<item>GoingElectric.de</item>
<item>OpenChargeMap.org</item>
<item>Open Charge Map</item>
</string-array>
</resources>

View File

@@ -215,4 +215,9 @@
<item quantity="other">%d Tarife ausgewählt</item>
</plurals>
<string name="unknown_operator">Unbekannter Betreiber</string>
<string name="data_sources_description">EVMap unterstützt verschiedene Datenquellen. Bitte wähle aus, welche du nutzen möchtest. Du kannst die Datenquelle später in den Einstellungen der App ändern.</string>
<string name="data_source_goingelectric">GoingElectric.de</string>
<string name="data_source_openchargemap">Open Charge Map</string>
<string name="data_source_goingelectric_desc">Sehr gute Abdeckung in Deutschland, Österreich, Schweiz und vielen angrenzenden Ländern. Beschreibungen in Deutsch. Von der Community gepflegt.</string>
<string name="data_source_openchargemap_desc"><![CDATA[Weltweite Abdeckung mit variierender Qualität. Beschreibungen in Englisch oder Landessprache. Von der Community gepflegt & offizielle Verzeichnisse einiger Länder (z.B. Nordamerika, UK, Frankreich, Norwegen).]]></string>
</resources>

View File

@@ -50,7 +50,7 @@
</string-array>
<string-array name="pref_data_source_names">
<item>GoingElectric.de</item>
<item>OpenChargeMap.org</item>
<item>Open Charge Map</item>
</string-array>
<string-array name="pref_data_source_values" tranlatable="false">
<item>goingelectric</item>

View File

@@ -200,4 +200,9 @@
<item quantity="other">%d plans selected</item>
</plurals>
<string name="unknown_operator">Unknown operator</string>
<string name="data_sources_description">EVMap supports multiple data sources. Please select the one you would like to use. You can always change the data source in the app\'s settings.</string>
<string name="data_source_goingelectric">GoingElectric.de</string>
<string name="data_source_openchargemap">Open Charge Map</string>
<string name="data_source_goingelectric_desc">Very good coverage in Germany, Austria and Switzerland and many neighboring countries. Descriptions in German. Community-maintained.</string>
<string name="data_source_openchargemap_desc"><![CDATA[Worldwide coverage with varying quality. Descriptions in English or local language. Community-maintained & government open data in some countries (e.g. North America, UK, France, Norway).]]></string>
</resources>

View File

@@ -21,7 +21,7 @@
</PreferenceCategory>
<PreferenceCategory android:title="@string/settings_charger_data">
<ListPreference
<net.vonforst.evmap.ui.DataSourceSelectDialogPreference
android:key="data_source"
android:title="@string/pref_data_source"
android:entries="@array/pref_data_source_names"