From 2388d1873850191252854626f942692cc9696bb5 Mon Sep 17 00:00:00 2001 From: Isidro Henoch Date: Wed, 15 Dec 2021 00:28:54 -0600 Subject: Updates the devices list - The unit items now react to user interaction, they display and change their appearance on click - The adapter has a callback to manage the different options - Minor changes to dimen values --- .../TrackerMap/android/devices/DevicesAdapter.kt | 30 ++++++++++++++++++---- .../TrackerMap/android/devices/DevicesFragment.kt | 20 ++++++++++++--- .../TrackerMap/android/units/UnitsViewModel.kt | 2 +- androidApp/src/main/res/layout/login.xml | 8 +++--- androidApp/src/main/res/layout/login_activity.xml | 2 +- androidApp/src/main/res/layout/unit_item.xml | 11 ++++---- androidApp/src/main/res/values/dimen.xml | 10 ++++---- androidApp/src/main/res/values/strings.xml | 5 ++++ 8 files changed, 63 insertions(+), 25 deletions(-) diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesAdapter.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesAdapter.kt index 72d61e3..4aa210d 100644 --- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesAdapter.kt +++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesAdapter.kt @@ -4,11 +4,20 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView +import mx.trackermap.TrackerMap.android.R import mx.trackermap.TrackerMap.android.databinding.UnitItemBinding import mx.trackermap.TrackerMap.client.models.UnitInformation -class DevicesAdapter(private val units: List) : - RecyclerView.Adapter() { +enum class Action { + DETAILS, REPORTS, COMMANDS +} + +typealias ActionCallback = (unit: UnitInformation, action: Action) -> Unit + +class DevicesAdapter( + private val units: List, + private val actionCallback: ActionCallback? +) : RecyclerView.Adapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val binding = UnitItemBinding.inflate(LayoutInflater.from(parent.context), parent, false) @@ -26,6 +35,11 @@ class DevicesAdapter(private val units: List) : unitSpeed.text = "${unit.position?.speed ?: "--"} Km/h" lastAddress.text = unit.position?.address ?: "Unknown location" lastDate.text = "yyyy/mm/dd, hh:mm" + actionCallback?.let { callback -> + detailsButton.setOnClickListener { callback(unit, Action.DETAILS) } + reportsButton.setOnClickListener { callback(unit, Action.REPORTS) } + commandsButton.setOnClickListener { callback(unit, Action.COMMANDS) } + } } } @@ -38,9 +52,15 @@ class DevicesAdapter(private val units: List) : } } - fun toggleOptions(shouldShow: Boolean) { - binding.itemOptions.visibility = if (shouldShow) View.VISIBLE else View.GONE - binding.unitCard.cardElevation = if (shouldShow) 5.0F else 0.0F + fun toggleOptions(shouldExpand: Boolean) { + val context = binding.root.context + binding.unitCard.setCardBackgroundColor( + context + .resources + .getColor(if (shouldExpand) R.color.background else R.color.darkBackground) + ) + binding.itemOptions.visibility = if (shouldExpand) View.VISIBLE else View.GONE + binding.unitCard.cardElevation = if (shouldExpand) 5.0F else 0.0F } } } \ No newline at end of file diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesFragment.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesFragment.kt index 4ac5d48..a3ed7a8 100644 --- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesFragment.kt +++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesFragment.kt @@ -10,9 +10,11 @@ import androidx.recyclerview.widget.LinearLayoutManager import kotlinx.coroutines.DelicateCoroutinesApi import mx.trackermap.TrackerMap.android.databinding.DevicesFragmentBinding import mx.trackermap.TrackerMap.android.units.UnitsViewModel +import mx.trackermap.TrackerMap.client.models.UnitInformation import org.koin.androidx.viewmodel.ext.android.viewModel -class DevicesFragment: Fragment() { +class DevicesFragment : Fragment() { + private var _binding: DevicesFragmentBinding? = null private val binding get() = _binding!! @@ -40,15 +42,25 @@ class DevicesFragment: Fragment() { } private fun setupList() { - binding.devicesList.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) - binding.devicesList.adapter = DevicesAdapter(emptyList()) + binding.devicesList.layoutManager = LinearLayoutManager( + context, LinearLayoutManager.VERTICAL, + false + ) + binding.devicesList.adapter = DevicesAdapter(emptyList(), null) } @DelicateCoroutinesApi private fun setupObservers() { unitsViewModel.units.observe(this) { units -> Log.d("DevicesFragment", "Success $units") - binding.devicesList.swapAdapter(DevicesAdapter(units), false) + binding.devicesList.swapAdapter( + DevicesAdapter(units, this::itemAction), + false + ) } } + + private fun itemAction(unit: UnitInformation, action: Action) { + Log.d("DevicesFragment", "Action: $action - Unit: $unit") + } } \ No newline at end of file diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/units/UnitsViewModel.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/units/UnitsViewModel.kt index 5d7d469..bcb0818 100644 --- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/units/UnitsViewModel.kt +++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/units/UnitsViewModel.kt @@ -25,7 +25,7 @@ class UnitsViewModel( private val unitsController: UnitsController by inject() var searchQuery = savedStateHandle.getLiveData("searchQuery", "") - var unitsDisplayMode = MutableLiveData(UnitsDisplayMode.MAP) + var unitsDisplayMode = MutableLiveData(UnitsDisplayMode.LIST) var units = MutableLiveData>() init { diff --git a/androidApp/src/main/res/layout/login.xml b/androidApp/src/main/res/layout/login.xml index 21c63b0..2512052 100644 --- a/androidApp/src/main/res/layout/login.xml +++ b/androidApp/src/main/res/layout/login.xml @@ -5,15 +5,15 @@ android:name="mx.trackermap.TrackerMap.android.session.LoginFragment" android:layout_width="match_parent" android:layout_height="wrap_content" - app:cardCornerRadius="@dimen/cardview_border_radius" - app:cardElevation="@dimen/cardview_elevation" + app:cardCornerRadius="@dimen/card_border_radius" + app:cardElevation="@dimen/card_elevation" app:cardUseCompatPadding="true"> + android:paddingVertical="@dimen/card_large_padding" + android:paddingHorizontal="@dimen/card_padding"> \ No newline at end of file diff --git a/androidApp/src/main/res/layout/unit_item.xml b/androidApp/src/main/res/layout/unit_item.xml index 4534339..cdf0610 100644 --- a/androidApp/src/main/res/layout/unit_item.xml +++ b/androidApp/src/main/res/layout/unit_item.xml @@ -6,7 +6,7 @@ android:id="@+id/unitCard" android:layout_width="match_parent" android:layout_height="wrap_content" - app:cardCornerRadius="20dp" + app:cardCornerRadius="@dimen/card_border_radius" app:cardElevation="0dp" app:cardUseCompatPadding="true" app:contentPadding="16dp"> @@ -14,7 +14,8 @@ + android:orientation="vertical" + android:animateLayoutChanges="true"> @@ -74,7 +75,7 @@ android:layout_height="wrap_content" android:layout_marginHorizontal="8dp" android:layout_weight="1" - android:text="Reports" + android:text="@string/unit_reports" android:textColor="@color/colorPrimaryDark" app:backgroundTint="@color/darkBackground" /> @@ -83,7 +84,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" - android:text="Commands" + android:text="@string/unit_commands" android:textColor="@color/colorPrimaryDark" app:backgroundTint="@color/darkBackground" /> diff --git a/androidApp/src/main/res/values/dimen.xml b/androidApp/src/main/res/values/dimen.xml index 6b5e340..c39d301 100644 --- a/androidApp/src/main/res/values/dimen.xml +++ b/androidApp/src/main/res/values/dimen.xml @@ -1,9 +1,9 @@ - 20dp - 5dp - 32dp - 16dp - 7dp + 20dp + 8dp + 32dp + 16dp + 16dp \ No newline at end of file diff --git a/androidApp/src/main/res/values/strings.xml b/androidApp/src/main/res/values/strings.xml index db272e5..3919343 100644 --- a/androidApp/src/main/res/values/strings.xml +++ b/androidApp/src/main/res/values/strings.xml @@ -6,4 +6,9 @@ Username Password Login + + + Details + Reports + Commands \ No newline at end of file -- cgit v1.2.3