From 851cc59554e96a2a2330654ad370894f75e0d4d0 Mon Sep 17 00:00:00 2001 From: Masoom Rizvi Date: Sat, 28 Mar 2026 18:28:57 +0530 Subject: [PATCH 1/2] Move user message handling from TasksScreen to TasksViewModel --- .../blueprints/todoapp/tasks/TasksScreenTest.kt | 2 -- .../architecture/blueprints/todoapp/TodoNavGraph.kt | 4 +--- .../blueprints/todoapp/tasks/TasksScreen.kt | 12 ------------ .../blueprints/todoapp/tasks/TasksViewModel.kt | 9 +++++++++ 4 files changed, 10 insertions(+), 17 deletions(-) diff --git a/app/src/androidTest/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksScreenTest.kt b/app/src/androidTest/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksScreenTest.kt index 8ec1e65c4..3c70ea2d3 100644 --- a/app/src/androidTest/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksScreenTest.kt +++ b/app/src/androidTest/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksScreenTest.kt @@ -259,8 +259,6 @@ class TasksScreenTest { Surface { TasksScreen( viewModel = TasksViewModel(repository, SavedStateHandle()), - userMessage = R.string.successfully_added_task_message, - onUserMessageDisplayed = { }, onAddTask = { }, onTaskClick = { }, openDrawer = { } diff --git a/app/src/main/java/com/example/android/architecture/blueprints/todoapp/TodoNavGraph.kt b/app/src/main/java/com/example/android/architecture/blueprints/todoapp/TodoNavGraph.kt index 852256c65..cdca86e84 100644 --- a/app/src/main/java/com/example/android/architecture/blueprints/todoapp/TodoNavGraph.kt +++ b/app/src/main/java/com/example/android/architecture/blueprints/todoapp/TodoNavGraph.kt @@ -67,11 +67,9 @@ fun TodoNavGraph( arguments = listOf( navArgument(USER_MESSAGE_ARG) { type = NavType.IntType; defaultValue = 0 } ) - ) { entry -> + ) { AppModalDrawer(drawerState, currentRoute, navActions) { TasksScreen( - userMessage = entry.arguments?.getInt(USER_MESSAGE_ARG)!!, - onUserMessageDisplayed = { entry.arguments?.putInt(USER_MESSAGE_ARG, 0) }, onAddTask = { navActions.navigateToAddEditTask(R.string.add_task, null) }, onTaskClick = { task -> navActions.navigateToTaskDetail(task.id) }, openDrawer = { coroutineScope.launch { drawerState.open() } } diff --git a/app/src/main/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksScreen.kt b/app/src/main/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksScreen.kt index 395865d0a..e4c17835a 100644 --- a/app/src/main/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksScreen.kt +++ b/app/src/main/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksScreen.kt @@ -44,7 +44,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.dimensionResource @@ -66,10 +65,8 @@ import com.example.android.architecture.blueprints.todoapp.util.TasksTopAppBar @Composable fun TasksScreen( - @StringRes userMessage: Int, onAddTask: () -> Unit, onTaskClick: (Task) -> Unit, - onUserMessageDisplayed: () -> Unit, openDrawer: () -> Unit, modifier: Modifier = Modifier, viewModel: TasksViewModel = hiltViewModel(), @@ -116,15 +113,6 @@ fun TasksScreen( viewModel.snackbarMessageShown() } } - - // Check if there's a userMessage to show to the user - val currentOnUserMessageDisplayed by rememberUpdatedState(onUserMessageDisplayed) - LaunchedEffect(userMessage) { - if (userMessage != 0) { - viewModel.showEditResultMessage(userMessage) - currentOnUserMessageDisplayed() - } - } } } diff --git a/app/src/main/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksViewModel.kt b/app/src/main/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksViewModel.kt index f95b2d273..c78a2511b 100644 --- a/app/src/main/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksViewModel.kt +++ b/app/src/main/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksViewModel.kt @@ -23,6 +23,7 @@ import com.example.android.architecture.blueprints.todoapp.ADD_EDIT_RESULT_OK import com.example.android.architecture.blueprints.todoapp.DELETE_RESULT_OK import com.example.android.architecture.blueprints.todoapp.EDIT_RESULT_OK import com.example.android.architecture.blueprints.todoapp.R +import com.example.android.architecture.blueprints.todoapp.TodoDestinationsArgs.USER_MESSAGE_ARG import com.example.android.architecture.blueprints.todoapp.data.Task import com.example.android.architecture.blueprints.todoapp.data.TaskRepository import com.example.android.architecture.blueprints.todoapp.tasks.TasksFilterType.ACTIVE_TASKS @@ -99,6 +100,14 @@ class TasksViewModel @Inject constructor( initialValue = TasksUiState(isLoading = true) ) + init { + // Read userMessageArgs from saveStateHandle + savedStateHandle.get(USER_MESSAGE_ARG)?.let { result -> + showEditResultMessage(result) + savedStateHandle[USER_MESSAGE_ARG] = 0 + } + } + fun setFiltering(requestType: TasksFilterType) { savedStateHandle[TASKS_FILTER_SAVED_STATE_KEY] = requestType } From eba1e9c1260fa1e8e09014d6acdd2c89f98b542c Mon Sep 17 00:00:00 2001 From: Masoom Rizvi Date: Sat, 28 Mar 2026 18:45:30 +0530 Subject: [PATCH 2/2] PR comment resolved: Skip showing edit result message if USER_MESSAGE_ARG is 0 --- .../architecture/blueprints/todoapp/tasks/TasksViewModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksViewModel.kt b/app/src/main/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksViewModel.kt index c78a2511b..73739c6e2 100644 --- a/app/src/main/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksViewModel.kt +++ b/app/src/main/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksViewModel.kt @@ -102,7 +102,7 @@ class TasksViewModel @Inject constructor( init { // Read userMessageArgs from saveStateHandle - savedStateHandle.get(USER_MESSAGE_ARG)?.let { result -> + savedStateHandle.get(USER_MESSAGE_ARG)?.takeIf { it != 0 }?.let { result -> showEditResultMessage(result) savedStateHandle[USER_MESSAGE_ARG] = 0 }