@@ -4,12 +4,19 @@ import android.os.Bundle
44import android.view.LayoutInflater
55import android.view.View
66import android.view.ViewGroup
7- import androidx.compose.material.Text
7+ import androidx.compose.foundation.layout.*
8+ import androidx.compose.material.*
89import androidx.compose.runtime.Composable
10+ import androidx.compose.runtime.collectAsState
11+ import androidx.compose.runtime.getValue
12+ import androidx.compose.ui.Alignment
13+ import androidx.compose.ui.Modifier
914import androidx.compose.ui.platform.ComposeView
10- import androidx.compose.ui.tooling.preview.Preview
15+ import androidx.compose.ui.unit.dp
16+ import androidx.compose.ui.unit.sp
1117import androidx.fragment.app.Fragment
12- import com.rickclephas.kmp.observableviewmodel.sample.shared.Greeting
18+ import androidx.lifecycle.viewmodel.compose.viewModel
19+ import com.rickclephas.kmp.observableviewmodel.sample.shared.TimeTravelViewModel
1320
1421class ComposeFragment : Fragment () {
1522
@@ -19,18 +26,55 @@ class ComposeFragment: Fragment() {
1926 savedInstanceState : Bundle ?
2027 ): View = ComposeView (requireContext()).apply {
2128 setContent {
22- Greeting (Greeting ().greeting())
29+ Surface {
30+ TimeTravelScreen ()
31+ }
2332 }
2433 }
25- }
2634
27- @Composable
28- fun Greeting (text : String ) {
29- Text (text = text)
30- }
35+ @Composable
36+ private fun TimeTravelScreen (viewModel : TimeTravelViewModel = viewModel()) {
37+ Column (verticalArrangement = Arrangement .Center , horizontalAlignment = Alignment .CenterHorizontally ) {
38+ Text (" Actual time:" )
39+ val actualTime by viewModel.actualTime.collectAsState()
40+ Text (actualTime, fontSize = 20 .sp)
41+
42+ Spacer (modifier = Modifier .height(24 .dp))
43+
44+ Text (" Travel effect:" )
45+ val travelEffect by viewModel.travelEffect.collectAsState()
46+ Text (travelEffect.toString(), fontSize = 20 .sp)
47+
48+ Spacer (modifier = Modifier .height(24 .dp))
49+
50+ Text (" Current time:" )
51+ val currentTime by viewModel.currentTime.collectAsState()
52+ Text (currentTime, fontSize = 20 .sp)
53+
54+ Spacer (modifier = Modifier .height(24 .dp))
3155
32- @Preview
33- @Composable
34- fun DefaultPreview () {
35- Greeting (" Hello, Android!" )
56+ val isFixedTime by viewModel.isFixedTime.collectAsState()
57+ Row (verticalAlignment = Alignment .CenterVertically ) {
58+ Checkbox (isFixedTime, { isChecked ->
59+ when (isChecked) {
60+ true -> viewModel.stopTime()
61+ false -> viewModel.startTime()
62+ }
63+ })
64+ Text (" Fixed time" )
65+ }
66+
67+ Spacer (modifier = Modifier .height(24 .dp))
68+
69+ Button (viewModel::timeTravel) {
70+ Text (" Time travel" )
71+ }
72+
73+ Spacer (modifier = Modifier .height(24 .dp))
74+
75+ Button (viewModel::resetTime) {
76+ Text (" Reset" )
77+ }
78+ }
79+ }
3680}
0 commit comments