From 3ee1f781de5b059f06e6d7135f36d1ada47a38d4 Mon Sep 17 00:00:00 2001 From: "muindi.stephen" Date: Thu, 11 Apr 2024 15:37:19 +0300 Subject: [PATCH] functionality on filtering --- .idea/misc.xml | 9 ++- .../adapter/CropCycleTaskListAdapter.kt | 1 + .../main/HireFarmEquipmentsFragment.kt | 22 ++++-- .../crop_cycle/AutoCreateCropCycleFragment.kt | 23 +++--- .../crop_cycle/CropCycleTasksListFragment.kt | 45 +++++++++--- .../crop_cycle/LivestockCycleFragment.kt | 25 +++++++ .../main/res/layout/crop_cycle_task_row.xml | 11 +++ .../fragment_auto_create_crop_cycle.xml | 2 +- .../res/layout/fragment_crop_cycle_list.xml | 71 +++++++++++++++++-- .../layout/fragment_detailed_farm_cycle.xml | 44 ++++++------ .../layout/fragment_hire_farm_equipments.xml | 5 +- .../res/layout/fragment_livestock_cycle.xml | 14 ++++ .../fragment_new_farming_technology.xml | 6 +- .../main/res/navigation/navigation_graph.xml | 3 + app/src/main/res/values/strings.xml | 6 ++ 15 files changed, 233 insertions(+), 54 deletions(-) create mode 100644 app/src/main/java/com/steve_md/smartmkulima/ui/fragments/others/crop_cycle/LivestockCycleFragment.kt create mode 100644 app/src/main/res/layout/fragment_livestock_cycle.xml diff --git a/.idea/misc.xml b/.idea/misc.xml index 5701082..5a3ddd2 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,10 +1,17 @@ - + + + + \ No newline at end of file diff --git a/app/src/main/java/com/steve_md/smartmkulima/adapter/CropCycleTaskListAdapter.kt b/app/src/main/java/com/steve_md/smartmkulima/adapter/CropCycleTaskListAdapter.kt index c229623..b9bcd9f 100644 --- a/app/src/main/java/com/steve_md/smartmkulima/adapter/CropCycleTaskListAdapter.kt +++ b/app/src/main/java/com/steve_md/smartmkulima/adapter/CropCycleTaskListAdapter.kt @@ -34,6 +34,7 @@ class CropCycleTaskListAdapter(private val onClickListener: OnClickListener) : binding.farmID.text = cycle?.farmId binding.cycleData.text = cycle?.cropName binding.dateForCycle.text = cycle?.startDate + binding.textView85.text = cycle?.type } } diff --git a/app/src/main/java/com/steve_md/smartmkulima/ui/fragments/main/HireFarmEquipmentsFragment.kt b/app/src/main/java/com/steve_md/smartmkulima/ui/fragments/main/HireFarmEquipmentsFragment.kt index 3d93867..79dbb3d 100644 --- a/app/src/main/java/com/steve_md/smartmkulima/ui/fragments/main/HireFarmEquipmentsFragment.kt +++ b/app/src/main/java/com/steve_md/smartmkulima/ui/fragments/main/HireFarmEquipmentsFragment.kt @@ -28,6 +28,7 @@ class HireFarmEquipmentsFragment : Fragment() { private lateinit var binding: FragmentHireFarmEquipmentsBinding private lateinit var farmEquipmentsRecylerView: RecyclerView private lateinit var farmEquipmentsAdapter: FarmEquipmentAdapter + private var farmEquipmentsList = ArrayList() override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -72,11 +73,11 @@ class HireFarmEquipmentsFragment : Fragment() { val farmEquipments = response.body() - val newList = ArrayList() + farmEquipments?.let { + farmEquipmentsList.addAll(it) + farmEquipmentsAdapter.submitList(farmEquipmentsList) + } - newList.addAll(farmEquipments!!) - - farmEquipmentsAdapter.submitList(newList) farmEquipmentsAdapter.notifyDataSetChanged() farmEquipmentsRecylerView.adapter = farmEquipmentsAdapter farmEquipmentsRecylerView.visibility = View.VISIBLE @@ -93,5 +94,18 @@ class HireFarmEquipmentsFragment : Fragment() { binding.imageViewBackFromFarmEquipments.setOnClickListener { findNavController().navigateUp() } + + // performing filtering of farm equipments here + binding.card1.setOnClickListener { + filterFarmEquipments("F") + } + binding.card2.setOnClickListener { filterFarmEquipments("W") } + binding.card3.setOnClickListener { filterFarmEquipments("J") } + binding.card4.setOnClickListener { filterFarmEquipments("P") } + } + + private fun filterFarmEquipments(query: String) { + val filteredList = farmEquipmentsList.filter { it.name.contains(query, ignoreCase = true) } + farmEquipmentsAdapter.submitList(filteredList.toMutableList()) } } \ No newline at end of file diff --git a/app/src/main/java/com/steve_md/smartmkulima/ui/fragments/others/crop_cycle/AutoCreateCropCycleFragment.kt b/app/src/main/java/com/steve_md/smartmkulima/ui/fragments/others/crop_cycle/AutoCreateCropCycleFragment.kt index def0644..60d9bf5 100644 --- a/app/src/main/java/com/steve_md/smartmkulima/ui/fragments/others/crop_cycle/AutoCreateCropCycleFragment.kt +++ b/app/src/main/java/com/steve_md/smartmkulima/ui/fragments/others/crop_cycle/AutoCreateCropCycleFragment.kt @@ -1,6 +1,7 @@ package com.steve_md.smartmkulima.ui.fragments.others.crop_cycle import android.annotation.SuppressLint +import android.app.AlertDialog import android.app.DatePickerDialog import android.os.Bundle import android.util.Log @@ -29,7 +30,6 @@ class AutoCreateCropCycleFragment : Fragment() { private lateinit var binding: FragmentAutoCreateCropCycleBinding private var cropCycleStartDay: Calendar? = null - private val db = FirebaseFirestore.getInstance() private val cycleTypes by lazy { resources.getStringArray(R.array.cycle_types) } @@ -57,9 +57,7 @@ class AutoCreateCropCycleFragment : Fragment() { private fun setUpBinding() { binding.viewAllCycleTypes.setOnClickListener { - findNavController().navigate( - R.id.action_autoCreateCropCycleFragment_to_cropCycleTasksListFragment - ) + goToCropCycle() } val cycleTypeAdapter = @@ -78,15 +76,14 @@ class AutoCreateCropCycleFragment : Fragment() { val selectedCycleType = cycleTypes[position] if (selectedCycleType == "Crop Cycle") { populateCropSpinner() - } else if (selectedCycleType == "Service Cycle"){ + } else if (selectedCycleType == "Service Cycle") { binding.spinnerCrop.visibility = View.GONE //displayServiceCycleTasks() binding.stepLinearLayout.removeAllViews() val stepTextView = TextView(requireContext()) stepTextView.text = "$cropCycleStartDay | ${binding.enterFarmBlockID.text}" - } - else { + } else { return } } @@ -118,6 +115,13 @@ class AutoCreateCropCycleFragment : Fragment() { } + private fun goToCropCycle() { + findNavController().navigate( + R.id.action_autoCreateCropCycleFragment_to_cropCycleTasksListFragment + ) + } + + @SuppressLint("SetTextI18n") private fun displayPredefinedServiceCycle() { binding.stepLinearLayout.removeAllViews() val steps = listOf( @@ -131,10 +135,12 @@ class AutoCreateCropCycleFragment : Fragment() { steps.forEach { step -> val stepTextView = TextView(requireContext()) // Set text with step name and details - stepTextView.text = "${step.name}: Start Day ${cropCycleStartDay?.time}, End Day ${step.endDay} \n" + stepTextView.text = + "${step.name}: Start Day ${cropCycleStartDay?.time}, End Day ${step.endDay} \n" binding.stepLinearLayout.addView(stepTextView) } } + data class Step(val name: String, val startDay: Int, val endDay: Int) private fun generateCropCycle() { @@ -148,7 +154,6 @@ class AutoCreateCropCycleFragment : Fragment() { val startDay = dateFormat.parse(startDayForCropCycle) - // Sample crop cycle stages val stages = listOf( "Seedling Acquisition", diff --git a/app/src/main/java/com/steve_md/smartmkulima/ui/fragments/others/crop_cycle/CropCycleTasksListFragment.kt b/app/src/main/java/com/steve_md/smartmkulima/ui/fragments/others/crop_cycle/CropCycleTasksListFragment.kt index 536aa07..f2e96b6 100644 --- a/app/src/main/java/com/steve_md/smartmkulima/ui/fragments/others/crop_cycle/CropCycleTasksListFragment.kt +++ b/app/src/main/java/com/steve_md/smartmkulima/ui/fragments/others/crop_cycle/CropCycleTasksListFragment.kt @@ -1,6 +1,8 @@ package com.steve_md.smartmkulima.ui.fragments.others.crop_cycle import android.annotation.SuppressLint +import android.content.res.ColorStateList +import android.graphics.Color import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -11,6 +13,7 @@ import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import com.google.firebase.auth.FirebaseAuth import com.google.firebase.firestore.FirebaseFirestore +import com.steve_md.smartmkulima.R import com.steve_md.smartmkulima.adapter.CropCycleTaskListAdapter import com.steve_md.smartmkulima.data.remote.CyclesApiClient import com.steve_md.smartmkulima.data.remote.FarmEquipmentsApiClient @@ -24,10 +27,12 @@ import retrofit2.Call import retrofit2.Response import timber.log.Timber import java.net.HttpURLConnection +import java.util.logging.Handler class CropCycleTasksListFragment : Fragment() { private lateinit var binding: FragmentCropCycleListBinding private lateinit var cycleListAdapter: CropCycleTaskListAdapter + private var cycleList = ArrayList() override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -44,8 +49,6 @@ class CropCycleTasksListFragment : Fragment() { (activity as AppCompatActivity).supportActionBar?.hide() - - setUpBinding() setUpRecyclerView() getAllAvailableCropCycle() @@ -69,15 +72,33 @@ class CropCycleTasksListFragment : Fragment() { binding.cropCycleRecyclerView.adapter = cycleListAdapter } + @SuppressLint("ResourceAsColor") private fun setUpBinding() { binding.imageViewBackFromCropCycleLists.setOnClickListener { findNavController().navigateUp() } + + binding.textView74.setOnClickListener { + // binding.cropCycleRecyclerView.removeAllViews() + android.os.Handler().postDelayed({ + binding.progressBarCycles.visibility = View.GONE +// getAllAvailableCropCycle() + }, 1500) + } + + binding.textView83CropCycle.setOnClickListener { + filterCycles("Crop cycle") + } + binding.textView84.setOnClickListener { + + filterCycles("Livestock cycle") + } + } // Fetch from remote API (web-service) private fun getAllAvailableCropCycle() { CyclesApiClient.api.getAllFarmCycles() .enqueue(object : retrofit2.Callback> { - @SuppressLint("NotifyDataSetChanged") + @SuppressLint("NotifyDataSetChanged", "ResourceAsColor") override fun onResponse( call: Call>, response: Response> @@ -85,25 +106,31 @@ class CropCycleTasksListFragment : Fragment() { if (response.isSuccessful) { Timber.i("====Viewing Farm cycles${response.body()}=====") - displaySnackBar("Viewing Available cycles") + // displaySnackBar("Viewing Available cycles") val cycles = response.body() - val newList = ArrayList() - - newList.addAll(cycles!!) - cycleListAdapter.submitList(newList) + cycles?.let { + cycleList.addAll(it) + cycleListAdapter.submitList(cycleList) + } cycleListAdapter.notifyDataSetChanged() binding.cropCycleRecyclerView.adapter = cycleListAdapter binding.cropCycleRecyclerView.visibility = View.VISIBLE + } } override fun onFailure(call: Call>, t: Throwable) { - toast("nothing here.${t.localizedMessage}") + Timber.e("nothing here.${t.localizedMessage}") binding.errorNotAvailable.visibility = View.VISIBLE binding.cropCycleRecyclerView.visibility = View.INVISIBLE } }) } + + private fun filterCycles(s: String) { + val filteredList = cycleList.filter { it.type.equals(s, ignoreCase = true) } + cycleListAdapter.submitList(filteredList.toMutableList()) + } } diff --git a/app/src/main/java/com/steve_md/smartmkulima/ui/fragments/others/crop_cycle/LivestockCycleFragment.kt b/app/src/main/java/com/steve_md/smartmkulima/ui/fragments/others/crop_cycle/LivestockCycleFragment.kt new file mode 100644 index 0000000..663b703 --- /dev/null +++ b/app/src/main/java/com/steve_md/smartmkulima/ui/fragments/others/crop_cycle/LivestockCycleFragment.kt @@ -0,0 +1,25 @@ +package com.steve_md.smartmkulima.ui.fragments.others.crop_cycle + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.steve_md.smartmkulima.R +import com.steve_md.smartmkulima.databinding.FragmentLivestockCycleBinding + +class LivestockCycleFragment : Fragment() { + private lateinit var binding: FragmentLivestockCycleBinding + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + binding = FragmentLivestockCycleBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/crop_cycle_task_row.xml b/app/src/main/res/layout/crop_cycle_task_row.xml index a233fc3..351b7b8 100644 --- a/app/src/main/res/layout/crop_cycle_task_row.xml +++ b/app/src/main/res/layout/crop_cycle_task_row.xml @@ -66,6 +66,17 @@ app:layout_constraintStart_toEndOf="@+id/cycleData" app:layout_constraintTop_toTopOf="@+id/cycleData" /> + + diff --git a/app/src/main/res/layout/fragment_auto_create_crop_cycle.xml b/app/src/main/res/layout/fragment_auto_create_crop_cycle.xml index 5af8c22..b36b908 100644 --- a/app/src/main/res/layout/fragment_auto_create_crop_cycle.xml +++ b/app/src/main/res/layout/fragment_auto_create_crop_cycle.xml @@ -60,11 +60,11 @@ android:layout_marginStart="16dp" android:layout_marginTop="8dp" android:layout_marginEnd="16dp" - android:entries="@array/cycle_types" android:paddingHorizontal="12dp" android:paddingVertical="8dp" android:spinnerMode="dropdown" + android:background="@drawable/rounded_corner" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/fragment_crop_cycle_list.xml b/app/src/main/res/layout/fragment_crop_cycle_list.xml index c24ff16..4fab4cb 100644 --- a/app/src/main/res/layout/fragment_crop_cycle_list.xml +++ b/app/src/main/res/layout/fragment_crop_cycle_list.xml @@ -5,6 +5,7 @@ android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:background="@color/bg_gray" + android:fitsSystemWindows="true" tools:context=".ui.fragments.others.crop_cycle.CropCycleTasksListFragment"> + app:layout_constraintTop_toBottomOf="@+id/linearLayoutCropCycleList" + app:layout_constraintVertical_bias="0.883" + tools:listitem="@layout/crop_cycle_task_row" /> @@ -75,4 +78,62 @@ app:layout_constraintTop_toTopOf="@+id/cropCycleRecyclerView" /> + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_detailed_farm_cycle.xml b/app/src/main/res/layout/fragment_detailed_farm_cycle.xml index 434930a..003aae2 100644 --- a/app/src/main/res/layout/fragment_detailed_farm_cycle.xml +++ b/app/src/main/res/layout/fragment_detailed_farm_cycle.xml @@ -67,19 +67,9 @@ app:layout_constraintTop_toBottomOf="@+id/textView78" tools:listitem="@layout/detail_cycle_row" /> - + android:layout_marginStart="24dp" + app:layout_constraintTop_toBottomOf="@+id/viewSeparator" + app:layout_constraintStart_toStartOf="parent" /> diff --git a/app/src/main/res/layout/fragment_hire_farm_equipments.xml b/app/src/main/res/layout/fragment_hire_farm_equipments.xml index 1483dc8..b6d7a44 100644 --- a/app/src/main/res/layout/fragment_hire_farm_equipments.xml +++ b/app/src/main/res/layout/fragment_hire_farm_equipments.xml @@ -44,9 +44,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="32dp" - android:layout_marginTop="22dp" + android:layout_marginTop="16dp" android:layout_marginEnd="16dp" - android:fontFamily="@font/montserrat" + android:textStyle="bold" + android:fontFamily="@font/montserrat_medium" android:text="Find services available to hire" android:textSize="18sp" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/fragment_livestock_cycle.xml b/app/src/main/res/layout/fragment_livestock_cycle.xml new file mode 100644 index 0000000..d6899a7 --- /dev/null +++ b/app/src/main/res/layout/fragment_livestock_cycle.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_new_farming_technology.xml b/app/src/main/res/layout/fragment_new_farming_technology.xml index ab6e7cf..15754d3 100644 --- a/app/src/main/res/layout/fragment_new_farming_technology.xml +++ b/app/src/main/res/layout/fragment_new_farming_technology.xml @@ -45,7 +45,7 @@ android:layout_width="80dp" android:layout_height="80dp" android:layout_marginStart="60dp" - android:layout_marginTop="100dp" + android:layout_marginTop="80dp" android:backgroundTint="@color/main" app:cardCornerRadius="20dp" app:layout_constraintStart_toStartOf="parent" @@ -83,7 +83,7 @@ android:layout_width="80dp" android:layout_height="80dp" android:layout_marginStart="70dp" - android:layout_marginTop="100dp" + android:layout_marginTop="80dp" android:backgroundTint="@color/main" app:cardCornerRadius="20dp" app:layout_constraintEnd_toEndOf="parent" @@ -199,7 +199,7 @@ android:layout_width="80dp" android:layout_height="80dp" android:layout_marginStart="20dp" - android:layout_marginTop="100dp" + android:layout_marginTop="80dp" android:backgroundTint="@color/main" app:cardCornerRadius="20dp" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/navigation/navigation_graph.xml b/app/src/main/res/navigation/navigation_graph.xml index 5b531f4..c424b00 100644 --- a/app/src/main/res/navigation/navigation_graph.xml +++ b/app/src/main/res/navigation/navigation_graph.xml @@ -412,6 +412,9 @@ + SPRING + + Filter by: + Crops + Livestocks + + Seedling Acquisition Media Acquisition