diff --git a/.run/wear.run.xml b/.run/wear.run.xml
new file mode 100644
index 000000000..042e69bd7
--- /dev/null
+++ b/.run/wear.run.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/googleplay/java/org/tasks/wear/WearPreferences.kt b/app/src/googleplay/java/org/tasks/wear/WearPreferences.kt
index e8a31e98f..f30477560 100644
--- a/app/src/googleplay/java/org/tasks/wear/WearPreferences.kt
+++ b/app/src/googleplay/java/org/tasks/wear/WearPreferences.kt
@@ -10,4 +10,7 @@ class WearPreferences(
): QueryPreferences by preferences {
override val showHidden: Boolean
get() = settings.showHidden
+
+ override val showCompleted: Boolean
+ get() = settings.showCompleted
}
\ No newline at end of file
diff --git a/kmp/src/commonMain/composeResources/values/strings.xml b/kmp/src/commonMain/composeResources/values/strings.xml
index 88eff118d..ea22763c5 100644
--- a/kmp/src/commonMain/composeResources/values/strings.xml
+++ b/kmp/src/commonMain/composeResources/values/strings.xml
@@ -29,4 +29,6 @@
Today
today
Add task
+ Show unstarted
+ Show completed
\ No newline at end of file
diff --git a/wear-datalayer/src/main/proto/grpc.proto b/wear-datalayer/src/main/proto/grpc.proto
index 77e067dff..0dfcddd3d 100644
--- a/wear-datalayer/src/main/proto/grpc.proto
+++ b/wear-datalayer/src/main/proto/grpc.proto
@@ -36,6 +36,7 @@ message Settings {
repeated uint64 collapsed = 1;
string filter = 2;
bool showHidden = 3;
+ bool showCompleted = 4;
}
message UpdateSettingsRequest {
diff --git a/wear/src/main/java/org/tasks/presentation/MainActivity.kt b/wear/src/main/java/org/tasks/presentation/MainActivity.kt
index ccb725fa4..804384611 100644
--- a/wear/src/main/java/org/tasks/presentation/MainActivity.kt
+++ b/wear/src/main/java/org/tasks/presentation/MainActivity.kt
@@ -98,7 +98,9 @@ class MainActivity : ComponentActivity() {
if (viewState.initialized) {
SettingsScreen(
showHidden = viewState.settings.showHidden,
+ showCompleted = viewState.settings.showCompleted,
toggleShowHidden = { settingsViewModel.setShowHidden(it) },
+ toggleShowCompleted = { settingsViewModel.setShowCompleted(it) },
)
} else {
// TODO: show spinner
diff --git a/wear/src/main/java/org/tasks/presentation/screens/SettingsScreen.kt b/wear/src/main/java/org/tasks/presentation/screens/SettingsScreen.kt
index 8a1c006d6..ee451b3dc 100644
--- a/wear/src/main/java/org/tasks/presentation/screens/SettingsScreen.kt
+++ b/wear/src/main/java/org/tasks/presentation/screens/SettingsScreen.kt
@@ -9,13 +9,18 @@ import com.google.android.horologist.compose.layout.ScreenScaffold
import com.google.android.horologist.compose.layout.rememberResponsiveColumnState
import com.google.android.horologist.compose.material.ToggleChip
import com.google.android.horologist.compose.material.ToggleChipToggleControl
+import org.jetbrains.compose.resources.stringResource
+import tasks.kmp.generated.resources.Res
+import tasks.kmp.generated.resources.show_completed
+import tasks.kmp.generated.resources.show_unstarted
@OptIn(ExperimentalHorologistApi::class)
@Composable
fun SettingsScreen(
-
showHidden: Boolean,
+ showCompleted: Boolean,
toggleShowHidden: (Boolean) -> Unit,
+ toggleShowCompleted: (Boolean) -> Unit,
) {
val columnState = rememberResponsiveColumnState()
ScreenScaffold(
@@ -29,7 +34,15 @@ fun SettingsScreen(
ToggleChip(
checked = showHidden,
onCheckedChanged = { toggleShowHidden(it) },
- label = "Show unstarted",
+ label = stringResource(Res.string.show_unstarted),
+ toggleControl = ToggleChipToggleControl.Switch,
+ )
+ }
+ item {
+ ToggleChip(
+ checked = showCompleted,
+ onCheckedChanged = { toggleShowCompleted(it) },
+ label = stringResource(Res.string.show_completed),
toggleControl = ToggleChipToggleControl.Switch,
)
}
diff --git a/wear/src/main/java/org/tasks/presentation/screens/SettingsViewModel.kt b/wear/src/main/java/org/tasks/presentation/screens/SettingsViewModel.kt
index eb3e5177c..7889368ab 100644
--- a/wear/src/main/java/org/tasks/presentation/screens/SettingsViewModel.kt
+++ b/wear/src/main/java/org/tasks/presentation/screens/SettingsViewModel.kt
@@ -1,11 +1,9 @@
package org.tasks.presentation.screens
import android.app.Application
-import androidx.datastore.core.DataStore
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.viewModelScope
import com.google.android.horologist.annotations.ExperimentalHorologistApi
-import com.google.android.horologist.data.ProtoDataStoreHelper.protoDataStore
import com.google.android.horologist.data.ProtoDataStoreHelper.protoFlow
import com.google.android.horologist.data.TargetNodeId
import com.google.android.horologist.datalayer.grpc.GrpcExtensions.grpcClient
@@ -17,6 +15,7 @@ import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import org.tasks.GrpcProto
import org.tasks.GrpcProto.Settings
+import org.tasks.SettingsKt
import org.tasks.WearServiceGrpcKt
import org.tasks.copy
import org.tasks.extensions.wearDataLayerRegistry
@@ -37,9 +36,6 @@ class SettingsViewModel(
) {
WearServiceGrpcKt.WearServiceCoroutineStub(it)
}
- private val settingsFlow: DataStore by lazy {
- registry.protoDataStore(viewModelScope)
- }
private val _viewState = MutableStateFlow(ViewState())
val viewState = _viewState.asStateFlow()
@@ -57,12 +53,24 @@ class SettingsViewModel(
.launchIn(viewModelScope)
}
- fun setShowHidden(showHidden: Boolean) = viewModelScope.launch {
+ fun setShowHidden(showHidden: Boolean) {
+ updateSettings {
+ this.showHidden = showHidden
+ }
+ }
+
+ fun setShowCompleted(showCompleted: Boolean) {
+ updateSettings {
+ this.showCompleted = showCompleted
+ }
+ }
+
+ private fun updateSettings(block: SettingsKt.Dsl.() -> Unit) = viewModelScope.launch {
wearService.updateSettings(
GrpcProto.UpdateSettingsRequest.newBuilder()
.setSettings(
_viewState.value.settings.copy {
- this.showHidden = showHidden
+ block()
}
)
.build()