Skip to content

Commit ad4ef4d

Browse files
committed
add wear loaders
1 parent 8094c7e commit ad4ef4d

File tree

8 files changed

+47
-19
lines changed

8 files changed

+47
-19
lines changed

README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,9 @@ Simple app that helps track how much time you spend on all the useless activitie
104104
├── data_local # Database.
105105
├── domain # Business logic.
106106
├── navigation # Navigation interfaces and screen params.
107+
├── resources # Common resources between phone and watch apps.
107108
├── wear # WearOS app.
108-
├── wear_api # Mobile - WearOS communication
109+
├── wear_api # Mobile - WearOS communication contracts.
109110
├── features
110111
│ ├── feature_archive # Screen for archived data.
111112
│ ├── feature_base_adapter # Shared recycler adapters.
@@ -130,6 +131,7 @@ Simple app that helps track how much time you spend on all the useless activitie
130131
│ ├── feature_statistics_detail # Screen showing detailed statistics.
131132
│ ├── feature_tag_selection # Screen for selecting tags.
132133
│ ├── feature_views # Custom views.
134+
│ ├── feature_wear # Phone app logic to connect to wear app.
133135
│ └── feature_widget # Widgets.
134136

135137
## License

wear/src/main/java/com/example/util/simpletimetracker/presentation/components/ActivitiesList.kt

+16-2
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@ package com.example.util.simpletimetracker.presentation.components
77

88
import androidx.annotation.StringRes
99
import androidx.compose.foundation.layout.padding
10+
import androidx.compose.foundation.layout.width
1011
import androidx.compose.runtime.Composable
1112
import androidx.compose.ui.Modifier
1213
import androidx.compose.ui.tooling.preview.Preview
1314
import androidx.compose.ui.unit.dp
15+
import androidx.wear.compose.material.CircularProgressIndicator
1416
import androidx.wear.compose.material.ScalingLazyListScope
1517
import androidx.wear.compose.material.Text
1618
import androidx.wear.tooling.preview.devices.WearDevices
@@ -61,8 +63,12 @@ fun ActivitiesList(
6163
}
6264
}
6365

