Update logic for creating tasks on WearOS

pull/2983/head
Alex Baker 1 year ago
parent e5fc31f307
commit d4aeb34b87

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

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

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

@ -40,7 +40,25 @@ fun TaskEditScreen(
toggleCompleted: () -> Unit,
save: () -> Unit,
) {
if (uiState.loading) {
val keyboardInputRequest: ManagedActivityResultLauncher<Intent, ActivityResult> = 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<Intent, ActivityResult> = 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()
}
}
}
}

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

Loading…
Cancel
Save