Skip to content
Snippets Groups Projects
Verified Commit 49a03d92 authored by Réthelyi Bálint's avatar Réthelyi Bálint :no_mouth:
Browse files

misc fixes

parent 55a0ebc0
No related branches found
No related tags found
No related merge requests found
Pipeline #18207 failed
......@@ -16,6 +16,7 @@ import space.rethelyi.mosogepsch.model.data.MosogepSchDatabase
import space.rethelyi.mosogepsch.network.Api
import space.rethelyi.mosogepsch.notification.createNotificationChannel
import space.rethelyi.mosogepsch.view.*
import java.util.*
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
......@@ -40,6 +41,7 @@ class MainActivity : ComponentActivity() {
fun MosogepSCH() {
var rooms by remember { mutableStateOf(listOf<LaundryRoom>()) }
var error by remember { mutableStateOf(false) }
var lastRequestTime by remember { mutableStateOf<Date?>(null) }
val coroutineScope = rememberCoroutineScope()
val ctx = LocalContext.current
......@@ -48,11 +50,13 @@ fun MosogepSCH() {
suspend fun reload() {
try {
val tmprooms = Api.getLaundryRooms()
lastRequestTime = Date()
for (room in tmprooms) {
room.machines.forEach {
it.last_query_time = room.last_query_time
it.floorId = room.id.toString()
}
room.machines = room.machines.sortedBy { it.kind_of }
room.toDb(ctx)
}
rooms = tmprooms
......@@ -62,7 +66,9 @@ fun MosogepSCH() {
val list = db.dao.getAllLaundryRoom()
val oldRooms: MutableList<LaundryRoom> = mutableListOf()
list.forEach { element ->
oldRooms.add(element.toLaundryRoom(ctx))
val floor = element.toLaundryRoom(ctx)
floor.machines = floor.machines.sortedBy { it.kind_of }
oldRooms.add(floor)
}
rooms = oldRooms
}
......@@ -71,8 +77,12 @@ fun MosogepSCH() {
if (rooms.isEmpty()) {
LoadingScreen()
} else {
MainScreen(rooms, error) {
coroutineScope.launch { reload() }
MainScreen(rooms, error, lastRequestTime) {
coroutineScope.launch {
it.isRefreshing = true
reload()
it.isRefreshing = false
}
}
}
......
......@@ -34,7 +34,7 @@ fun AppBar(internet: Boolean) {
if (!internet) {
Icon(
painter = painterResource(R.drawable.cloud_off),
contentDescription = "no internet connection"
contentDescription = stringResource(R.string.no_internet)
)
}
},
......
......@@ -13,9 +13,10 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import space.rethelyi.mosogepsch.R
import space.rethelyi.mosogepsch.model.Machine
import java.util.*
@Composable
fun FloorListItem(floor: Floor) {
fun FloorListItem(floor: Floor, lastRequestTime: Date?) {
val modifier = Modifier.fillMaxWidth()
Card(
modifier = modifier,
......@@ -41,7 +42,8 @@ fun FloorListItem(floor: Floor) {
for(machine in floor.machines) {
MachineOnFloorView(
machine = machine,
modifier = Modifier.weight(1f)
modifier = Modifier.weight(1f),
lastRequestTime = lastRequestTime
)
}
}
......
......@@ -12,9 +12,12 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import space.rethelyi.mosogepsch.R
import space.rethelyi.mosogepsch.model.Machine
import java.time.Instant
import java.time.LocalDateTime
import java.util.*
@Composable
fun MachineOnFloorView(machine: Machine, modifier: Modifier) {
fun MachineOnFloorView(machine: Machine, modifier: Modifier, lastRequestTime: Date?) {
val context = LocalContext.current
Card(
modifier = modifier
......@@ -25,7 +28,15 @@ fun MachineOnFloorView(machine: Machine, modifier: Modifier) {
intent.putExtra("machine", machine)
context.startActivity(intent)
}),
color = if (machine.status == 1) MaterialTheme.colorScheme.error else MaterialTheme.colorScheme.primary,
color = when {
machine.last_query_time.isLostInSpace(lastRequestTime) -> {
MaterialTheme.colorScheme.background
}
machine.status == 1 -> {
MaterialTheme.colorScheme.error
}
else -> MaterialTheme.colorScheme.primary
},
) {
Column(
modifier = Modifier
......@@ -56,3 +67,11 @@ fun MachineOnFloorView(machine: Machine, modifier: Modifier) {
}
}
}
const val spaceThreshold = 10*60*1000 // 10 minutes
fun Date.isLostInSpace(lastRequestTime: Date?) : Boolean {
if (lastRequestTime == null) return false
val diff = lastRequestTime.time - this.time
return diff > spaceThreshold
}
\ No newline at end of file
......@@ -16,10 +16,11 @@ import androidx.compose.ui.unit.dp
import com.google.accompanist.swiperefresh.SwipeRefresh
import com.google.accompanist.swiperefresh.SwipeRefreshState
import space.rethelyi.mosogepsch.model.LaundryRoom
import java.util.*
@Composable
@OptIn(ExperimentalMaterial3Api::class)
fun MainScreen(rooms: List<LaundryRoom>, error: Boolean, reload: (swipe: SwipeRefreshState) -> Unit) {
fun MainScreen(rooms: List<LaundryRoom>, error: Boolean, lastRequestTime: Date?, reload: (swipe: SwipeRefreshState) -> Unit) {
val isRefreshing by remember { mutableStateOf(SwipeRefreshState(!error)) }
Scaffold(
topBar = { AppBar(!error) }
......@@ -42,7 +43,8 @@ fun MainScreen(rooms: List<LaundryRoom>, error: Boolean, reload: (swipe: SwipeRe
floor = Floor(
id = it.id,
machines = it.machines
)
),
lastRequestTime = lastRequestTime
)
}
)
......
......@@ -16,4 +16,5 @@
<string name="unsub_fail">Sikertelen leiratkozás</string>
<string name="title">%1$s. emeleti %2$s</string>
<string name="notification_msg">A %1$s. emeleti %2$s %3$s lett.</string>
<string name="no_internet">nincs internet kapcsolat</string>
</resources>
\ No newline at end of file
......@@ -18,4 +18,5 @@
<string name="unsub_fail">Failed to unsubscribe</string>
<string name="title">%2$s on floor %1$s</string>
<string name="notification_msg">The %2$s on floor %1$s became %3$s</string>
<string name="no_internet">no internet connection</string>
</resources>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment