A fork of Simple Time Tracker with WearOS support. (Now integrated upstream)
0

Configure Feed

Select the types of activity you want to include in your feed.

feat: Create `rememberRPCClient`

Simplifies the usage of all other `remember` functions.

Additionally, it's now easier to obtain an `rpc` instance for direct
RPC requests.

Eventually, there might even be the option of supplying the
same RPC instance to all callers, enabling request
batching/pooling, etc.

Joseph Hale (Feb 26, 2024, 10:27 PM -0700) 8ae3ebac d2f9e87d

+27 -26
+3 -3
wear/src/main/java/com/example/util/simpletimetracker/presentation/remember/activities.kt
··· 23 23 * 24 24 * Usage: 25 25 * ``` 26 - * val rpc = /* create a WearRPCClient instance */ 27 - * val (activities, refresh) = rememberActivities(rpc) 26 + * val (activities, refresh) = rememberActivities() 28 27 * ``` 29 28 * 30 29 * Initially, `activities` will be an empty array. Once the actual activities are received ··· 35 34 * from the phone. 36 35 */ 37 36 @Composable 38 - fun rememberActivities(rpc: WearRPCClient): Pair<Array<Activity>, () -> Unit> { 37 + fun rememberActivities(): Pair<Array<Activity>, () -> Unit> { 38 + var rpc = rememberRPCClient() 39 39 var activities: Array<Activity> by remember { mutableStateOf(arrayOf()) } 40 40 var activitiesQueryCount by remember { mutableIntStateOf(0) } 41 41 LaunchedEffect(activitiesQueryCount) {
+4 -6
wear/src/main/java/com/example/util/simpletimetracker/presentation/remember/currentActivities.kt
··· 25 25 * 26 26 * Usage: 27 27 * ``` 28 - * val rpc = /* create a WearRPCClient instance */ 29 - * val (currents, setCurrents, refresh) = rememberCurrentActivities(rpc) 28 + * val (currents, setCurrents, refresh) = rememberCurrentActivities() 30 29 * ``` 31 30 * 32 31 * Initially, `currents` will be an empty array. Once the actual current activities are received 33 32 * from the phone, `currents` will *automatically* update to that array and the encapsulating 34 33 * Composable will *automatically* re-render. 35 - * 34 + * 36 35 * `setCurrents` is a function you can call to set the array of current activities on the phone. 37 36 * 38 37 * `refresh` is a function you can call to forcibly re-request the array of current activities 39 38 * from the phone. 40 39 */ 41 40 @Composable 42 - fun rememberCurrentActivities( 43 - rpc: WearRPCClient, 44 - ): Triple< 41 + fun rememberCurrentActivities(): Triple< 45 42 Array<CurrentActivity>, 46 43 (Array<CurrentActivity>) -> Unit, 47 44 () -> Unit, 48 45 > { 46 + var rpc = rememberRPCClient() 49 47 var currentActivities: Array<CurrentActivity> by remember { mutableStateOf(arrayOf()) } 50 48 var currentActivitiesQueryCount by remember { mutableIntStateOf(0) } 51 49 val queryCurrentActivities = { currentActivitiesQueryCount++ }
+12
wear/src/main/java/com/example/util/simpletimetracker/presentation/remember/rpcClient.kt
··· 1 + package com.example.util.simpletimetracker.presentation.remember 2 + 3 + import androidx.compose.runtime.Composable 4 + import androidx.compose.ui.platform.LocalContext 5 + import com.example.util.simpletimetracker.wearrpc.ContextMessenger 6 + import com.example.util.simpletimetracker.wearrpc.WearRPCClient 7 + 8 + @Composable 9 + fun rememberRPCClient(): WearRPCClient { 10 + val context = LocalContext.current 11 + return WearRPCClient(ContextMessenger(context)) 12 + }
+3 -3
wear/src/main/java/com/example/util/simpletimetracker/presentation/remember/tags.kt
··· 24 24 * Usage: 25 25 * ``` 26 26 * val activityId: Long = /* obtain the ID (e.g. as a parameter) */ 27 - * val rpc = /* create a WearRPCClient instance */ 28 - * val (tags, refresh) = rememberTags(rpc, activityId) 27 + * val (tags, refresh) = rememberTags(activityId) 29 28 * ``` 30 29 * 31 30 * Initially, `tags` will be an empty array. Once the actual tags are received ··· 36 35 * from the phone. 37 36 */ 38 37 @Composable 39 - fun rememberTags(rpc: WearRPCClient, activityId: Long): Pair<Array<Tag>, () -> Unit> { 38 + fun rememberTags(activityId: Long): Pair<Array<Tag>, () -> Unit> { 39 + var rpc = rememberRPCClient() 40 40 var tags: Array<Tag> by remember { mutableStateOf(arrayOf()) } 41 41 var tagsQueryCount by remember { mutableIntStateOf(0) } 42 42 LaunchedEffect(tagsQueryCount) {
+3 -8
wear/src/main/java/com/example/util/simpletimetracker/presentation/screens/ActivitiesScreen.kt
··· 6 6 package com.example.util.simpletimetracker.presentation.screens 7 7 8 8 import androidx.compose.runtime.Composable 9 - import androidx.compose.ui.platform.LocalContext 10 9 import com.example.util.simpletimetracker.presentation.components.ActivitiesList 11 10 import com.example.util.simpletimetracker.presentation.remember.rememberActivities 12 11 import com.example.util.simpletimetracker.presentation.remember.rememberCurrentActivities 13 12 import com.example.util.simpletimetracker.wearrpc.Activity 14 - import com.example.util.simpletimetracker.wearrpc.ContextMessenger 15 - import com.example.util.simpletimetracker.wearrpc.WearRPCClient 13 + 16 14 17 15 @Composable 18 16 fun ActivitiesScreen(onSelectActivity: (activityId: Long) -> Unit) { 19 - val rpc = WearRPCClient(ContextMessenger(LocalContext.current)) 20 - val (activities, refreshActivities) = rememberActivities(rpc) 21 - val (currentActivities, setCurrentActivities, refreshCurrentActivities) = rememberCurrentActivities( 22 - rpc, 23 - ) 17 + val (activities, refreshActivities) = rememberActivities() 18 + val (currentActivities, setCurrentActivities, refreshCurrentActivities) = rememberCurrentActivities() 24 19 25 20 ActivitiesList( 26 21 activities,
+2 -6
wear/src/main/java/com/example/util/simpletimetracker/presentation/screens/TagsScreen.kt
··· 6 6 package com.example.util.simpletimetracker.presentation.screens 7 7 8 8 import androidx.compose.runtime.Composable 9 - import androidx.compose.ui.platform.LocalContext 10 9 import com.example.util.simpletimetracker.presentation.components.TagList 11 10 import com.example.util.simpletimetracker.presentation.remember.rememberCurrentActivities 12 11 import com.example.util.simpletimetracker.presentation.remember.rememberTags 13 - import com.example.util.simpletimetracker.wearrpc.ContextMessenger 14 12 import com.example.util.simpletimetracker.wearrpc.CurrentActivity 15 - import com.example.util.simpletimetracker.wearrpc.WearRPCClient 16 13 import java.time.Instant 17 14 18 15 @Composable 19 16 fun TagsScreen(activityId: Long, onSelectTag: () -> Unit) { 20 - val rpc = WearRPCClient(ContextMessenger(LocalContext.current)) 21 - val (tags) = rememberTags(rpc, activityId) 22 - val (_, setCurrents) = rememberCurrentActivities(rpc) 17 + val (tags) = rememberTags(activityId) 18 + val (_, setCurrents) = rememberCurrentActivities() 23 19 24 20 TagList( 25 21 tags,