Toggle completed from Android Wear

pull/3074/head
Alex Baker 1 year ago
parent 1200a7625a
commit 54afbfeecc

@ -0,0 +1,70 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="wear" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false" singleton="true">
<module name="tasks.Tasks.wear.main" />
<option name="DEPLOY" value="true" />
<option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
<option name="DEPLOY_AS_INSTANT" value="false" />
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="CLEAR_APP_STORAGE" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="RESTORE_ENABLED" value="false" />
<option name="RESTORE_FILE" value="" />
<option name="CLEAR_LOGCAT" value="true" />
<option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" />
<option name="TARGET_SELECTION_MODE" value="DEVICE_AND_SNAPSHOT_COMBO_BOX" />
<option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
<option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
<option name="DEBUGGER_TYPE" value="Auto" />
<Auto>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Auto>
<Hybrid>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Hybrid>
<Java>
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Java>
<Native>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Native>
<Profilers>
<option name="ADVANCED_PROFILING_ENABLED" value="false" />
<option name="STARTUP_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Java/Kotlin Method Sample (legacy)" />
<option name="STARTUP_NATIVE_MEMORY_PROFILING_ENABLED" value="false" />
<option name="NATIVE_MEMORY_SAMPLE_RATE_BYTES" value="2048" />
</Profilers>
<option name="DEEP_LINK" value="" />
<option name="ACTIVITY_CLASS" value="" />
<option name="SEARCH_ACTIVITY_IN_GLOBAL_SCOPE" value="false" />
<option name="SKIP_ACTIVITY_VALIDATION" value="false" />
<method v="2">
<option name="Android.Gradle.BeforeRunTask" enabled="true" />
</method>
</configuration>
</component>

@ -10,4 +10,7 @@ class WearPreferences(
): QueryPreferences by preferences {
override val showHidden: Boolean
get() = settings.showHidden
override val showCompleted: Boolean
get() = settings.showCompleted
}

@ -29,4 +29,6 @@
<string name="today">Today</string>
<string name="today_lowercase">today</string>
<string name="add_task">Add task</string>
<string name="show_unstarted">Show unstarted</string>
<string name="show_completed">Show completed</string>
</resources>

@ -36,6 +36,7 @@ message Settings {
repeated uint64 collapsed = 1;
string filter = 2;
bool showHidden = 3;
bool showCompleted = 4;
}
message UpdateSettingsRequest {

@ -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

@ -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,
)
}

@ -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<Settings> 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()

Loading…
Cancel
Save