From e460b52b1b0285283f5952205fc7207a713854ba Mon Sep 17 00:00:00 2001 From: Johan von Forstner Date: Sat, 28 Mar 2020 19:42:40 +0100 Subject: [PATCH] Add additional items in detail view --- .../main/java/com/johan/evmap/MapsActivity.kt | 7 ++ .../evmap/adapter/DataBindingAdapters.kt | 27 ++++-- .../com/johan/evmap/api/GoingElectricModel.kt | 25 +++++- app/src/main/res/drawable/ic_cost.xml | 9 ++ app/src/main/res/layout/detail_view.xml | 88 ++++++++++++++++--- app/src/main/res/layout/item_detail.xml | 27 +++++- app/src/main/res/values-de/strings.xml | 7 ++ app/src/main/res/values/strings.xml | 7 ++ 8 files changed, 173 insertions(+), 24 deletions(-) create mode 100644 app/src/main/res/drawable/ic_cost.xml diff --git a/app/src/main/java/com/johan/evmap/MapsActivity.kt b/app/src/main/java/com/johan/evmap/MapsActivity.kt index 4aa9f4f6..eb8718a0 100644 --- a/app/src/main/java/com/johan/evmap/MapsActivity.kt +++ b/app/src/main/java/com/johan/evmap/MapsActivity.kt @@ -115,6 +115,13 @@ class MapsActivity : AppCompatActivity(), OnMapReadyCallback { } } } + binding.detailView.goingelectricButton.setOnClickListener { + val charger = binding.charger + if (charger != null) { + val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https:${charger.url}")) + startActivity(intent) + } + } } private fun setupAdapters() { diff --git a/app/src/main/java/com/johan/evmap/adapter/DataBindingAdapters.kt b/app/src/main/java/com/johan/evmap/adapter/DataBindingAdapters.kt index 4bf6287f..0a71e870 100644 --- a/app/src/main/java/com/johan/evmap/adapter/DataBindingAdapters.kt +++ b/app/src/main/java/com/johan/evmap/adapter/DataBindingAdapters.kt @@ -51,8 +51,12 @@ class ConnectorAdapter : DataBindingAdapter() { } class DetailAdapter : DataBindingAdapter() { - data class Detail(val icon: Int, val contentDescription: Int, val text: CharSequence) : - Equatable + data class Detail( + val icon: Int, + val contentDescription: Int, + val text: CharSequence, + val detailText: CharSequence? = null + ) : Equatable override fun getItemViewType(position: Int): Int = R.layout.item_detail } @@ -61,7 +65,12 @@ fun buildDetails(loc: ChargeLocation?, ctx: Context): List if (loc == null) return emptyList() return listOfNotNull( - DetailAdapter.Detail(R.drawable.ic_address, R.string.address, loc.address.toString()), + DetailAdapter.Detail( + R.drawable.ic_address, + R.string.address, + loc.address.toString(), + loc.locationDescription + ), if (loc.operator != null) DetailAdapter.Detail( R.drawable.ic_operator, R.string.operator, @@ -76,7 +85,15 @@ fun buildDetails(loc: ChargeLocation?, ctx: Context): List if (loc.openinghours != null) DetailAdapter.Detail( R.drawable.ic_hours, R.string.hours, - loc.openinghours.getStatusText(ctx) - ) else null + loc.openinghours.getStatusText(ctx), + loc.openinghours.description + ) else null, + if (loc.cost != null) DetailAdapter.Detail( + R.drawable.ic_cost, + R.string.cost, + loc.cost.getStatusText(ctx), + loc.cost.descriptionLong ?: loc.cost.descriptionShort + ) + else null ) } diff --git a/app/src/main/java/com/johan/evmap/api/GoingElectricModel.kt b/app/src/main/java/com/johan/evmap/api/GoingElectricModel.kt index 3d7da7d7..5e4deaac 100644 --- a/app/src/main/java/com/johan/evmap/api/GoingElectricModel.kt +++ b/app/src/main/java/com/johan/evmap/api/GoingElectricModel.kt @@ -31,10 +31,13 @@ data class ChargeLocation( val verified: Boolean, // only shown in details: @JsonObjectOrFalse val operator: String?, - @Json(name = "general_information") @JsonObjectOrFalse val generalInformation: String?, + @JsonObjectOrFalse @Json(name = "general_information") val generalInformation: String?, + @JsonObjectOrFalse @Json(name = "ladeweile") val amenities: String?, + @JsonObjectOrFalse @Json(name = "location_description") val locationDescription: String?, val photos: List?, //val chargecards: Boolean? - val openinghours: OpeningHours? + val openinghours: OpeningHours?, + val cost: Cost? ) : ChargepointListItem() { val maxPower: Double get() { @@ -48,6 +51,24 @@ data class ChargeLocation( } } +@JsonClass(generateAdapter = true) +data class Cost( + val freecharging: Boolean, + val freeparking: Boolean, + @JsonObjectOrFalse @Json(name = "description_short") val descriptionShort: String?, + @JsonObjectOrFalse @Json(name = "description_long") val descriptionLong: String? +) { + fun getStatusText(ctx: Context): CharSequence { + return HtmlCompat.fromHtml( + ctx.getString( + R.string.cost_detail, + if (freecharging) ctx.getString(R.string.free) else ctx.getString(R.string.paid), + if (freeparking) ctx.getString(R.string.free) else ctx.getString(R.string.paid) + ), 0 + ) + } +} + @JsonClass(generateAdapter = true) data class OpeningHours( @Json(name = "24/7") val twentyfourSeven: Boolean, diff --git a/app/src/main/res/drawable/ic_cost.xml b/app/src/main/res/drawable/ic_cost.xml new file mode 100644 index 00000000..d44ed917 --- /dev/null +++ b/app/src/main/res/drawable/ic_cost.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/detail_view.xml b/app/src/main/res/layout/detail_view.xml index 3d2ed715..74460e99 100644 --- a/app/src/main/res/layout/detail_view.xml +++ b/app/src/main/res/layout/detail_view.xml @@ -24,7 +24,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?android:colorBackground" - android:minHeight="600dp" android:paddingTop="8dp" android:paddingBottom="8dp"> @@ -67,18 +66,6 @@ app:layout_constraintTop_toBottomOf="@+id/textView2" tools:text="2x Typ 2 22 kW" /> - - + + + + + + + + + +