64-
private fun renderLoading() {
65-
// Show nothing until data is loaded.
66+
private fun ScalingLazyListScope.renderLoading() {
67+
item {
68+
CircularProgressIndicator(
69+
modifier = Modifier.width(64.dp),
70+
)
71+
}
6672
}
6773

6874
private fun ScalingLazyListScope.renderEmpty(
@@ -108,6 +114,14 @@ private fun ScalingLazyListScope.renderRefreshButton(
108114
item { RefreshButton(onClick = onRefresh) }
109115
}
110116

117+
@Preview(device = WearDevices.LARGE_ROUND)
118+
@Composable
119+
private fun Loading() {
120+
ActivitiesList(
121+
state = ActivitiesListState.Loading,
122+
)
123+
}
124+
111125
@Preview(device = WearDevices.LARGE_ROUND)
112126
@Composable
113127
private fun NoActivities() {

wear/src/main/java/com/example/util/simpletimetracker/presentation/components/RefreshButton.kt

+7-11
Original file line numberDiff line numberDiff line change
@@ -15,30 +15,28 @@ import androidx.compose.runtime.remember
1515
import androidx.compose.runtime.setValue
1616
import androidx.compose.ui.Modifier
1717
import androidx.compose.ui.draw.rotate
18-
import androidx.compose.ui.platform.LocalContext
1918
import androidx.compose.ui.tooling.preview.Preview
2019
import androidx.compose.ui.unit.dp
2120
import androidx.wear.compose.material.Icon
2221
import androidx.wear.compose.material.OutlinedButton
23-
import com.example.util.simpletimetracker.R
2422
import com.example.util.simpletimetracker.presentation.remember.rememberAnimationRotation
2523

2624
@Composable
27-
fun RefreshButton(onClick: () -> Unit, contentDescription: String? = null) {
28-
val context = LocalContext.current
25+
fun RefreshButton(
26+
onClick: () -> Unit = {},
27+
) {
2928
var pressCount by remember { mutableIntStateOf(0) }
3029
val targetRotation = rememberAnimationRotation(key = pressCount)
30+
3131
OutlinedButton(
3232
onClick = {
3333
pressCount++
3434
onClick()
3535
},
3636
content = {
3737
Icon(
38-
Icons.Rounded.Refresh,
39-
contentDescription = contentDescription ?: context.getString(
40-
R.string.refresh_button_default_content_description,
41-
),
38+
imageVector = Icons.Rounded.Refresh,
39+
contentDescription = null,
4240
)
4341
},
4442
modifier = Modifier
@@ -50,7 +48,5 @@ fun RefreshButton(onClick: () -> Unit, contentDescription: String? = null) {
5048
@Preview
5149
@Composable
5250
private fun Preview() {
53-
RefreshButton(
54-
onClick = { /* Log.i("Preview", "Refresh Button clicked!") */ },
55-
)
51+
RefreshButton()
5652
}

wear/src/main/java/com/example/util/simpletimetracker/presentation/components/TagList.kt

+16-2
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ package com.example.util.simpletimetracker.presentation.components
77

88
import androidx.annotation.StringRes
99
import androidx.compose.foundation.layout.padding
10+
import androidx.compose.foundation.layout.width
1011
import androidx.compose.runtime.Composable
1112
import androidx.compose.ui.Modifier
1213
import androidx.compose.ui.graphics.Color
1314
import androidx.compose.ui.tooling.preview.Preview
1415
import androidx.compose.ui.unit.dp
16+
import androidx.wear.compose.material.CircularProgressIndicator
1517
import androidx.wear.compose.material.ScalingLazyListScope
1618
import androidx.wear.compose.material.Text
1719
import androidx.wear.tooling.preview.devices.WearDevices
@@ -73,8 +75,12 @@ fun TagList(
7375
}
7476
}
7577

76-
private fun renderLoadingState() {
77-
// Show nothing until data is loded.
78+
private fun ScalingLazyListScope.renderLoadingState() {
79+
item {
80+
CircularProgressIndicator(
81+
modifier = Modifier.width(64.dp),
82+
)
83+
}
7884
}
7985

8086
private fun ScalingLazyListScope.renderEmptyState(
@@ -116,6 +122,14 @@ private fun ScalingLazyListScope.renderContentState(
116122
}
117123
}
118124

125+
@Preview(device = WearDevices.LARGE_ROUND)
126+
@Composable
127+
private fun Loading() {
128+
TagList(
129+
state = TagListState.Loading,
130+
)
131+
}
132+
119133
@Preview(device = WearDevices.LARGE_ROUND)
120134
@Composable
121135
private fun NoTags() {

wear/src/main/java/com/example/util/simpletimetracker/presentation/layout/ScrollingColumn.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ fun ScrollingColumn(
4343
state = scrollState,
4444
),
4545
autoCentering = AutoCenteringParams(
46-
itemIndex = 0,
46+
itemIndex = 1,
4747
),
4848
contentPadding = PaddingValues(10.dp),
4949
verticalArrangement = Arrangement.Center,
-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<resources>
3-
<string name="refresh_button_default_content_description">Actualizar</string>
43
<string name="no_tags">Sin etiquetas</string>
54
<string name="no_activities">Sin actividades</string>
65
</resources>

wear/src/main/res/values/strings.xml

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
<resources>
2-
<string name="refresh_button_default_content_description">Refresh</string>
32
<string name="no_tags">No tags</string>
43
<string name="no_activities">No activities</string>
54
<string name="untagged">Untagged</string>

wear_api/src/main/java/com/example/util/simpletimetracker/wear_api/WearRequests.kt

+4
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,15 @@ package com.example.util.simpletimetracker.wear_api
88
object WearRequests {
99
const val PATH = "/stt"
1010

11+
// From wear to app.
12+
// Same strings are set in the android_wear_capabilities manifest
1113
const val PING = "$PATH//GET/ping"
1214
const val QUERY_ACTIVITIES = "$PATH//GET/activities"
1315
const val QUERY_CURRENT_ACTIVITIES = "$PATH//GET/activities/current"
1416
const val SET_CURRENT_ACTIVITIES = "$PATH//PUT/activities/current"
1517
const val QUERY_TAGS_FOR_ACTIVITY = "$PATH//GET/activities/:ID/tags"
1618
const val QUERY_SETTINGS = "$PATH//GET/settings"
19+
20+
// From app to wear.
1721
const val DATA_UPDATED = "$PATH//data/updated"
1822
}

0 commit comments

Comments
 (0)