diff --git a/app/src/main/java/com/xayah/databackup/ui/activity/processing/ProcessingViewModel.kt b/app/src/main/java/com/xayah/databackup/ui/activity/processing/ProcessingViewModel.kt index 99a73ff51d..06f3358f76 100644 --- a/app/src/main/java/com/xayah/databackup/ui/activity/processing/ProcessingViewModel.kt +++ b/app/src/main/java/com/xayah/databackup/ui/activity/processing/ProcessingViewModel.kt @@ -2,6 +2,7 @@ package com.xayah.databackup.ui.activity.processing import androidx.compose.animation.core.MutableTransitionState import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.runtime.snapshots.SnapshotStateList import androidx.lifecycle.ViewModel import com.xayah.databackup.data.LoadingState import com.xayah.databackup.data.ProcessingTaskFilter @@ -12,7 +13,6 @@ import com.xayah.databackup.ui.activity.processing.components.ProcessingTask import com.xayah.databackup.util.GlobalString import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.asStateFlow class ProcessingViewModel : ViewModel() { var listType = TypeBackupApp @@ -27,47 +27,33 @@ class ProcessingViewModel : ViewModel() { val progress = MutableStateFlow(0) // 备份对象列表 - private val _objectList = MutableStateFlow(listOf()) - val objectList = _objectList.asStateFlow() - - fun emitObjectList(list: List) { - _objectList.value = list - } + val objectList = MutableStateFlow(SnapshotStateList()) // 任务列表 - private val _taskList = MutableStateFlow(listOf()) - val taskList = _taskList.asStateFlow() - - fun emitTaskList(list: List) { - _taskList.value = list - } - + val taskList = MutableStateFlow(SnapshotStateList()) val allDone by lazy { MutableTransitionState(false) } val isFirst = MutableStateFlow(true) val isCancel = MutableStateFlow(false) fun refreshTaskList() { - emitObjectList(listOf()) - val taskList = taskList.value.toMutableList() + objectList.value.clear() when (filter.value) { ProcessingTaskFilter.None -> { - for (i in taskList) { + for (i in taskList.value) { i.visible.value = true } } - ProcessingTaskFilter.Succeed -> { - for (i in taskList) { + for (i in taskList.value) { i.visible.value = i.taskState.value == TaskState.Success } } ProcessingTaskFilter.Failed -> { - for (i in taskList) { + for (i in taskList.value) { i.visible.value = i.taskState.value != TaskState.Success } } } - emitTaskList(taskList) } // 过滤 diff --git a/app/src/main/java/com/xayah/databackup/ui/activity/processing/action/BackupApp.kt b/app/src/main/java/com/xayah/databackup/ui/activity/processing/action/BackupApp.kt index a1747fd802..473cac65d5 100644 --- a/app/src/main/java/com/xayah/databackup/ui/activity/processing/action/BackupApp.kt +++ b/app/src/main/java/com/xayah/databackup/ui/activity/processing/action/BackupApp.kt @@ -4,33 +4,15 @@ import android.content.Context import androidx.compose.runtime.mutableStateOf import com.xayah.databackup.App import com.xayah.databackup.R -import com.xayah.databackup.data.AppInfoDetailRestore -import com.xayah.databackup.data.AppInfoRestore -import com.xayah.databackup.data.BackupStrategy -import com.xayah.databackup.data.CompressionType -import com.xayah.databackup.data.DataType -import com.xayah.databackup.data.LoadingState -import com.xayah.databackup.data.TaskState +import com.xayah.databackup.data.* import com.xayah.databackup.librootservice.RootService import com.xayah.databackup.ui.activity.processing.ProcessingViewModel import com.xayah.databackup.ui.activity.processing.components.ProcessObjectItem import com.xayah.databackup.ui.activity.processing.components.ProcessingTask import com.xayah.databackup.ui.activity.processing.components.onInfoUpdate -import com.xayah.databackup.util.GlobalObject -import com.xayah.databackup.util.GlobalString -import com.xayah.databackup.util.GsonUtil -import com.xayah.databackup.util.Logcat -import com.xayah.databackup.util.Path +import com.xayah.databackup.util.* import com.xayah.databackup.util.command.Command import com.xayah.databackup.util.command.Preparation -import com.xayah.databackup.util.readBackupSavePath -import com.xayah.databackup.util.readBackupStrategy -import com.xayah.databackup.util.readBackupUser -import com.xayah.databackup.util.readCompatibleMode -import com.xayah.databackup.util.readCompressionType -import com.xayah.databackup.util.readIsBackupIcon -import com.xayah.databackup.util.readIsBackupItself -import com.xayah.databackup.util.readIsResetBackupList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -45,11 +27,13 @@ fun onBackupAppProcessing(viewModel: ProcessingViewModel, context: Context, glob val loadingState = viewModel.loadingState val progress = viewModel.progress val topBarTitle = viewModel.topBarTitle - val taskList = viewModel.taskList.value.toMutableList() - val objectList = listOf(DataType.APK, DataType.USER, DataType.USER_DE, DataType.DATA, DataType.OBB, DataType.APP_MEDIA).map { - ProcessObjectItem(type = it) + val taskList = viewModel.taskList.value + val objectList = viewModel.objectList.value.apply { + clear() + addAll(listOf(DataType.APK, DataType.USER, DataType.USER_DE, DataType.DATA, DataType.OBB, DataType.APP_MEDIA).map { + ProcessObjectItem(type = it) + }) } - viewModel.emitObjectList(objectList) val allDone = viewModel.allDone // Check global map @@ -75,7 +59,6 @@ fun onBackupAppProcessing(viewModel: ProcessingViewModel, context: Context, glob objectList = listOf() ) }) - viewModel.emitTaskList(taskList) } else { Logcat.getInstance().actionLogAddLine(tag, "Retrying.") } @@ -125,11 +108,9 @@ fun onBackupAppProcessing(viewModel: ProcessingViewModel, context: Context, glob subtitle.value = GlobalString.pleaseWait } } - viewModel.emitObjectList(objectList) // Enter processing state i.taskState.value = TaskState.Processing - viewModel.emitTaskList(taskList) val appInfoBackup = globalObject.appInfoBackupMap.value[i.packageName]!! // Scroll to processing task @@ -182,7 +163,6 @@ fun onBackupAppProcessing(viewModel: ProcessingViewModel, context: Context, glob objectList[5].visible.value = true } } - viewModel.emitObjectList(objectList) // Kill the app Preparation.killPackage(packageName) @@ -190,13 +170,11 @@ fun onBackupAppProcessing(viewModel: ProcessingViewModel, context: Context, glob if (viewModel.isCancel.value) break if (j.visible.value) { j.state.value = TaskState.Processing - viewModel.emitObjectList(objectList) when (j.type) { DataType.APK -> { Command.compressAPK(compressionType, packageName, outPutPath, userId, appInfoBackup.detailBackup.appSize, compatibleMode) { type, line -> onInfoUpdate(type, line ?: "", j) - viewModel.emitObjectList(objectList) }.apply { if (!this) { isSuccess = false @@ -215,7 +193,6 @@ fun onBackupAppProcessing(viewModel: ProcessingViewModel, context: Context, glob Command.compress(compressionType, DataType.USER, packageName, outPutPath, Path.getUserPath(), appInfoBackup.detailBackup.userSize, compatibleMode) { type, line -> onInfoUpdate(type, line ?: "", j) - viewModel.emitObjectList(objectList) }.apply { if (!this) { isSuccess = false @@ -229,7 +206,6 @@ fun onBackupAppProcessing(viewModel: ProcessingViewModel, context: Context, glob Command.compress(compressionType, DataType.USER_DE, packageName, outPutPath, Path.getUserDePath(), appInfoBackup.detailBackup.userDeSize, compatibleMode) { type, line -> onInfoUpdate(type, line ?: "", j) - viewModel.emitObjectList(objectList) }.apply { if (!this) { isSuccess = false @@ -243,7 +219,6 @@ fun onBackupAppProcessing(viewModel: ProcessingViewModel, context: Context, glob Command.compress(compressionType, DataType.DATA, packageName, outPutPath, Path.getDataPath(), appInfoBackup.detailBackup.dataSize, compatibleMode) { type, line -> onInfoUpdate(type, line ?: "", j) - viewModel.emitObjectList(objectList) }.apply { if (!this) { isSuccess = false @@ -257,7 +232,6 @@ fun onBackupAppProcessing(viewModel: ProcessingViewModel, context: Context, glob Command.compress(compressionType, DataType.OBB, packageName, outPutPath, Path.getObbPath(), appInfoBackup.detailBackup.obbSize, compatibleMode) { type, line -> onInfoUpdate(type, line ?: "", j) - viewModel.emitObjectList(objectList) }.apply { if (!this) { isSuccess = false @@ -271,7 +245,6 @@ fun onBackupAppProcessing(viewModel: ProcessingViewModel, context: Context, glob Command.compress(compressionType, DataType.APP_MEDIA, packageName, outPutPath, Path.getAPPMediaPath(), appInfoBackup.detailBackup.mediaSize, compatibleMode) { type, line -> onInfoUpdate(type, line ?: "", j) - viewModel.emitObjectList(objectList) }.apply { if (!this) { isSuccess = false @@ -351,7 +324,6 @@ fun onBackupAppProcessing(viewModel: ProcessingViewModel, context: Context, glob } this.objectList = list.toList() } - viewModel.emitTaskList(taskList) progress.value += 1 topBarTitle.value = "${context.getString(R.string.backing_up)}(${progress.value}/${taskList.size})" diff --git a/app/src/main/java/com/xayah/databackup/ui/activity/processing/action/BackupMedia.kt b/app/src/main/java/com/xayah/databackup/ui/activity/processing/action/BackupMedia.kt index aa1591ca3b..bb4773b43b 100644 --- a/app/src/main/java/com/xayah/databackup/ui/activity/processing/action/BackupMedia.kt +++ b/app/src/main/java/com/xayah/databackup/ui/activity/processing/action/BackupMedia.kt @@ -4,27 +4,14 @@ import android.content.Context import androidx.compose.runtime.mutableStateOf import com.xayah.databackup.App import com.xayah.databackup.R -import com.xayah.databackup.data.BackupStrategy -import com.xayah.databackup.data.CompressionType -import com.xayah.databackup.data.DataType -import com.xayah.databackup.data.LoadingState -import com.xayah.databackup.data.MediaInfoDetailBase -import com.xayah.databackup.data.MediaInfoRestore -import com.xayah.databackup.data.TaskState +import com.xayah.databackup.data.* import com.xayah.databackup.librootservice.RootService import com.xayah.databackup.ui.activity.processing.ProcessingViewModel import com.xayah.databackup.ui.activity.processing.components.ProcessObjectItem import com.xayah.databackup.ui.activity.processing.components.ProcessingTask import com.xayah.databackup.ui.activity.processing.components.onInfoUpdate -import com.xayah.databackup.util.GlobalObject -import com.xayah.databackup.util.GlobalString -import com.xayah.databackup.util.GsonUtil -import com.xayah.databackup.util.Logcat -import com.xayah.databackup.util.Path +import com.xayah.databackup.util.* import com.xayah.databackup.util.command.Command -import com.xayah.databackup.util.readBackupStrategy -import com.xayah.databackup.util.readCompatibleMode -import com.xayah.databackup.util.readIsResetBackupList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -39,9 +26,11 @@ fun onBackupMediaProcessing(viewModel: ProcessingViewModel, context: Context, gl val loadingState = viewModel.loadingState val progress = viewModel.progress val topBarTitle = viewModel.topBarTitle - val taskList = viewModel.taskList.value.toMutableList() - val objectList = listOf(ProcessObjectItem(type = DataType.DATA)) - viewModel.emitObjectList(objectList) + val taskList = viewModel.taskList.value + val objectList = viewModel.objectList.value.apply { + clear() + add(ProcessObjectItem(type = DataType.DATA)) + } val allDone = viewModel.allDone // Check global map @@ -68,7 +57,6 @@ fun onBackupMediaProcessing(viewModel: ProcessingViewModel, context: Context, gl objectList = listOf() ) }) - viewModel.emitTaskList(taskList) } else { Logcat.getInstance().actionLogAddLine(tag, "Retrying.") } @@ -95,11 +83,9 @@ fun onBackupMediaProcessing(viewModel: ProcessingViewModel, context: Context, gl visible.value = false subtitle.value = GlobalString.pleaseWait } - viewModel.emitObjectList(objectList) // Enter processing state i.taskState.value = TaskState.Processing - viewModel.emitTaskList(taskList) val mediaInfoBackup = globalObject.mediaInfoBackupMap.value[i.appName]!! // Scroll to processing task @@ -119,19 +105,16 @@ fun onBackupMediaProcessing(viewModel: ProcessingViewModel, context: Context, gl if (i.selectData) { objectList[0].visible.value = true - viewModel.emitObjectList(objectList) } for (j in objectList) { if (viewModel.isCancel.value) break if (j.visible.value) { j.state.value = TaskState.Processing - viewModel.emitObjectList(objectList) when (j.type) { DataType.DATA -> { Command.compress(CompressionType.TAR, DataType.MEDIA, i.appName, outPutPath, i.packageName, mediaInfoBackup.backupDetail.size, compatibleMode) { type, line -> onInfoUpdate(type, line ?: "", j) - viewModel.emitObjectList(objectList) }.apply { if (!this) { isSuccess = false diff --git a/app/src/main/java/com/xayah/databackup/ui/activity/processing/action/RestoreApp.kt b/app/src/main/java/com/xayah/databackup/ui/activity/processing/action/RestoreApp.kt index 26ed1d361e..a2fc3fdf94 100644 --- a/app/src/main/java/com/xayah/databackup/ui/activity/processing/action/RestoreApp.kt +++ b/app/src/main/java/com/xayah/databackup/ui/activity/processing/action/RestoreApp.kt @@ -29,11 +29,13 @@ fun onRestoreAppProcessing(viewModel: ProcessingViewModel, context: Context, glo val loadingState = viewModel.loadingState val progress = viewModel.progress val topBarTitle = viewModel.topBarTitle - val taskList = viewModel.taskList.value.toMutableList() - val objectList = listOf(DataType.APK, DataType.USER, DataType.USER_DE, DataType.DATA, DataType.OBB, DataType.APP_MEDIA).map { - ProcessObjectItem(type = it) + val taskList = viewModel.taskList.value + val objectList = viewModel.objectList.value.apply { + clear() + addAll(listOf(DataType.APK, DataType.USER, DataType.USER_DE, DataType.DATA, DataType.OBB, DataType.APP_MEDIA).map { + ProcessObjectItem(type = it) + }) } - viewModel.emitObjectList(objectList) val allDone = viewModel.allDone // Check global map @@ -67,7 +69,6 @@ fun onRestoreAppProcessing(viewModel: ProcessingViewModel, context: Context, glo } } }) - viewModel.emitTaskList(taskList) } else { Logcat.getInstance().actionLogAddLine(tag, "Retrying.") } @@ -97,11 +98,9 @@ fun onRestoreAppProcessing(viewModel: ProcessingViewModel, context: Context, glo subtitle.value = GlobalString.pleaseWait } } - viewModel.emitObjectList(objectList) // Enter processing state i.taskState.value = TaskState.Processing - viewModel.emitTaskList(taskList) val appInfoRestore = globalObject.appInfoRestoreMap.value[i.packageName]!! // Scroll to processing task @@ -155,18 +154,15 @@ fun onRestoreAppProcessing(viewModel: ProcessingViewModel, context: Context, glo objectList[5].visible.value = true } } - viewModel.emitObjectList(objectList) for ((jIndex, j) in objectList.withIndex()) { if (viewModel.isCancel.value) break if (j.visible.value) { j.state.value = TaskState.Processing - viewModel.emitObjectList(objectList) when (j.type) { DataType.APK -> { isSuccess = Command.installAPK(compressionType, apkPath, packageName, userId, appInfoRestore.versionCode.toString()) { type, line -> onInfoUpdate(type, line ?: "", j) - viewModel.emitObjectList(objectList) } // If the app isn't installed, the restoring can't move on @@ -183,14 +179,12 @@ fun onRestoreAppProcessing(viewModel: ProcessingViewModel, context: Context, glo Command.decompress(compressionType, DataType.USER, userPath, packageName, Path.getUserPath(userId)) { type, line -> onInfoUpdate(type, line ?: "", j) - viewModel.emitObjectList(objectList) }.apply { if (!this) isSuccess = false } Command.setOwnerAndSELinux(DataType.USER, packageName, "${Path.getUserPath(userId)}/${packageName}", userId, contextSELinux) { type, line -> onInfoUpdate(type, line ?: "", j) - viewModel.emitObjectList(objectList) }.apply { if (!this) isSuccess = false } @@ -201,14 +195,12 @@ fun onRestoreAppProcessing(viewModel: ProcessingViewModel, context: Context, glo Command.decompress(compressionType, DataType.USER_DE, userDePath, packageName, Path.getUserDePath(userId)) { type, line -> onInfoUpdate(type, line ?: "", j) - viewModel.emitObjectList(objectList) }.apply { if (!this) isSuccess = false } Command.setOwnerAndSELinux(DataType.USER_DE, packageName, "${Path.getUserDePath(userId)}/${packageName}", userId, contextSELinux) { type, line -> onInfoUpdate(type, line ?: "", j) - viewModel.emitObjectList(objectList) }.apply { if (!this) isSuccess = false } @@ -219,14 +211,12 @@ fun onRestoreAppProcessing(viewModel: ProcessingViewModel, context: Context, glo Command.decompress(compressionType, DataType.DATA, dataPath, packageName, Path.getDataPath(userId)) { type, line -> onInfoUpdate(type, line ?: "", j) - viewModel.emitObjectList(objectList) }.apply { if (!this) isSuccess = false } Command.setOwnerAndSELinux(DataType.DATA, packageName, "${Path.getDataPath(userId)}/${packageName}", userId, contextSELinux) { type, line -> onInfoUpdate(type, line ?: "", j) - viewModel.emitObjectList(objectList) }.apply { if (!this) isSuccess = false } @@ -237,14 +227,12 @@ fun onRestoreAppProcessing(viewModel: ProcessingViewModel, context: Context, glo Command.decompress(compressionType, DataType.OBB, obbPath, packageName, Path.getObbPath(userId)) { type, line -> onInfoUpdate(type, line ?: "", j) - viewModel.emitObjectList(objectList) }.apply { if (!this) isSuccess = false } Command.setOwnerAndSELinux(DataType.OBB, packageName, "${Path.getObbPath(userId)}/${packageName}", userId, contextSELinux) { type, line -> onInfoUpdate(type, line ?: "", j) - viewModel.emitObjectList(objectList) }.apply { if (!this) isSuccess = false } @@ -255,14 +243,12 @@ fun onRestoreAppProcessing(viewModel: ProcessingViewModel, context: Context, glo Command.decompress(compressionType, DataType.APP_MEDIA, appMediaPath, packageName, Path.getAPPMediaPath(userId)) { type, line -> onInfoUpdate(type, line ?: "", j) - viewModel.emitObjectList(objectList) }.apply { if (!this) isSuccess = false } Command.setOwnerAndSELinux(DataType.APP_MEDIA, packageName, "${Path.getAPPMediaPath(userId)}/${packageName}", userId, contextSELinux) { type, line -> onInfoUpdate(type, line ?: "", j) - viewModel.emitObjectList(objectList) }.apply { if (!this) isSuccess = false } @@ -297,7 +283,6 @@ fun onRestoreAppProcessing(viewModel: ProcessingViewModel, context: Context, glo } this.objectList = list.toList() } - viewModel.emitTaskList(taskList) progress.value += 1 topBarTitle.value = "${context.getString(R.string.restoring)}(${progress.value}/${taskList.size})" diff --git a/app/src/main/java/com/xayah/databackup/ui/activity/processing/action/RestoreMedia.kt b/app/src/main/java/com/xayah/databackup/ui/activity/processing/action/RestoreMedia.kt index f69009608f..ee311b0e00 100644 --- a/app/src/main/java/com/xayah/databackup/ui/activity/processing/action/RestoreMedia.kt +++ b/app/src/main/java/com/xayah/databackup/ui/activity/processing/action/RestoreMedia.kt @@ -27,9 +27,11 @@ fun onRestoreMediaProcessing(viewModel: ProcessingViewModel, context: Context, g val loadingState = viewModel.loadingState val progress = viewModel.progress val topBarTitle = viewModel.topBarTitle - val taskList = viewModel.taskList.value.toMutableList() - val objectList = listOf(ProcessObjectItem(type = DataType.DATA)) - viewModel.emitObjectList(objectList) + val taskList = viewModel.taskList.value + val objectList = viewModel.objectList.value.apply { + clear() + add(ProcessObjectItem(type = DataType.DATA)) + } val allDone = viewModel.allDone // Check global map @@ -53,7 +55,6 @@ fun onRestoreMediaProcessing(viewModel: ProcessingViewModel, context: Context, g objectList = listOf() ) }) - viewModel.emitTaskList(taskList) } else { Logcat.getInstance().actionLogAddLine(tag, "Retrying.") } @@ -74,7 +75,6 @@ fun onRestoreMediaProcessing(viewModel: ProcessingViewModel, context: Context, g visible.value = false subtitle.value = GlobalString.pleaseWait } - viewModel.emitObjectList(objectList) // Enter processing state i.taskState.value = TaskState.Processing @@ -97,20 +97,17 @@ fun onRestoreMediaProcessing(viewModel: ProcessingViewModel, context: Context, g if (i.selectData) { objectList[0].visible.value = true - viewModel.emitObjectList(objectList) } for (j in objectList) { if (viewModel.isCancel.value) break if (j.visible.value) { j.state.value = TaskState.Processing - viewModel.emitObjectList(objectList) when (j.type) { DataType.DATA -> { val inputPath = "${inPath}/${i.appName}.tar" Command.decompress(CompressionType.TAR, DataType.MEDIA, inputPath, i.appName, i.packageName.replace("/${i.appName}", "")) { type, line -> onInfoUpdate(type, line ?: "", j) - viewModel.emitObjectList(objectList) }.apply { if (!this) isSuccess = false } @@ -146,7 +143,6 @@ fun onRestoreMediaProcessing(viewModel: ProcessingViewModel, context: Context, g } this.objectList = list.toList() } - viewModel.emitTaskList(taskList) progress.value += 1 topBarTitle.value = "${context.getString(R.string.restoring)}(${progress.value}/${taskList.size})" diff --git a/app/src/main/java/com/xayah/databackup/ui/activity/processing/components/Scaffold.kt b/app/src/main/java/com/xayah/databackup/ui/activity/processing/components/Scaffold.kt index aae8bf4522..a11e240eb2 100644 --- a/app/src/main/java/com/xayah/databackup/ui/activity/processing/components/Scaffold.kt +++ b/app/src/main/java/com/xayah/databackup/ui/activity/processing/components/Scaffold.kt @@ -9,11 +9,7 @@ import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.Done -import androidx.compose.material3.Card -import androidx.compose.material3.CenterAlignedTopAppBar -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.FloatingActionButton -import androidx.compose.material3.Icon +import androidx.compose.material3.* import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue @@ -22,17 +18,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.dimensionResource import com.google.accompanist.drawablepainter.rememberDrawablePainter import com.xayah.databackup.R -import com.xayah.databackup.data.LoadingState -import com.xayah.databackup.data.ProcessCompressing -import com.xayah.databackup.data.ProcessDecompressing -import com.xayah.databackup.data.ProcessError -import com.xayah.databackup.data.ProcessFinished -import com.xayah.databackup.data.ProcessInstallingApk -import com.xayah.databackup.data.ProcessSettingSELinux -import com.xayah.databackup.data.ProcessShowTotal -import com.xayah.databackup.data.ProcessSkip -import com.xayah.databackup.data.ProcessTesting -import com.xayah.databackup.data.TaskState +import com.xayah.databackup.data.* import com.xayah.databackup.ui.activity.processing.ProcessingViewModel import com.xayah.databackup.ui.components.LoadingView import com.xayah.databackup.ui.components.Scaffold @@ -193,7 +179,8 @@ fun ProcessingScaffold( taskState = taskList[it].taskState.value, clickable = allDone.currentState, onClick = { - viewModel.emitObjectList(taskList[it].objectList) + objectList.clear() + objectList.addAll(taskList[it].objectList) } ) }