From 2441ee1592471d357d383d3540b7b8a4474f22e8 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Sat, 19 Mar 2022 15:32:06 +0100 Subject: [PATCH] FoodFragment spinner replacement --- .../androidaps/dialogs/WizardDialog.kt | 2 +- .../plugins/general/food/FoodFragment.kt | 82 +++++++------------ app/src/main/res/layout/food_fragment.xml | 60 +++++++------- 3 files changed, 60 insertions(+), 84 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt index 5ce0e6ff91..70c9b20244 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt @@ -114,7 +114,7 @@ class WizardDialog : DaggerDialogFragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { this.arguments?.let { bundle -> - carbsPassedIntoWizard = bundle.getInt("carbs_input").toDouble() + carbsPassedIntoWizard = bundle.getDouble("carbs_input") notesPassedIntoWizard = bundle.getString("notes_input").toString() } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/food/FoodFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/food/FoodFragment.kt index eae7c2b177..7aa8aad9f3 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/food/FoodFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/food/FoodFragment.kt @@ -1,7 +1,6 @@ package info.nightscout.androidaps.plugins.general.food import android.annotation.SuppressLint -import android.graphics.Paint import android.os.Bundle import android.text.Editable import android.text.TextWatcher @@ -24,18 +23,18 @@ import info.nightscout.androidaps.databinding.FoodFragmentBinding import info.nightscout.androidaps.databinding.FoodItemBinding import info.nightscout.androidaps.dialogs.WizardDialog import info.nightscout.androidaps.events.EventFoodDatabaseChanged -import info.nightscout.shared.logging.AAPSLogger -import info.nightscout.shared.logging.LTag +import info.nightscout.androidaps.extensions.toVisibility import info.nightscout.androidaps.logging.UserEntryLogger import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.plugins.general.nsclient.events.EventNSClientRestart import info.nightscout.androidaps.utils.FabricPrivacy import info.nightscout.androidaps.utils.alertDialogs.OKDialog -import info.nightscout.androidaps.extensions.toVisibility import info.nightscout.androidaps.utils.protection.ProtectionCheck import info.nightscout.androidaps.utils.resources.ResourceHelper import info.nightscout.androidaps.utils.rx.AapsSchedulers import info.nightscout.androidaps.utils.ui.UIRunnable +import info.nightscout.shared.logging.AAPSLogger +import info.nightscout.shared.logging.LTag import io.reactivex.rxjava3.core.Completable import io.reactivex.rxjava3.disposables.CompositeDisposable import io.reactivex.rxjava3.kotlin.plusAssign @@ -43,7 +42,6 @@ import io.reactivex.rxjava3.kotlin.subscribeBy import java.util.* import java.util.concurrent.TimeUnit import javax.inject.Inject -import kotlin.collections.ArrayList class FoodFragment : DaggerFragment() { @@ -66,10 +64,8 @@ class FoodFragment : DaggerFragment() { // onDestroyView. private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { - _binding = FoodFragmentBinding.inflate(inflater, container, false) - return binding.root - } + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View = + FoodFragmentBinding.inflate(inflater, container, false).also { _binding = it }.root override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -80,8 +76,10 @@ class FoodFragment : DaggerFragment() { binding.refreshFromNightscout.setOnClickListener { context?.let { context -> OKDialog.showConfirmation(context, rh.gs(R.string.refresheventsfromnightscout) + " ?", { - uel.log(Action.FOOD, Sources.Food, rh.gs(R.string.refresheventsfromnightscout), - ValueWithUnit.SimpleString(rh.gsNotLocalised(R.string.refresheventsfromnightscout))) + uel.log( + Action.FOOD, Sources.Food, rh.gs(R.string.refresheventsfromnightscout), + ValueWithUnit.SimpleString(rh.gsNotLocalised(R.string.refresheventsfromnightscout)) + ) disposable += Completable.fromAction { repository.deleteAllFoods() } .subscribeOn(aapsSchedulers.io) .observeOn(aapsSchedulers.main) @@ -97,30 +95,12 @@ class FoodFragment : DaggerFragment() { binding.clearfilter.setOnClickListener { binding.filter.setText("") - binding.category.setSelection(0) - binding.subcategory.setSelection(0) + binding.categoryList.setText(rh.gs(R.string.none), false) + binding.subcategoryList.setText(rh.gs(R.string.none), false) filterData() } - binding.category.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { - fillSubcategories() - filterData() - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - fillSubcategories() - filterData() - } - } - binding.subcategory.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { - filterData() - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - filterData() - } - } + binding.categoryList.onItemClickListener = AdapterView.OnItemClickListener { _, _, _, _ -> fillSubcategories(); filterData() } + binding.subcategoryList.onItemClickListener = AdapterView.OnItemClickListener { _, _, _, _ -> filterData() } binding.filter.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) { @@ -134,12 +114,11 @@ class FoodFragment : DaggerFragment() { @Synchronized override fun onResume() { super.onResume() - disposable.add(rxBus + disposable += rxBus .toObservable(EventFoodDatabaseChanged::class.java) .observeOn(aapsSchedulers.main) .debounce(1L, TimeUnit.SECONDS) .subscribe({ swapAdapter() }, fabricPrivacy::logException) - ) swapAdapter() } @@ -178,13 +157,13 @@ class FoodFragment : DaggerFragment() { val categories = ArrayList(catSet) categories.add(0, rh.gs(R.string.none)) context?.let { context -> - val adapterCategories = ArrayAdapter(context, R.layout.spinner_centered, categories) - binding.category.adapter = adapterCategories + binding.categoryList.setAdapter(ArrayAdapter(context, R.layout.spinner_centered, categories)) + binding.categoryList.setText(rh.gs(R.string.none), false) } } private fun fillSubcategories() { - val categoryFilter = binding.category.selectedItem.toString() + val categoryFilter = binding.categoryList.text.toString() val subCatSet: MutableSet = HashSet() if (categoryFilter != rh.gs(R.string.none)) { for (f in unfiltered) { @@ -198,17 +177,15 @@ class FoodFragment : DaggerFragment() { val subcategories = ArrayList(subCatSet) subcategories.add(0, rh.gs(R.string.none)) context?.let { context -> - val adapterSubcategories = ArrayAdapter(context, R.layout.spinner_centered, subcategories) - binding.subcategory.adapter = adapterSubcategories + binding.subcategoryList.setAdapter(ArrayAdapter(context, R.layout.spinner_centered, subcategories)) + binding.subcategoryList.setText(rh.gs(R.string.none), false) } } private fun filterData() { val textFilter = binding.filter.text.toString() - val categoryFilter = binding.category.selectedItem?.toString() - ?: rh.gs(R.string.none) - val subcategoryFilter = binding.subcategory.selectedItem?.toString() - ?: rh.gs(R.string.none) + val categoryFilter = binding.categoryList.text.toString() + val subcategoryFilter = binding.subcategoryList.text.toString() val newFiltered = ArrayList() for (f in unfiltered) { if (f.category == null || f.subCategory == null) continue @@ -267,18 +244,17 @@ class FoodFragment : DaggerFragment() { }, null) } } - binding.icCalculator.setOnClickListener { v:View -> + binding.icCalculator.setOnClickListener { v: View -> val food = v.tag as Food activity?.let { activity -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { - if (isAdded) { - val wizardDialog = WizardDialog() - val bundle = Bundle() - bundle.putInt("carbs_input", food.carbs) - bundle.putString("notes_input", " ${food.name} - ${food.carbs}g") - wizardDialog.setArguments(bundle) - wizardDialog.show(childFragmentManager, "Food Item") - } + if (isAdded) + WizardDialog().also { dialog -> + dialog.arguments = Bundle().also { bundle -> + bundle.putDouble("carbs_input", food.carbs.toDouble()) + bundle.putString("notes_input", " ${food.name} - ${food.carbs}g") + } + }.show(childFragmentManager, "Food Item") }) } } diff --git a/app/src/main/res/layout/food_fragment.xml b/app/src/main/res/layout/food_fragment.xml index 4e37bd00cf..4ff1de70d9 100644 --- a/app/src/main/res/layout/food_fragment.xml +++ b/app/src/main/res/layout/food_fragment.xml @@ -49,44 +49,44 @@ app:srcCompat="@android:drawable/ic_menu_close_clear_cancel" /> - + android:layout_marginStart="5dp" + android:layout_marginEnd="5dp" + android:hint="@string/category" + app:boxStrokeColor="@color/list_delimiter"> - + android:clickable="true" + android:enabled="false" + tools:ignore="KeyboardInaccessibleWidget" /> - + + + + + android:clickable="true" + android:enabled="false" + tools:ignore="KeyboardInaccessibleWidget" /> - + - - - - -