From 49a03d920bf014390c0bd94a78860a84e4c2b12a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A1lint=20R=C3=A9thelyi?= <rethelyibalint@gmail.com> Date: Tue, 15 Feb 2022 17:43:16 +0100 Subject: [PATCH] misc fixes --- .../space/rethelyi/mosogepsch/MainActivity.kt | 16 ++++++++++--- .../space/rethelyi/mosogepsch/view/AppBar.kt | 2 +- .../space/rethelyi/mosogepsch/view/Floor.kt | 6 +++-- .../mosogepsch/view/MachineOnFloor.kt | 23 +++++++++++++++++-- .../rethelyi/mosogepsch/view/MainScreen.kt | 6 +++-- .../app/src/main/res/values-hu/strings.xml | 1 + frontend/app/src/main/res/values/strings.xml | 1 + 7 files changed, 45 insertions(+), 10 deletions(-) diff --git a/frontend/app/src/main/java/space/rethelyi/mosogepsch/MainActivity.kt b/frontend/app/src/main/java/space/rethelyi/mosogepsch/MainActivity.kt index 62c354c..9c973f4 100644 --- a/frontend/app/src/main/java/space/rethelyi/mosogepsch/MainActivity.kt +++ b/frontend/app/src/main/java/space/rethelyi/mosogepsch/MainActivity.kt @@ -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 + } } } diff --git a/frontend/app/src/main/java/space/rethelyi/mosogepsch/view/AppBar.kt b/frontend/app/src/main/java/space/rethelyi/mosogepsch/view/AppBar.kt index 8bf8ffd..b346ae3 100644 --- a/frontend/app/src/main/java/space/rethelyi/mosogepsch/view/AppBar.kt +++ b/frontend/app/src/main/java/space/rethelyi/mosogepsch/view/AppBar.kt @@ -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) ) } }, diff --git a/frontend/app/src/main/java/space/rethelyi/mosogepsch/view/Floor.kt b/frontend/app/src/main/java/space/rethelyi/mosogepsch/view/Floor.kt index 21afcb4..298521d 100644 --- a/frontend/app/src/main/java/space/rethelyi/mosogepsch/view/Floor.kt +++ b/frontend/app/src/main/java/space/rethelyi/mosogepsch/view/Floor.kt @@ -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 ) } } diff --git a/frontend/app/src/main/java/space/rethelyi/mosogepsch/view/MachineOnFloor.kt b/frontend/app/src/main/java/space/rethelyi/mosogepsch/view/MachineOnFloor.kt index 2df1dc8..d94574a 100644 --- a/frontend/app/src/main/java/space/rethelyi/mosogepsch/view/MachineOnFloor.kt +++ b/frontend/app/src/main/java/space/rethelyi/mosogepsch/view/MachineOnFloor.kt @@ -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 diff --git a/frontend/app/src/main/java/space/rethelyi/mosogepsch/view/MainScreen.kt b/frontend/app/src/main/java/space/rethelyi/mosogepsch/view/MainScreen.kt index b6a5146..619da53 100644 --- a/frontend/app/src/main/java/space/rethelyi/mosogepsch/view/MainScreen.kt +++ b/frontend/app/src/main/java/space/rethelyi/mosogepsch/view/MainScreen.kt @@ -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 ) } ) diff --git a/frontend/app/src/main/res/values-hu/strings.xml b/frontend/app/src/main/res/values-hu/strings.xml index bb1a7b9..38d6507 100644 --- a/frontend/app/src/main/res/values-hu/strings.xml +++ b/frontend/app/src/main/res/values-hu/strings.xml @@ -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 diff --git a/frontend/app/src/main/res/values/strings.xml b/frontend/app/src/main/res/values/strings.xml index d81072b..b9e3cab 100644 --- a/frontend/app/src/main/res/values/strings.xml +++ b/frontend/app/src/main/res/values/strings.xml @@ -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 -- GitLab