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 { override suspend fun saveTask(request: GrpcProto.SaveTaskRequest): SaveTaskResponse {
Timber.d("saveTask($request)") Timber.d("saveTask($request)")
if (request.taskId == 0L) { if (request.taskId == 0L) {
taskCreator val filter = defaultFilterProvider.getFilterFromPreference(
.basicQuickAddTask(request.title) settings.data.firstOrNull()?.filter?.takeIf { it.isNotBlank() }
.apply { )
if (request.completed) { val task = taskCreator.basicQuickAddTask(
completionDate = System.currentTimeMillis() title = request.title,
} filter = filter,
} )
.let { taskDao.save(it) } return SaveTaskResponse.newBuilder().setTaskId(task.id).build()
} else { } else {
taskDao.fetch(request.taskId)?.let { task -> taskDao.fetch(request.taskId)?.let { task ->
taskDao.save( 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 { private fun getColor(filter: Filter): Int {

@ -55,9 +55,8 @@ class TaskCreator @Inject constructor(
private val locationDao: LocationDao, private val locationDao: LocationDao,
private val alarmDao: AlarmDao, private val alarmDao: AlarmDao,
) { ) {
suspend fun basicQuickAddTask(title: String, filter: Filter? = null): Task {
suspend fun basicQuickAddTask(title: String): Task { val task = createWithValues(filter, title.trim { it <= ' ' })
val task = createWithValues(title.trim { it <= ' ' })
taskDao.createNew(task) taskDao.createNew(task)
val gcalCreateEventEnabled = preferences.isDefaultCalendarSet && task.hasDueDate() // $NON-NLS-1$ val gcalCreateEventEnabled = preferences.isDefaultCalendarSet && task.hasDueDate() // $NON-NLS-1$
if (!isNullOrEmpty(task.title) if (!isNullOrEmpty(task.title)

@ -92,7 +92,9 @@ message SaveTaskRequest {
string title = 2; string title = 2;
bool completed = 3; bool completed = 3;
} }
message SaveTaskResponse {} message SaveTaskResponse {
uint64 taskId = 1;
}
service WearService { service WearService {
rpc getTasks(GetTasksRequest) returns (Tasks); rpc getTasks(GetTasksRequest) returns (Tasks);

@ -40,17 +40,6 @@ fun TaskEditScreen(
toggleCompleted: () -> Unit, toggleCompleted: () -> Unit,
save: () -> Unit, save: () -> Unit,
) { ) {
if (uiState.loading) {
Box(
modifier = Modifier.fillMaxRectangle(),
contentAlignment = Alignment.Center,
) {
CircularProgressIndicator()
}
} else {
val columnState = rememberResponsiveColumnState(
verticalArrangement = Arrangement.spacedBy(12.dp)
)
val keyboardInputRequest: ManagedActivityResultLauncher<Intent, ActivityResult> = rememberLauncherForActivityResult( val keyboardInputRequest: ManagedActivityResultLauncher<Intent, ActivityResult> = rememberLauncherForActivityResult(
contract = ActivityResultContracts.StartActivityForResult() contract = ActivityResultContracts.StartActivityForResult()
) { result: ActivityResult -> ) { result: ActivityResult ->
@ -64,6 +53,22 @@ fun TaskEditScreen(
setTitle(text.toString()) setTitle(text.toString())
} }
} }
LaunchedEffect(uiState.taskId) {
if (uiState.taskId == 0L) {
keyboardInputRequest.openKeyboard()
}
}
if (uiState.taskId == 0L) {
Box(
modifier = Modifier.fillMaxRectangle(),
contentAlignment = Alignment.Center,
) {
CircularProgressIndicator()
}
} else {
val columnState = rememberResponsiveColumnState(
verticalArrangement = Arrangement.spacedBy(12.dp)
)
ScreenScaffold( ScreenScaffold(
scrollState = columnState, 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 import timber.log.Timber
data class UiState( data class UiState(
val isNew: Boolean, val taskId: Long = 0,
val loading: Boolean = !isNew,
val completed: Boolean = false, val completed: Boolean = false,
val repeating: Boolean = false, val repeating: Boolean = false,
val priority: Int = 0, val priority: Int = 0,
@ -30,7 +29,7 @@ class TaskEditViewModel(
applicationContext: Context, applicationContext: Context,
private val taskId: Long, private val taskId: Long,
) : ViewModel() { ) : ViewModel() {
private val _uiState = MutableStateFlow(UiState(isNew = taskId == 0L)) private val _uiState = MutableStateFlow(UiState())
val uiState = _uiState.asStateFlow() val uiState = _uiState.asStateFlow()
private val registry = applicationContext.wearDataLayerRegistry(viewModelScope) private val registry = applicationContext.wearDataLayerRegistry(viewModelScope)
@ -44,12 +43,18 @@ class TaskEditViewModel(
init { init {
if (taskId > 0) { if (taskId > 0) {
viewModelScope.launch { viewModelScope.launch {
fetchTask(taskId)
}
}
}
private fun fetchTask(taskId: Long) = viewModelScope.launch {
val task = wearService val task = wearService
.getTask(GrpcProto.GetTaskRequest.newBuilder().setTaskId(taskId).build()) .getTask(GrpcProto.GetTaskRequest.newBuilder().setTaskId(taskId).build())
Timber.d("Received $task") Timber.d("Received $task")
_uiState.update { _uiState.update {
it.copy( it.copy(
loading = false, taskId = taskId,
completed = task.completed, completed = task.completed,
title = task.title, title = task.title,
repeating = task.repeating, repeating = task.repeating,
@ -57,7 +62,14 @@ class TaskEditViewModel(
) )
} }
} }
}
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 { fun save(onComplete: () -> Unit) = viewModelScope.launch {
@ -74,6 +86,9 @@ class TaskEditViewModel(
fun setTitle(title: String) { fun setTitle(title: String) {
_uiState.update { it.copy(title = title) } _uiState.update { it.copy(title = title) }
if (uiState.value.taskId == 0L) {
createTask()
}
} }
fun setCompleted(completed: Boolean) { fun setCompleted(completed: Boolean) {

Loading…
Cancel
Save