BGSourceFragment -> jetpack

This commit is contained in:
Milos Kozak 2021-02-03 15:43:47 +01:00
parent 4476d0e0db
commit fab3c870d7
3 changed files with 49 additions and 54 deletions

View file

@ -5,14 +5,14 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import dagger.android.support.DaggerFragment
import info.nightscout.androidaps.MainApp
import info.nightscout.androidaps.R
import info.nightscout.androidaps.databinding.BgsourceFragmentBinding
import info.nightscout.androidaps.databinding.BgsourceItemBinding
import info.nightscout.androidaps.db.BgReading
import info.nightscout.androidaps.events.EventNewBG
import info.nightscout.androidaps.interfaces.DatabaseHelperInterface
@ -31,7 +31,6 @@ import info.nightscout.androidaps.utils.extensions.toVisibility
import info.nightscout.androidaps.utils.resources.ResourceHelper
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import kotlinx.android.synthetic.main.bgsource_fragment.*
import javax.inject.Inject
class BGSourceFragment : DaggerFragment() {
@ -44,25 +43,24 @@ class BGSourceFragment : DaggerFragment() {
@Inject lateinit var databaseHelper: DatabaseHelperInterface
private val disposable = CompositeDisposable()
private val MILLS_TO_THE_PAST = T.hours(12).msecs()
private val millsToThePast = T.hours(12).msecs()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.bgsource_fragment, container, false)
}
private var _binding: BgsourceFragmentBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View =
BgsourceFragmentBinding.inflate(inflater, container, false).also { _binding = it }.root
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
bgsource_recyclerview.setHasFixedSize(true)
bgsource_recyclerview.layoutManager = LinearLayoutManager(view.context)
binding.recyclerview.setHasFixedSize(true)
binding.recyclerview.layoutManager = LinearLayoutManager(view.context)
val now = System.currentTimeMillis()
bgsource_recyclerview.adapter = RecyclerViewAdapter(getBgData(now))
}
override fun onDestroyView() {
super.onDestroyView()
bgsource_recyclerview?.adapter = null // avoid leaks
binding.recyclerview.adapter = RecyclerViewAdapter(getBgData(now))
}
@Synchronized
@ -87,17 +85,25 @@ class BGSourceFragment : DaggerFragment() {
super.onPause()
}
@Synchronized
override fun onDestroyView() {
super.onDestroyView()
_binding = null
binding.recyclerview.adapter = null // avoid leaks
}
private fun updateGUI() {
if (_binding == null) return
val now = System.currentTimeMillis()
(bgsource_recyclerview?.adapter as? RecyclerViewAdapter)?.setData(getBgData(now))
(binding.recyclerview.adapter as? RecyclerViewAdapter)?.setData(getBgData(now))
}
private fun getBgData(now: Long) = MainApp.getDbHelper()
.getAllBgreadingsDataFromTime(now - MILLS_TO_THE_PAST, false)
.getAllBgreadingsDataFromTime(now - millsToThePast, false)
inner class RecyclerViewAdapter internal constructor(bgReadings: List<BgReading>) : RecyclerView.Adapter<BgReadingsViewHolder>() {
private var callbackHelper = ListUpdateCallbackHelper(this) { bgsource_recyclerview?.smoothScrollToPosition(0) }
private var callbackHelper = ListUpdateCallbackHelper(this) { binding.recyclerview.smoothScrollToPosition(0) }
private val currentData: MutableList<BgReading> = mutableListOf<BgReading>().also { it.addAll(bgReadings) }
@ -130,30 +136,25 @@ class BGSourceFragment : DaggerFragment() {
override fun onBindViewHolder(holder: BgReadingsViewHolder, position: Int) {
val bgReading = currentData[position]
holder.ns.visibility = (NSUpload.isIdValid(bgReading._id)).toVisibility()
holder.invalid.visibility = bgReading.isValid.not().toVisibility()
holder.date.text = dateUtil.dateAndTimeString(bgReading.date)
holder.value.text = bgReading.valueToUnitsToString(profileFunction.getUnits())
holder.direction.setImageResource(bgReading.directionToIcon(databaseHelper))
holder.remove.tag = bgReading
holder.remove.visibility = bgReading.isValid.toVisibility()
holder.binding.ns.visibility = (NSUpload.isIdValid(bgReading._id)).toVisibility()
holder.binding.invalid.visibility = bgReading.isValid.not().toVisibility()
holder.binding.date.text = dateUtil.dateAndTimeString(bgReading.date)
holder.binding.value.text = bgReading.valueToUnitsToString(profileFunction.getUnits())
holder.binding.direction.setImageResource(bgReading.directionToIcon(databaseHelper))
holder.binding.remove.tag = bgReading
holder.binding.remove.visibility = bgReading.isValid.toVisibility()
}
override fun getItemCount(): Int {
return currentData.size
}
inner class BgReadingsViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
inner class BgReadingsViewHolder(view: View) : RecyclerView.ViewHolder(view) {
var date: TextView = itemView.findViewById(R.id.bgsource_date)
var value: TextView = itemView.findViewById(R.id.bgsource_value)
var direction: ImageView = itemView.findViewById(R.id.bgsource_direction)
var invalid: TextView = itemView.findViewById(R.id.invalid_sign)
var ns: TextView = itemView.findViewById(R.id.ns_sign)
var remove: TextView = itemView.findViewById(R.id.bgsource_remove)
val binding = BgsourceItemBinding.bind(view)
init {
remove.setOnClickListener { v: View ->
binding.remove.setOnClickListener { v: View ->
val bgReading = v.tag as BgReading
activity?.let { activity ->
val text = dateUtil.dateAndTimeString(bgReading.date) + "\n" + bgReading.valueToUnitsToString(profileFunction.getUnits())
@ -163,7 +164,7 @@ class BGSourceFragment : DaggerFragment() {
})
}
}
remove.paintFlags = remove.paintFlags or Paint.UNDERLINE_TEXT_FLAG
binding.remove.paintFlags = binding.remove.paintFlags or Paint.UNDERLINE_TEXT_FLAG
}
}
}

View file

@ -1,22 +1,16 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingTop="2dp"
tools:context="info.nightscout.androidaps.plugins.source.BGSourceFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/bgsource_recyclerview"
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.recyclerview.widget.RecyclerView>
</LinearLayout>
</FrameLayout>
</LinearLayout>

View file

@ -21,14 +21,14 @@
android:orientation="horizontal">
<TextView
android:id="@+id/bgsource_date"
android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="16:55"
android:textStyle="bold" />
<TextView
android:id="@+id/bgsource_value"
android:id="@+id/value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="10dp"
@ -36,14 +36,14 @@
android:textStyle="bold" />
<ImageView
android:id="@+id/bgsource_direction"
android:id="@+id/direction"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
card_view:srcCompat="@drawable/ic_flat" />
<TextView
android:id="@+id/ns_sign"
android:id="@+id/ns"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="10dp"
@ -52,7 +52,7 @@
android:textColor="@color/colorSetTempButton" />
<TextView
android:id="@+id/invalid_sign"
android:id="@+id/invalid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="10dp"
@ -60,7 +60,7 @@
android:textColor="@android:color/holo_red_light" />
<TextView
android:id="@+id/bgsource_remove"
android:id="@+id/remove"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingEnd="5dp"