@@ -12,9 +12,12 @@ import de.seemoo.at_tracking_detection.database.models.device.DeviceType
12
12
import de.seemoo.at_tracking_detection.database.repository.BeaconRepository
13
13
import de.seemoo.at_tracking_detection.database.repository.DeviceRepository
14
14
import de.seemoo.at_tracking_detection.database.repository.NotificationRepository
15
+ import de.seemoo.at_tracking_detection.util.SharedPrefs
15
16
import kotlinx.coroutines.launch
16
17
import timber.log.Timber
17
18
import java.time.LocalDateTime
19
+ import java.time.format.DateTimeFormatter
20
+ import java.time.format.FormatStyle
18
21
import javax.inject.Inject
19
22
20
23
class TrackingViewModel @Inject constructor(
@@ -59,6 +62,13 @@ class TrackingViewModel @Inject constructor(
59
62
it.size.toString()
60
63
}
61
64
65
+ val lastSeenTimes: MutableLiveData <List <String >> = MutableLiveData (emptyList())
66
+ val lastSeenTimesString: LiveData <String > = lastSeenTimes.map {
67
+ it.joinToString(separator = " \n " )
68
+ }
69
+
70
+ val expertMode = MutableLiveData (false )
71
+
62
72
fun loadDevice (address : String , deviceTypeOverride : DeviceType ) =
63
73
deviceRepository.getDevice(address).also { device ->
64
74
this .device.postValue(device)
@@ -77,6 +87,12 @@ class TrackingViewModel @Inject constructor(
77
87
canBeIgnored.postValue(deviceType.value!! .canBeIgnored(ConnectionState .OVERMATURE_OFFLINE ))
78
88
val notification = notificationRepository.notificationForDevice(device).firstOrNull()
79
89
notification?.let { notificationId.postValue(it.notificationId) }
90
+
91
+ // Load last seen times
92
+ viewModelScope.launch {
93
+ loadLastSeenTimes(device)
94
+ expertMode.postValue(SharedPrefs .advancedMode)
95
+ }
80
96
} else {
81
97
noLocationsYet.postValue(true )
82
98
}
@@ -89,6 +105,14 @@ class TrackingViewModel @Inject constructor(
89
105
}
90
106
}
91
107
108
+ private fun loadLastSeenTimes (baseDevice : BaseDevice ) {
109
+ val beacons = beaconRepository.getDeviceBeacons(baseDevice.address)
110
+ val lastSeenList = beacons.sortedByDescending { it.receivedAt }.take(5 ).map { beacon ->
111
+ DateTimeFormatter .ofLocalizedDateTime(FormatStyle .MEDIUM ).format(beacon.receivedAt)
112
+ }
113
+ lastSeenTimes.postValue(lastSeenList)
114
+ }
115
+
92
116
fun toggleIgnoreDevice () {
93
117
if (deviceAddress.value != null ) {
94
118
val newState = ! deviceIgnored.value!!
0 commit comments