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.

refactor(wear): Change `color` type to Long

Removes the need for transformations to and from the string
hex code, improving performance and reducing the chances of
a bug impacting color interpretation.

closes thehale/SimpleTimeTracker-WearOS#24

Joseph Hale (Feb 26, 2024, 10:27 PM -0700) 2ff34e48 4c19b304

+19 -21
+6 -2
app/src/main/java/com/example/util/simpletimetracker/wear/DomainAPI.kt
··· 32 32 return recordTypeInteractor.getAll().filter { recordType -> !recordType.hidden } 33 33 .map { recordType -> 34 34 val color = appColorMapper.mapToColorInt(recordType.color) 35 - val hex = String.format("#%06X", (0xFFFFFF and color)) 36 - Activity(recordType.id, recordType.name, recordType.icon, hex) 35 + Activity( 36 + id = recordType.id, 37 + name = recordType.name, 38 + icon = recordType.icon, 39 + color = color.toLong(), 40 + ) 37 41 }.toTypedArray() 38 42 } 39 43
+2 -2
wear/src/main/java/com/example/util/simpletimetracker/presentation/components/ActivitiesList.kt
··· 43 43 @Composable 44 44 private fun Preview() { 45 45 val activities = arrayOf( 46 - Activity(1234, "Chores", "๐Ÿงน", "#FA0000"), 47 - Activity(4321, "Sleep", "๐Ÿ›๏ธ", "#0000FA"), 46 + Activity(1234, "Chores", "๐Ÿงน", 0xFFFA0000), 47 + Activity(4321, "Sleep", "๐Ÿ›๏ธ", 0xFF0000FA), 48 48 ) 49 49 val currents = arrayOf( 50 50 CurrentActivity(id = 4321, startedAt = 1708241427000L, tags = arrayOf()),
+6 -8
wear/src/main/java/com/example/util/simpletimetracker/presentation/components/ActivityChip.kt
··· 21 21 import androidx.wear.compose.material.Text 22 22 import androidx.wear.compose.material.ToggleChipDefaults 23 23 import androidx.wear.tooling.preview.devices.WearDevices 24 - import com.example.util.simpletimetracker.presentation.theme.hexCodeToColor 25 24 import com.example.util.simpletimetracker.wearrpc.Activity 26 25 import com.example.util.simpletimetracker.wearrpc.Tag 27 26 import java.time.Instant ··· 53 52 } else { 54 53 "" 55 54 } 56 - val color = hexCodeToColor(activity.color) 57 55 var switchChecked = startedAt != null 58 56 SplitToggleChip( 59 57 modifier = Modifier ··· 74 72 } 75 73 }, 76 74 colors = ToggleChipDefaults.splitToggleChipColors( 77 - backgroundColor = color, 75 + backgroundColor = Color(activity.color), 78 76 splitBackgroundOverlayColor = if (switchChecked) { 79 77 Color.White.copy(alpha = .1F) 80 78 } else { ··· 125 123 @Preview(device = WearDevices.LARGE_ROUND) 126 124 @Composable 127 125 fun SampleCooking() { 128 - ActivityChip(Activity(123, "Cooking", "๐ŸŽ‰", "#123456")) 126 + ActivityChip(Activity(123, "Cooking", "๐ŸŽ‰", 0xFF123456)) 129 127 } 130 128 131 129 @Preview(device = WearDevices.LARGE_ROUND) 132 130 @Composable 133 131 fun SampleSleep() { 134 - ActivityChip(Activity(456, "Sleeping", "๐Ÿ›๏ธ", "#ABCDEF")) 132 + ActivityChip(Activity(456, "Sleeping", "๐Ÿ›๏ธ", 0xFFABCDEF)) 135 133 } 136 134 137 135 @Preview(device = WearDevices.LARGE_ROUND) ··· 140 138 // TODO handle the look of light colored chips 141 139 // Note: A white color is only possible when using the RGB color picker. 142 140 // The default color options in the phone app are mostly darker shades. 143 - ActivityChip(Activity(456, "Sleeping", "๐Ÿ›๏ธ", "#FFFFFF")) 141 + ActivityChip(Activity(456, "Sleeping", "๐Ÿ›๏ธ", 0xFFFFFFFF)) 144 142 } 145 143 146 144 @Preview(device = WearDevices.LARGE_ROUND) 147 145 @Composable 148 146 fun CurrentlyRunning() { 149 - ActivityChip(Activity(456, "Sleeping", "๐Ÿ›๏ธ", "#ABCDEF"), startedAt = 1706751601000L) 147 + ActivityChip(Activity(456, "Sleeping", "๐Ÿ›๏ธ", 0xFFABCDEF), startedAt = 1706751601000L) 150 148 } 151 149 152 150 @Preview(device = WearDevices.LARGE_ROUND) 153 151 @Composable 154 152 fun CurrentlyRunningWithTags() { 155 153 ActivityChip( 156 - Activity(456, "Sleeping", "๐Ÿ›๏ธ", "#ABCDEF"), startedAt = 1706751601000L, 154 + Activity(456, "Sleeping", "๐Ÿ›๏ธ", 0xFFABCDEF), startedAt = 1706751601000L, 157 155 tags = arrayOf( 158 156 Tag(id = 2, name = "Work", isGeneral = false), 159 157 Tag(id = 4, name = "Hotel", isGeneral = false),
-4
wear/src/main/java/com/example/util/simpletimetracker/presentation/theme/Color.kt
··· 24 24 onSecondary = Color.Black, 25 25 onError = Color.Black, 26 26 ) 27 - 28 - fun hexCodeToColor(hex: String): Color { 29 - return Color(android.graphics.Color.parseColor(hex)) 30 - }
+1 -1
wearrpc/src/main/java/com/example/util/simpletimetracker/wearrpc/DTO.kt
··· 11 11 * Object definitions for records sent between Wear/Mobile 12 12 */ 13 13 14 - data class Activity(val id: Long, val name: String, val icon: String, val color: String) 14 + data class Activity(val id: Long, val name: String, val icon: String, val color: Long) 15 15 16 16 data class CurrentActivity(val id: Long, val startedAt: Long, val tags: Array<Tag>) { 17 17 override fun equals(other: Any?): Boolean {
+1 -1
wearrpc/src/test/java/com/example/util/simpletimetracker/wearrpc/StartActivityMediatorTest.kt
··· 22 22 onRequestTagSelection = requestTagCallback, 23 23 ) 24 24 25 - protected val sampleActivity = Activity(id = 1, name = "Sleep", icon = "๐Ÿ›๏ธ", color = "#123456") 25 + protected val sampleActivity = Activity(id = 1, name = "Sleep", icon = "๐Ÿ›๏ธ", color = 0xFF123456) 26 26 protected val sampleGeneralTag = Tag(id = 13, name = "Sleep", isGeneral = true) 27 27 protected val sampleNonGeneralTag = Tag(id = 14, name = "Work", isGeneral = false) 28 28 protected val settings = Settings(
+3 -3
wearrpc/src/test/java/com/example/util/simpletimetracker/wearrpc/WearRPCTest.kt
··· 68 68 69 69 @Test 70 70 fun returns_one_activity_when_one_exists() = runTest { 71 - val activities = arrayOf(Activity(42, "Chores", "๐ŸŽ‰", "#00FF00")) 71 + val activities = arrayOf(Activity(42, "Chores", "๐ŸŽ‰", 0xFF00FF00)) 72 72 api.mock_queryActivities(activities) 73 73 val response = client.queryActivities() 74 74 assertArrayEquals(activities, response) ··· 77 77 @Test 78 78 fun returns_all_existing_activities() = runTest { 79 79 val activities = arrayOf( 80 - Activity(13, "Singing", "๐ŸŽถ", "#123456"), 81 - Activity(24, "Homework", "๐Ÿ“", "#ABCDEF"), 80 + Activity(13, "Singing", "๐ŸŽถ", 0xFF123456), 81 + Activity(24, "Homework", "๐Ÿ“", 0xFFABCDEF), 82 82 ) 83 83 api.mock_queryActivities(activities) 84 84 val response = client.queryActivities()