diff --git a/app/src/googleplay/java/org/tasks/wear/WearService.kt b/app/src/googleplay/java/org/tasks/wear/WearService.kt index 4b5f6bd81..3f90fa1b0 100644 --- a/app/src/googleplay/java/org/tasks/wear/WearService.kt +++ b/app/src/googleplay/java/org/tasks/wear/WearService.kt @@ -200,14 +200,14 @@ class WearService( override suspend fun saveTask(request: GrpcProto.SaveTaskRequest): SaveTaskResponse { Timber.d("saveTask($request)") if (request.taskId == 0L) { - taskCreator - .basicQuickAddTask(request.title) - .apply { - if (request.completed) { - completionDate = System.currentTimeMillis() - } - } - .let { taskDao.save(it) } + val filter = defaultFilterProvider.getFilterFromPreference( + settings.data.firstOrNull()?.filter?.takeIf { it.isNotBlank() } + ) + val task = taskCreator.basicQuickAddTask( + title = request.title, + filter = filter, + ) + return SaveTaskResponse.newBuilder().setTaskId(task.id).build() } else { taskDao.fetch(request.taskId)?.let { task -> taskDao.save( @@ -221,8 +221,8 @@ class WearService( ) ) } + return SaveTaskResponse.newBuilder().setTaskId(request.taskId).build() } - return SaveTaskResponse.newBuilder().build() } private fun getColor(filter: Filter): Int { diff --git a/app/src/main/java/com/todoroo/astrid/service/TaskCreator.kt b/app/src/main/java/com/todoroo/astrid/service/TaskCreator.kt index 70dd8c6c6..4fd409802 100644 --- a/app/src/main/java/com/todoroo/astrid/service/TaskCreator.kt +++ b/app/src/main/java/com/todoroo/astrid/service/TaskCreator.kt @@ -55,9 +55,8 @@ class TaskCreator @Inject constructor( private val locationDao: LocationDao, private val alarmDao: AlarmDao, ) { - - suspend fun basicQuickAddTask(title: String): Task { - val task = createWithValues(title.trim { it <= ' ' }) + suspend fun basicQuickAddTask(title: String, filter: Filter? = null): Task { + val task = createWithValues(filter, title.trim { it <= ' ' }) taskDao.createNew(task) val gcalCreateEventEnabled = preferences.isDefaultCalendarSet && task.hasDueDate() // $NON-NLS-1$ if (!isNullOrEmpty(task.title) diff --git a/wear-datalayer/src/main/proto/grpc.proto b/wear-datalayer/src/main/proto/grpc.proto index c72146ae7..fa86dbfd4 100644 --- a/wear-datalayer/src/main/proto/grpc.proto +++ b/wear-datalayer/src/main/proto/grpc.proto @@ -92,7 +92,9 @@ message SaveTaskRequest { string title = 2; bool completed = 3; } -message SaveTaskResponse {} +message SaveTaskResponse { + uint64 taskId = 1; +} service WearService { rpc getTasks(GetTasksRequest) returns (Tasks); diff --git a/wear/src/main/java/org/tasks/presentation/screens/TaskEditScreen.kt b/wear/src/main/java/org/tasks/presentation/screens/TaskEditScreen.kt index e2b65ca81..e2897bbe8 100644 --- a/wear/src/main/java/org/tasks/presentation/screens/TaskEditScreen.kt +++ b/wear/src/main/java/org/tasks/presentation/screens/TaskEditScreen.kt @@ -40,7 +40,25 @@ fun TaskEditScreen( toggleCompleted: () -> Unit, save: () -> Unit, ) { - if (uiState.loading) { + val keyboardInputRequest: ManagedActivityResultLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.StartActivityForResult() + ) { result: ActivityResult -> + if (result.resultCode == RESULT_OK) { + val text = + result + .data + ?.let { RemoteInput.getResultsFromIntent(it) } + ?.getCharSequence("input") + ?: return@rememberLauncherForActivityResult + setTitle(text.toString()) + } + } + LaunchedEffect(uiState.taskId) { + if (uiState.taskId == 0L) { + keyboardInputRequest.openKeyboard() + } + } + if (uiState.taskId == 0L) { Box( modifier = Modifier.fillMaxRectangle(), contentAlignment = Alignment.Center, @@ -51,19 +69,6 @@ fun TaskEditScreen( val columnState = rememberResponsiveColumnState( verticalArrangement = Arrangement.spacedBy(12.dp) ) - val keyboardInputRequest: ManagedActivityResultLauncher = rememberLauncherForActivityResult( - contract = ActivityResultContracts.StartActivityForResult() - ) { result: ActivityResult -> - if (result.resultCode == RESULT_OK) { - val text = - result - .data - ?.let { RemoteInput.getResultsFromIntent(it) } - ?.getCharSequence("input") - ?: return@rememberLauncherForActivityResult - setTitle(text.toString()) - } - } ScreenScaffold( scrollState = columnState, ) { @@ -104,11 +109,6 @@ fun TaskEditScreen( } } } - LaunchedEffect(Unit) { - if (uiState.isNew) { - keyboardInputRequest.openKeyboard() - } - } } } diff --git a/wear/src/main/java/org/tasks/presentation/screens/TaskEditViewModel.kt b/wear/src/main/java/org/tasks/presentation/screens/TaskEditViewModel.kt index 38fd169dd..1872bfc81 100644 --- a/wear/src/main/java/org/tasks/presentation/screens/TaskEditViewModel.kt +++ b/wear/src/main/java/org/tasks/presentation/screens/TaskEditViewModel.kt @@ -17,8 +17,7 @@ import org.tasks.extensions.wearDataLayerRegistry import timber.log.Timber data class UiState( - val isNew: Boolean, - val loading: Boolean = !isNew, + val taskId: Long = 0, val completed: Boolean = false, val repeating: Boolean = false, val priority: Int = 0, @@ -30,7 +29,7 @@ class TaskEditViewModel( applicationContext: Context, private val taskId: Long, ) : ViewModel() { - private val _uiState = MutableStateFlow(UiState(isNew = taskId == 0L)) + private val _uiState = MutableStateFlow(UiState()) val uiState = _uiState.asStateFlow() private val registry = applicationContext.wearDataLayerRegistry(viewModelScope) @@ -44,22 +43,35 @@ class TaskEditViewModel( init { if (taskId > 0) { viewModelScope.launch { - val task = wearService - .getTask(GrpcProto.GetTaskRequest.newBuilder().setTaskId(taskId).build()) - Timber.d("Received $task") - _uiState.update { - it.copy( - loading = false, - completed = task.completed, - title = task.title, - repeating = task.repeating, - priority = task.priority, - ) - } + fetchTask(taskId) } } } + private fun fetchTask(taskId: Long) = viewModelScope.launch { + val task = wearService + .getTask(GrpcProto.GetTaskRequest.newBuilder().setTaskId(taskId).build()) + Timber.d("Received $task") + _uiState.update { + it.copy( + taskId = taskId, + completed = task.completed, + title = task.title, + repeating = task.repeating, + priority = task.priority, + ) + } + } + + fun createTask() = viewModelScope.launch { + val response = wearService.saveTask( + GrpcProto.SaveTaskRequest.newBuilder() + .setTitle(uiState.value.title) + .build() + ) + fetchTask(response.taskId) + } + fun save(onComplete: () -> Unit) = viewModelScope.launch { val state = uiState.value wearService.saveTask( @@ -74,6 +86,9 @@ class TaskEditViewModel( fun setTitle(title: String) { _uiState.update { it.copy(title = title) } + if (uiState.value.taskId == 0L) { + createTask() + } } fun setCompleted(completed: Boolean) {