Update WearOS edit screen

* Set complete from edit screen
* Edit existing tasks
pull/2983/head
Alex Baker 1 year ago
parent f0e9eb453c
commit 96392cb618

@ -203,6 +203,9 @@ class WearService(
taskCreator
.basicQuickAddTask(request.title)
.apply {
if (request.completed) {
completionDate = System.currentTimeMillis()
}
}
.let { taskDao.save(it) }
} else {
@ -210,6 +213,11 @@ class WearService(
taskDao.save(
task.copy(
title = request.title,
completionDate = when {
!request.completed -> 0
task.isCompleted -> task.completionDate
else -> System.currentTimeMillis()
},
)
)
}

@ -90,6 +90,7 @@ message GetTaskResponse {
message SaveTaskRequest {
uint64 taskId = 1;
string title = 2;
bool completed = 3;
}
message SaveTaskResponse {}

@ -191,6 +191,7 @@ class MainActivity : ComponentActivity() {
TaskEditScreen(
uiState = uiState,
setTitle = { viewModel.setTitle(it) },
toggleCompleted = { viewModel.setCompleted(!uiState.completed) },
save = { viewModel.save { navController.popBackStack() } },
)
}

@ -4,6 +4,7 @@ import android.app.Activity.RESULT_OK
import android.app.RemoteInput
import android.content.Intent
import android.view.inputmethod.EditorInfo
import androidx.activity.compose.ManagedActivityResultLauncher
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.ActivityResult
import androidx.activity.result.contract.ActivityResultContracts
@ -36,6 +37,7 @@ import org.tasks.presentation.components.Checkbox
fun TaskEditScreen(
uiState: UiState,
setTitle: (String) -> Unit,
toggleCompleted: () -> Unit,
save: () -> Unit,
) {
if (uiState.loading) {
@ -49,7 +51,7 @@ fun TaskEditScreen(
val columnState = rememberResponsiveColumnState(
verticalArrangement = Arrangement.spacedBy(12.dp)
)
val keyboardInputRequest = rememberLauncherForActivityResult(
val keyboardInputRequest: ManagedActivityResultLauncher<Intent, ActivityResult> = rememberLauncherForActivityResult(
contract = ActivityResultContracts.StartActivityForResult()
) { result: ActivityResult ->
if (result.resultCode == RESULT_OK) {
@ -79,7 +81,7 @@ fun TaskEditScreen(
completed = uiState.completed,
repeating = uiState.repeating,
priority = uiState.priority,
toggleComplete = {},
toggleComplete = toggleCompleted,
)
},
content = {
@ -88,7 +90,7 @@ fun TaskEditScreen(
modifier = Modifier.padding(vertical = 4.dp),
)
},
onClick = {},
onClick = { keyboardInputRequest.openKeyboard() },
)
}
item {
@ -104,20 +106,24 @@ fun TaskEditScreen(
}
LaunchedEffect(Unit) {
if (uiState.isNew) {
val intent: Intent = RemoteInputIntentHelper.createActionRemoteInputIntent()
val remoteInputs: List<RemoteInput> = listOf(
RemoteInput
.Builder("input")
.setLabel("Enter title")
.setAllowFreeFormInput(true)
.wearableExtender {
setInputActionType(EditorInfo.IME_ACTION_DONE)
}
.build()
)
RemoteInputIntentHelper.putRemoteInputsExtra(intent, remoteInputs)
keyboardInputRequest.launch(intent)
keyboardInputRequest.openKeyboard()
}
}
}
}
}
private fun ManagedActivityResultLauncher<Intent, ActivityResult>.openKeyboard() {
val intent: Intent = RemoteInputIntentHelper.createActionRemoteInputIntent()
val remoteInputs: List<RemoteInput> = listOf(
RemoteInput
.Builder("input")
.setLabel("Enter title")
.setAllowFreeFormInput(true)
.wearableExtender {
setInputActionType(EditorInfo.IME_ACTION_DONE)
}
.build()
)
RemoteInputIntentHelper.putRemoteInputsExtra(intent, remoteInputs)
launch(intent)
}

@ -56,7 +56,6 @@ class TaskEditViewModel(
priority = task.priority,
)
}
}
}
}
@ -66,6 +65,8 @@ class TaskEditViewModel(
wearService.saveTask(
GrpcProto.SaveTaskRequest.newBuilder()
.setTitle(state.title)
.setTaskId(taskId)
.setCompleted(state.completed)
.build()
)
onComplete()
@ -74,6 +75,10 @@ class TaskEditViewModel(
fun setTitle(title: String) {
_uiState.update { it.copy(title = title) }
}
fun setCompleted(completed: Boolean) {
_uiState.update { it.copy(completed = completed) }
}
}
class TaskEditViewModelFactory(

Loading…
Cancel
Save