@@ -13,9 +13,16 @@ import androidx.compose.foundation.layout.Column
13
13
import androidx.compose.foundation.layout.Row
14
14
import androidx.compose.foundation.layout.fillMaxSize
15
15
import androidx.compose.foundation.layout.fillMaxWidth
16
+ import androidx.compose.foundation.layout.height
16
17
import androidx.compose.foundation.layout.padding
18
+ import androidx.compose.foundation.layout.size
19
+ import androidx.compose.material.ButtonDefaults
17
20
import androidx.compose.material.CircularProgressIndicator
21
+ import androidx.compose.material.Icon
18
22
import androidx.compose.material.Text
23
+ import androidx.compose.material.TextButton
24
+ import androidx.compose.material.icons.Icons
25
+ import androidx.compose.material.icons.rounded.Refresh
19
26
import androidx.compose.runtime.Composable
20
27
import androidx.compose.runtime.getValue
21
28
import androidx.compose.ui.Alignment
@@ -27,7 +34,8 @@ import com.jdamcd.arrivals.Arrival
27
34
28
35
@Composable
29
36
fun ArrivalsView (
30
- state : ArrivalsState
37
+ state : ArrivalsState ,
38
+ onClickRefresh : () -> Unit
31
39
) {
32
40
Column (
33
41
modifier = Modifier
@@ -37,7 +45,7 @@ fun ArrivalsView(
37
45
) {
38
46
when (state) {
39
47
is ArrivalsState .Loading -> Loading ()
40
- is ArrivalsState .Data -> Data (state)
48
+ is ArrivalsState .Data -> Data (state, onClickRefresh )
41
49
is ArrivalsState .Error -> Error (state.message)
42
50
}
43
51
}
@@ -49,12 +57,12 @@ private fun Loading() {
49
57
modifier = Modifier .fillMaxSize(),
50
58
contentAlignment = Alignment .Center
51
59
) {
52
- CircularProgressIndicator (color = Text )
60
+ CircularProgressIndicator (color = LedYellow )
53
61
}
54
62
}
55
63
56
64
@Composable
57
- private fun Data (state : ArrivalsState .Data ) {
65
+ private fun Data (state : ArrivalsState .Data , onClickRefresh : () -> Unit ) {
58
66
Column (
59
67
modifier = Modifier
60
68
.padding(32 .dp)
@@ -68,8 +76,11 @@ private fun Data(state: ArrivalsState.Data) {
68
76
Row (
69
77
modifier = Modifier
70
78
.background(color = Footer )
71
- .padding(16 .dp)
79
+ .padding(start = 32 .dp, end = 28 .dp, bottom = 4 .dp)
72
80
.fillMaxWidth()
81
+ .height(70 .dp),
82
+ horizontalArrangement = Arrangement .SpaceBetween ,
83
+ verticalAlignment = Alignment .CenterVertically
73
84
) {
74
85
Text (
75
86
text = state.result.station,
@@ -78,6 +89,29 @@ private fun Data(state: ArrivalsState.Data) {
78
89
fontSize = 32 .sp
79
90
)
80
91
)
92
+ Box (
93
+ modifier = Modifier .size(42 .dp),
94
+ contentAlignment = Alignment .Center
95
+ ) {
96
+ if (state.refreshing) {
97
+ CircularProgressIndicator (color = LedYellow , modifier = Modifier .size(22 .dp))
98
+ } else {
99
+ TextButton (
100
+ onClick = { onClickRefresh() },
101
+ colors = ButtonDefaults .textButtonColors(
102
+ contentColor = Text ,
103
+ backgroundColor = Footer
104
+ )
105
+ ) {
106
+ Icon (
107
+ Icons .Rounded .Refresh ,
108
+ contentDescription = " Refresh" ,
109
+ modifier = Modifier .size(32 .dp),
110
+ tint = Text
111
+ )
112
+ }
113
+ }
114
+ }
81
115
}
82
116
}
83
117
0 commit comments