android/ui: only show loading spinner if op takes more than 300 milliseconds

Updates tailscale/corp#18202

Signed-off-by: Percy Wegmann <percy@tailscale.com>
pull/287/head
Percy Wegmann 3 months ago
parent 94423d266e
commit 4509abe1af
No known key found for this signature in database
GPG Key ID: 29D8CDEB4C13D48B

@ -10,12 +10,15 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.State
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.produceState
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.tailscale.ipn.ui.view.TailscaleLogoView import com.tailscale.ipn.ui.view.TailscaleLogoView
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
object LoadingIndicator { object LoadingIndicator {
@ -40,11 +43,19 @@ object LoadingIndicator {
if (isLoading) { if (isLoading) {
Box(Modifier.clickable {}.matchParentSize().background(Color.Gray.copy(alpha = 0.0f))) Box(Modifier.clickable {}.matchParentSize().background(Color.Gray.copy(alpha = 0.0f)))
Column( val showSpinner: State<Boolean> =
modifier = Modifier.fillMaxWidth(), produceState(initialValue = false) {
horizontalAlignment = Alignment.CenterHorizontally) { delay(300)
TailscaleLogoView(true, Modifier.size(72.dp)) value = true
} }
if (showSpinner.value) {
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally) {
TailscaleLogoView(true, Modifier.size(72.dp))
}
}
} }
} }
} }

Loading…
Cancel
Save