|
@@ -25,26 +25,26 @@ import androidx.compose.material3.FloatingActionButton
|
|
|
import androidx.compose.material3.Icon
|
|
|
import androidx.compose.material3.LinearProgressIndicator
|
|
|
import androidx.compose.material3.MaterialTheme
|
|
|
+import androidx.compose.material3.pulltorefresh.pullToRefresh
|
|
|
import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState
|
|
|
import androidx.compose.runtime.Composable
|
|
|
-import androidx.compose.runtime.LaunchedEffect
|
|
|
import androidx.compose.runtime.collectAsState
|
|
|
import androidx.compose.runtime.getValue
|
|
|
import androidx.compose.runtime.mutableStateOf
|
|
|
import androidx.compose.runtime.remember
|
|
|
+import androidx.compose.runtime.rememberCoroutineScope
|
|
|
import androidx.compose.runtime.setValue
|
|
|
import androidx.compose.ui.Alignment
|
|
|
import androidx.compose.ui.Modifier
|
|
|
-import androidx.compose.ui.input.nestedscroll.nestedScroll
|
|
|
import androidx.compose.ui.platform.LocalContext
|
|
|
import androidx.compose.ui.res.stringResource
|
|
|
import androidx.compose.ui.tooling.preview.Preview
|
|
|
import androidx.compose.ui.unit.dp
|
|
|
import com.nextcloud.client.assistant.component.AddTaskAlertDialog
|
|
|
import com.nextcloud.client.assistant.component.CenterText
|
|
|
-import com.nextcloud.client.assistant.taskTypes.TaskTypesRow
|
|
|
-import com.nextcloud.client.assistant.task.TaskView
|
|
|
import com.nextcloud.client.assistant.repository.AssistantMockRepository
|
|
|
+import com.nextcloud.client.assistant.task.TaskView
|
|
|
+import com.nextcloud.client.assistant.taskTypes.TaskTypesRow
|
|
|
import com.nextcloud.ui.composeActivity.ComposeActivity
|
|
|
import com.nextcloud.ui.composeComponents.alertDialog.SimpleAlertDialog
|
|
|
import com.owncloud.android.R
|
|
@@ -52,6 +52,7 @@ import com.owncloud.android.lib.resources.assistant.model.Task
|
|
|
import com.owncloud.android.lib.resources.assistant.model.TaskType
|
|
|
import com.owncloud.android.utils.DisplayUtils
|
|
|
import kotlinx.coroutines.delay
|
|
|
+import kotlinx.coroutines.launch
|
|
|
import java.lang.ref.WeakReference
|
|
|
|
|
|
@Suppress("LongMethod")
|
|
@@ -61,26 +62,26 @@ fun AssistantScreen(viewModel: AssistantViewModel, activity: Activity) {
|
|
|
val state by viewModel.state.collectAsState()
|
|
|
val selectedTaskType by viewModel.selectedTaskType.collectAsState()
|
|
|
val filteredTaskList by viewModel.filteredTaskList.collectAsState()
|
|
|
+ val isRefreshing by viewModel.isRefreshing.collectAsState()
|
|
|
val taskTypes by viewModel.taskTypes.collectAsState()
|
|
|
var showAddTaskAlertDialog by remember { mutableStateOf(false) }
|
|
|
var showDeleteTaskAlertDialog by remember { mutableStateOf(false) }
|
|
|
var taskIdToDeleted: Long? by remember {
|
|
|
mutableStateOf(null)
|
|
|
}
|
|
|
+ val scope = rememberCoroutineScope()
|
|
|
val pullRefreshState = rememberPullToRefreshState()
|
|
|
|
|
|
@Suppress("MagicNumber")
|
|
|
- if (pullRefreshState.isRefreshing) {
|
|
|
- LaunchedEffect(true) {
|
|
|
- delay(1500)
|
|
|
- viewModel.fetchTaskList(onCompleted = {
|
|
|
- pullRefreshState.endRefresh()
|
|
|
- })
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- Box(Modifier.nestedScroll(pullRefreshState.nestedScrollConnection)) {
|
|
|
- if (state == AssistantViewModel.State.Loading || pullRefreshState.isRefreshing) {
|
|
|
+ Box(
|
|
|
+ modifier = Modifier.pullToRefresh(isRefreshing, pullRefreshState, onRefresh = {
|
|
|
+ scope.launch {
|
|
|
+ delay(1500)
|
|
|
+ viewModel.fetchTaskList()
|
|
|
+ }
|
|
|
+ })
|
|
|
+ ) {
|
|
|
+ if (state == AssistantViewModel.State.Loading || isRefreshing) {
|
|
|
CenterText(text = stringResource(id = R.string.assistant_screen_loading))
|
|
|
} else {
|
|
|
if (filteredTaskList.isNullOrEmpty()) {
|
|
@@ -99,10 +100,13 @@ fun AssistantScreen(viewModel: AssistantViewModel, activity: Activity) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (pullRefreshState.isRefreshing) {
|
|
|
+ if (isRefreshing) {
|
|
|
LinearProgressIndicator(modifier = Modifier.fillMaxWidth())
|
|
|
} else {
|
|
|
- LinearProgressIndicator(progress = { pullRefreshState.progress }, modifier = Modifier.fillMaxWidth())
|
|
|
+ LinearProgressIndicator(
|
|
|
+ progress = { pullRefreshState.distanceFraction },
|
|
|
+ modifier = Modifier.fillMaxWidth()
|
|
|
+ )
|
|
|
}
|
|
|
|
|
|
if (selectedTaskType?.name != stringResource(id = R.string.assistant_screen_all_task_type)) {
|