diff --git a/app/src/main/java/org/thoughtcrime/securesms/linkdevice/LinkDeviceFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/linkdevice/LinkDeviceFragment.kt index 09b2edfb71..2946bd0f04 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/linkdevice/LinkDeviceFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/linkdevice/LinkDeviceFragment.kt @@ -15,12 +15,14 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.text.ClickableText import androidx.compose.foundation.text.InlineTextContent import androidx.compose.foundation.text.appendInlineContent import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.Icon import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.MaterialTheme @@ -132,7 +134,7 @@ fun DeviceDescriptionScreen( setDeviceToRemove: (Device?) -> Unit = {}, onRemoveDevice: (Device) -> Unit = {} ) { - if (state.progressDialogMessage != -1) { + if (state.progressDialogMessage != -1 && state.progressDialogMessage != R.string.LinkDeviceFragment__loading) { if (navController?.currentDestination?.id == R.id.linkDeviceFinishedSheet && state.progressDialogMessage == R.string.LinkDeviceFragment__linking_device ) { @@ -179,15 +181,35 @@ fun DeviceDescriptionScreen( Text(stringResource(id = R.string.LinkDeviceFragment__link_a_new_device)) } - if (state.devices.isNotEmpty()) { - Dividers.Default() + Dividers.Default() - Column { - Text( - text = stringResource(R.string.LinkDeviceFragment__my_linked_devices), - style = MaterialTheme.typography.titleMedium, - modifier = Modifier.padding(start = 24.dp, top = 12.dp, bottom = 24.dp) + Column(modifier = Modifier.fillMaxWidth()) { + Text( + text = stringResource(R.string.LinkDeviceFragment__my_linked_devices), + style = MaterialTheme.typography.titleMedium, + modifier = Modifier.padding(start = 24.dp, top = 12.dp, bottom = 12.dp) + ) + if (state.progressDialogMessage == R.string.LinkDeviceFragment__loading) { + Spacer(modifier = Modifier.size(30.dp)) + CircularProgressIndicator( + modifier = Modifier + .size(36.dp) + .align(Alignment.CenterHorizontally), + color = MaterialTheme.colorScheme.primary ) + Spacer(modifier = Modifier.size(30.dp)) + } else if (state.devices.isEmpty()) { + Text( + text = stringResource(R.string.LinkDeviceFragment__no_linked_devices), + textAlign = TextAlign.Center, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier + .fillMaxWidth() + .defaultMinSize(minHeight = 96.dp) + .wrapContentHeight(align = Alignment.CenterVertically) + ) + } else { state.devices.forEach { device -> DeviceRow(device, setDeviceToRemove) } @@ -198,8 +220,6 @@ fun DeviceDescriptionScreen( modifier = Modifier.padding(horizontal = 40.dp, vertical = 12.dp), verticalAlignment = Alignment.CenterVertically ) { - Spacer(modifier = Modifier.size(12.dp)) - val message = stringResource(id = R.string.LinkDeviceFragment__messages_and_chat_info_are_protected, PLACEHOLDER) val (messageText, messageInline) = remember(message) { val parts = message.split(PLACEHOLDER) @@ -214,7 +234,8 @@ fun DeviceDescriptionScreen( Image( imageVector = ImageVector.vectorResource(id = R.drawable.symbol_lock_24), contentDescription = null, - modifier = Modifier.fillMaxSize() + modifier = Modifier.fillMaxSize(), + colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.onSurface) ) } ) @@ -251,22 +272,20 @@ fun DeviceRow(device: Device, setDeviceToRemove: (Device) -> Unit) { colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.onSurface), contentScale = ContentScale.Inside, modifier = Modifier - .padding(start = 24.dp) + .padding(start = 24.dp, top = 28.dp, bottom = 28.dp) .size(40.dp) .background( color = MaterialTheme.colorScheme.surfaceVariant, shape = CircleShape ) ) - Spacer(modifier = Modifier.size(20.dp)) + Spacer(modifier = Modifier.size(16.dp)) Column { Text(text = titleString, style = MaterialTheme.typography.bodyLarge) - Spacer(modifier = Modifier.size(4.dp)) Text(stringResource(R.string.DeviceListItem_linked_s, linkedDate), style = MaterialTheme.typography.bodyMedium, color = MaterialTheme.colorScheme.onSurfaceVariant) Text(stringResource(R.string.DeviceListItem_last_active_s, lastActive), style = MaterialTheme.typography.bodyMedium, color = MaterialTheme.colorScheme.onSurfaceVariant) } } - Spacer(modifier = Modifier.size(16.dp)) } @SignalPreview diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fac322b518..5d6428984c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -889,6 +889,8 @@ Device approved Loading… + + No linked devices