Improve last seen display

This commit is contained in:
darken
2022-01-06 21:21:07 +01:00
parent c50699dadd
commit 7f9be1e41b
5 changed files with 22 additions and 40 deletions
@@ -1,6 +1,5 @@
package eu.darken.capod.main.ui.overview.cards.pods
import android.icu.text.RelativeDateTimeFormatter
import android.view.ViewGroup
import androidx.core.view.isGone
import eu.darken.capod.R
@@ -8,7 +7,7 @@ import eu.darken.capod.common.lists.binding
import eu.darken.capod.databinding.OverviewPodsAppleSingleBasicItemBinding
import eu.darken.capod.pods.core.apple.BasicSingleApplePods
import eu.darken.capod.pods.core.getBatteryLevelHeadset
import java.time.Duration
import eu.darken.capod.pods.core.lastSeenFormatted
import java.time.Instant
class BasicSingleApplePodsCardVH(parent: ViewGroup) :
@@ -19,20 +18,13 @@ class BasicSingleApplePodsCardVH(parent: ViewGroup) :
override val viewBinding = lazy { OverviewPodsAppleSingleBasicItemBinding.bind(itemView) }
private val lastSeenFormatter = RelativeDateTimeFormatter.getInstance()
override val onBindData = binding(payload = true) { item: Item ->
val device = item.device
name.text = device.getLabel(context)
deviceIcon.setImageResource(device.iconRes)
val duration = Duration.between(device.lastSeenAt, item.now)
lastSeen.text = lastSeenFormatter.format(
duration.seconds.toDouble(),
RelativeDateTimeFormatter.Direction.LAST,
RelativeDateTimeFormatter.RelativeUnit.SECONDS
)
lastSeen.text = device.lastSeenFormatted(item.now)
reception.text = device.getSignalQuality(context)
@@ -1,6 +1,5 @@
package eu.darken.capod.main.ui.overview.cards.pods
import android.icu.text.RelativeDateTimeFormatter
import android.view.ViewGroup
import eu.darken.capod.R
import eu.darken.capod.common.lists.binding
@@ -12,7 +11,7 @@ import eu.darken.capod.pods.core.apple.DualApplePods.LidState
import eu.darken.capod.pods.core.getBatteryLevelCase
import eu.darken.capod.pods.core.getBatteryLevelLeftPod
import eu.darken.capod.pods.core.getBatteryLevelRightPod
import java.time.Duration
import eu.darken.capod.pods.core.lastSeenFormatted
import java.time.Instant
class DualApplePodsCardVH(parent: ViewGroup) :
@@ -23,8 +22,6 @@ class DualApplePodsCardVH(parent: ViewGroup) :
override val viewBinding = lazy { OverviewPodsAppleDualItemBinding.bind(itemView) }
private val lastSeenFormatter = RelativeDateTimeFormatter.getInstance()
override val onBindData = binding(payload = true) { item: Item ->
val device = item.device
name.apply {
@@ -36,12 +33,7 @@ class DualApplePodsCardVH(parent: ViewGroup) :
}
deviceIcon.setImageResource(device.iconRes)
val duration = Duration.between(device.lastSeenAt, item.now)
lastSeen.text = lastSeenFormatter.format(
duration.seconds.toDouble(),
RelativeDateTimeFormatter.Direction.LAST,
RelativeDateTimeFormatter.RelativeUnit.SECONDS
)
lastSeen.text = device.lastSeenFormatted(item.now)
reception.text = device.getSignalQuality(context)
@@ -1,6 +1,5 @@
package eu.darken.capod.main.ui.overview.cards.pods
import android.icu.text.RelativeDateTimeFormatter
import android.view.ViewGroup
import androidx.core.view.isGone
import eu.darken.capod.R
@@ -8,7 +7,7 @@ import eu.darken.capod.common.lists.binding
import eu.darken.capod.databinding.OverviewPodsAppleSingleItemBinding
import eu.darken.capod.pods.core.apple.SingleApplePods
import eu.darken.capod.pods.core.getBatteryLevelHeadset
import java.time.Duration
import eu.darken.capod.pods.core.lastSeenFormatted
import java.time.Instant
class SingleApplePodsCardVH(parent: ViewGroup) :
@@ -19,20 +18,13 @@ class SingleApplePodsCardVH(parent: ViewGroup) :
override val viewBinding = lazy { OverviewPodsAppleSingleItemBinding.bind(itemView) }
private val lastSeenFormatter = RelativeDateTimeFormatter.getInstance()
override val onBindData = binding(payload = true) { item: Item ->
val device = item.device
name.text = device.getLabel(context)
deviceIcon.setImageResource(device.iconRes)
val duration = Duration.between(device.lastSeenAt, item.now)
lastSeen.text = lastSeenFormatter.format(
duration.seconds.toDouble(),
RelativeDateTimeFormatter.Direction.LAST,
RelativeDateTimeFormatter.RelativeUnit.SECONDS
)
lastSeen.text = device.lastSeenFormatted(item.now)
reception.text = device.getSignalQuality(context)
@@ -1,12 +1,11 @@
package eu.darken.capod.main.ui.overview.cards.pods
import android.icu.text.RelativeDateTimeFormatter
import android.view.ViewGroup
import eu.darken.capod.R
import eu.darken.capod.common.lists.binding
import eu.darken.capod.databinding.OverviewPodsUnknownItemBinding
import eu.darken.capod.pods.core.PodDevice
import java.time.Duration
import eu.darken.capod.pods.core.lastSeenFormatted
import java.time.Instant
class UnknownPodDeviceCardVH(parent: ViewGroup) :
@@ -19,18 +18,11 @@ class UnknownPodDeviceCardVH(parent: ViewGroup) :
OverviewPodsUnknownItemBinding.bind(itemView)
}
private val lastSeenFormatter = RelativeDateTimeFormatter.getInstance()
override val onBindData = binding(payload = true) { item ->
val device = item.device
name.text = device.getLabel(context)
val duration = Duration.between(device.lastSeenAt, item.now)
lastSeen.text = lastSeenFormatter.format(
duration.seconds.toDouble(),
RelativeDateTimeFormatter.Direction.LAST,
RelativeDateTimeFormatter.RelativeUnit.SECONDS
)
lastSeen.text = device.lastSeenFormatted(item.now)
reception.text = device.getSignalQuality(context)
@@ -1,7 +1,10 @@
package eu.darken.capod.pods.core
import android.content.Context
import android.icu.text.RelativeDateTimeFormatter
import eu.darken.capod.R
import java.time.Duration
import java.time.Instant
import kotlin.math.roundToInt
fun HasDualPods.getBatteryLevelLeftPod(context: Context): String =
@@ -19,3 +22,14 @@ fun HasCase.getBatteryLevelCase(context: Context): String =
fun HasSinglePod.getBatteryLevelHeadset(context: Context): String =
batteryHeadsetPercent?.let { "${(it * 100).roundToInt()}%" }
?: context.getString(R.string.general_value_not_available_label)
private val lastSeenFormatter = RelativeDateTimeFormatter.getInstance()
fun PodDevice.lastSeenFormatted(now: Instant): String {
val duration = Duration.between(lastSeenAt, now)
return lastSeenFormatter.format(
duration.seconds.toDouble(),
RelativeDateTimeFormatter.Direction.LAST,
RelativeDateTimeFormatter.RelativeUnit.SECONDS
)
}