diff --git a/app/src/main/java/net/vonforst/evmap/MapsActivity.kt b/app/src/main/java/net/vonforst/evmap/MapsActivity.kt index c1668165..b1d871c9 100644 --- a/app/src/main/java/net/vonforst/evmap/MapsActivity.kt +++ b/app/src/main/java/net/vonforst/evmap/MapsActivity.kt @@ -50,27 +50,31 @@ class MapsActivity : AppCompatActivity() { } fun navigateTo(charger: ChargeLocation) { - val intent = Intent(Intent.ACTION_VIEW) - val coord = charger.coordinates - // google maps navigation + val coord = charger.coordinates + val intent = Intent(Intent.ACTION_VIEW) intent.data = Uri.parse("google.navigation:q=${coord.lat},${coord.lng}") - val pm = packageManager - if (intent.resolveActivity(pm) != null && prefs.navigateUseMaps) { + if (prefs.navigateUseMaps && intent.resolveActivity(packageManager) != null) { startActivity(intent); } else { // fallback: generic geo intent - intent.data = Uri.parse("geo:0,0?q=${coord.lat},${coord.lng}(${charger.name})") - if (intent.resolveActivity(pm) != null) { - startActivity(intent); - } else { - val cb = fragmentCallback ?: return - Snackbar.make( - cb.getRootView(), - R.string.no_maps_app_found, - Snackbar.LENGTH_SHORT - ) - } + showLocation(charger) + } + } + + fun showLocation(charger: ChargeLocation) { + val coord = charger.coordinates + val intent = Intent(Intent.ACTION_VIEW) + intent.data = Uri.parse("geo:0,0?q=${coord.lat},${coord.lng}(${charger.name})") + if (intent.resolveActivity(packageManager) != null) { + startActivity(intent); + } else { + val cb = fragmentCallback ?: return + Snackbar.make( + cb.getRootView(), + R.string.no_maps_app_found, + Snackbar.LENGTH_SHORT + ) } } diff --git a/app/src/main/java/net/vonforst/evmap/adapter/DataBindingAdapters.kt b/app/src/main/java/net/vonforst/evmap/adapter/DataBindingAdapters.kt index 71d20be9..00c3db06 100644 --- a/app/src/main/java/net/vonforst/evmap/adapter/DataBindingAdapters.kt +++ b/app/src/main/java/net/vonforst/evmap/adapter/DataBindingAdapters.kt @@ -86,7 +86,8 @@ class DetailAdapter : DataBindingAdapter() { val contentDescription: Int, val text: CharSequence, val detailText: CharSequence? = null, - val links: Boolean = true + val links: Boolean = true, + val clickable: Boolean = false ) : Equatable override fun getItemViewType(position: Int): Int = R.layout.item_detail @@ -131,7 +132,8 @@ fun buildDetails(loc: ChargeLocation?, ctx: Context): List R.string.coordinates, loc.coordinates.formatDMS(), loc.coordinates.formatDecimal(), - false + links = false, + clickable = true ) ) } diff --git a/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt index 05d57254..c5007a97 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt @@ -431,7 +431,18 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac } binding.detailView.details.apply { - adapter = DetailAdapter() + adapter = DetailAdapter().apply { + onClickListener = { + when (it.icon) { + R.drawable.ic_location -> { + val charger = vm.chargerSparse.value + if (charger != null) { + (activity as? MapsActivity)?.showLocation(charger) + } + } + } + } + } itemAnimator = null layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) diff --git a/app/src/main/java/net/vonforst/evmap/ui/BindingAdapters.kt b/app/src/main/java/net/vonforst/evmap/ui/BindingAdapters.kt index 7c71e5cf..f4a3acec 100644 --- a/app/src/main/java/net/vonforst/evmap/ui/BindingAdapters.kt +++ b/app/src/main/java/net/vonforst/evmap/ui/BindingAdapters.kt @@ -6,6 +6,7 @@ import android.view.View import android.widget.ImageView import android.widget.TextView import androidx.core.content.ContextCompat +import androidx.core.content.res.use import androidx.databinding.BindingAdapter import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView @@ -97,6 +98,17 @@ fun setBackgroundTintAvailability(view: View, available: List view.backgroundTintList = ColorStateList.valueOf(availabilityColor(available, view.context)) } +@BindingAdapter("selectableItemBackground") +fun applySelectableItemBackground(view: View, apply: Boolean) { + if (apply) { + view.context.obtainStyledAttributes(intArrayOf(R.attr.selectableItemBackground)).use { + view.background = it.getDrawable(0) + } + } else { + view.background = null + } +} + private fun availabilityColor( status: List?, context: Context diff --git a/app/src/main/res/layout/item_detail.xml b/app/src/main/res/layout/item_detail.xml index f1028dfd..ed6e4e54 100644 --- a/app/src/main/res/layout/item_detail.xml +++ b/app/src/main/res/layout/item_detail.xml @@ -13,7 +13,9 @@ + android:layout_height="wrap_content" + android:clickable="@{item.clickable}" + app:selectableItemBackground="@{item.clickable}">