Fix the scrolling

This commit is contained in:
greenart7c3
2024-11-18 10:34:01 -03:00
parent 9faa09e12a
commit edd424def9
21 changed files with 311 additions and 353 deletions
+1
View File
@@ -39,6 +39,7 @@
</inspection_tool>
<inspection_tool class="PreviewDeviceShouldUseNewSpec" enabled="true" level="WEAK WARNING" enabled_by_default="true">
<option name="composableFile" value="true" />
<option name="previewFile" value="true" />
</inspection_tool>
<inspection_tool class="PreviewDimensionRespectsLimit" enabled="true" level="WARNING" enabled_by_default="true">
<option name="composableFile" value="true" />
@@ -11,10 +11,8 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material3.ButtonDefaults
@@ -93,12 +91,18 @@ fun EditConfigurationScreen(
}
if (isLoading.value) {
CenterCircularProgressIndicator(modifier)
CenterCircularProgressIndicator(
modifier,
if (textFieldRelay.value.text.isNotBlank()) {
"Testing relay..."
} else {
null
},
)
} else {
Column(
modifier
.fillMaxSize()
.verticalScroll(rememberScrollState()),
.fillMaxSize(),
) {
Text(stringResource(R.string.edit_configuration_description))
@@ -12,8 +12,6 @@ import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
@@ -119,8 +117,7 @@ fun EditPermission(
}
Column(
modifier = modifier
.verticalScroll(rememberScrollState()),
modifier = modifier,
) {
if (!applicationData.isConnected) {
Text(
@@ -1,8 +1,8 @@
package com.greenart7c3.nostrsigner.ui
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.size
@@ -38,6 +38,7 @@ import kotlinx.coroutines.launch
@Composable
fun IncomingRequestScreen(
modifier: Modifier,
paddingValues: PaddingValues,
intents: List<IntentData>,
packageName: String?,
applicationName: String?,
@@ -69,47 +70,45 @@ fun IncomingRequestScreen(
if (loading) {
CenterCircularProgressIndicator(modifier)
} else {
Box(
modifier,
) {
if (intents.isEmpty()) {
Column(
Modifier.fillMaxSize(),
Arrangement.Center,
Alignment.CenterHorizontally,
) {
Text(
stringResource(R.string.nothing_to_approve_yet),
fontWeight = FontWeight.Bold,
fontSize = 21.sp,
)
Spacer(Modifier.size(8.dp))
Text(
stringResource(R.string.why_not_explore_your_favorite_nostr_app_a_bit),
textAlign = TextAlign.Center,
)
}
} else if (intents.size == 1) {
SingleEventHomeScreen(
packageName,
applicationName,
intents.first(),
account,
database,
onRemoveIntentData,
) {
loading = it
}
} else {
MultiEventHomeScreen(
intents,
packageName,
account,
navController,
onRemoveIntentData,
) {
loading = it
}
if (intents.isEmpty()) {
Column(
modifier.fillMaxSize(),
Arrangement.Center,
Alignment.CenterHorizontally,
) {
Text(
stringResource(R.string.nothing_to_approve_yet),
fontWeight = FontWeight.Bold,
fontSize = 21.sp,
)
Spacer(Modifier.size(8.dp))
Text(
stringResource(R.string.why_not_explore_your_favorite_nostr_app_a_bit),
textAlign = TextAlign.Center,
)
}
} else if (intents.size == 1) {
SingleEventHomeScreen(
paddingValues,
packageName,
applicationName,
intents.first(),
account,
database,
onRemoveIntentData,
) {
loading = it
}
} else {
MultiEventHomeScreen(
paddingValues = paddingValues,
intents,
packageName,
account,
navController,
onRemoveIntentData,
) {
loading = it
}
}
}
@@ -5,13 +5,11 @@ import androidx.appcompat.app.AppCompatDelegate
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.intl.Locale
import androidx.compose.ui.unit.dp
import androidx.core.os.LocaleListCompat
import com.greenart7c3.nostrsigner.LocalPreferences
import com.greenart7c3.nostrsigner.R
@@ -40,8 +38,7 @@ fun LanguageScreen(
) {
Column {
Box(
Modifier
.padding(8.dp),
Modifier,
) {
SettingsRow(
R.string.language,
@@ -147,7 +147,7 @@ fun MainPage(
state.animateScrollToPage(2)
}
},
text = stringResource(R.string.sign_policy),
text = stringResource(R.string.generate_a_new_key),
)
}
}
@@ -2,6 +2,7 @@ package com.greenart7c3.nostrsigner.ui
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
@@ -31,72 +32,70 @@ import kotlinx.coroutines.launch
@Composable
fun LogsScreen(
paddingValues: PaddingValues,
account: Account,
modifier: Modifier = Modifier,
) {
val scope = rememberCoroutineScope()
Column(
modifier = modifier
val logsFlow = NostrSigner.getInstance().getDatabase(account.signer.keyPair.pubKey.toNpub()).applicationDao().getLogs()
val logs = logsFlow.collectAsStateWithLifecycle(initialValue = emptyList())
LazyColumn(
modifier = Modifier
.fillMaxSize(),
contentPadding = paddingValues,
) {
val logsFlow = NostrSigner.getInstance().getDatabase(account.signer.keyPair.pubKey.toNpub()).applicationDao().getLogs()
val logs = logsFlow.collectAsStateWithLifecycle(initialValue = emptyList())
LazyColumn(
Modifier.weight(1f),
) {
items(logs.value) { log ->
Row(
modifier = Modifier
.fillMaxSize()
.padding(vertical = 4.dp),
verticalAlignment = Alignment.CenterVertically,
) {
Column(
verticalArrangement = Arrangement.Center,
) {
Text(
modifier = Modifier.padding(top = 16.dp),
text = TimeUtils.formatLongToCustomDateTimeWithSeconds(log.time),
fontSize = 14.sp,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
)
Text(
modifier = Modifier.padding(top = 4.dp),
text = log.url,
fontSize = 20.sp,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
)
Text(
modifier = Modifier.padding(top = 4.dp),
text = log.type,
fontSize = 20.sp,
)
Text(
modifier = Modifier.padding(top = 4.dp, bottom = 16.dp),
text = log.message,
fontSize = 20.sp,
)
Spacer(Modifier.weight(1f))
HorizontalDivider(
color = MaterialTheme.colorScheme.primary,
)
item {
AmberButton(
modifier = Modifier.padding(bottom = 8.dp),
onClick = {
scope.launch(Dispatchers.IO) {
NostrSigner.getInstance().getDatabase(account.signer.keyPair.pubKey.toNpub()).applicationDao().clearLogs()
}
},
text = stringResource(R.string.clear_logs),
)
}
items(logs.value) { log ->
Row(
modifier = Modifier
.fillMaxSize()
.padding(vertical = 4.dp),
verticalAlignment = Alignment.CenterVertically,
) {
Column(
verticalArrangement = Arrangement.Center,
) {
Text(
modifier = Modifier.padding(top = 16.dp),
text = TimeUtils.formatLongToCustomDateTimeWithSeconds(log.time),
fontSize = 14.sp,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
)
Text(
modifier = Modifier.padding(top = 4.dp),
text = log.url,
fontSize = 20.sp,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
)
Text(
modifier = Modifier.padding(top = 4.dp),
text = log.type,
fontSize = 20.sp,
)
Text(
modifier = Modifier.padding(top = 4.dp, bottom = 16.dp),
text = log.message,
fontSize = 20.sp,
)
Spacer(Modifier.weight(1f))
HorizontalDivider(
color = MaterialTheme.colorScheme.primary,
)
}
}
}
AmberButton(
modifier = Modifier.padding(top = 8.dp),
onClick = {
scope.launch(Dispatchers.IO) {
NostrSigner.getInstance().getDatabase(account.signer.keyPair.pubKey.toNpub()).applicationDao().clearLogs()
}
},
text = stringResource(R.string.clear_logs),
)
}
}
@@ -18,14 +18,19 @@ import androidx.compose.foundation.border
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.calculateEndPadding
import androidx.compose.foundation.layout.calculateStartPadding
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material.icons.outlined.Person
@@ -66,6 +71,7 @@ import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.intl.Locale
import androidx.compose.ui.text.toUpperCase
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
import androidx.core.content.ContextCompat
import androidx.navigation.NavHostController
@@ -709,6 +715,12 @@ fun MainScreen(
.padding(padding)
.padding(horizontal = verticalPadding)
.padding(top = verticalPadding * 1.5f),
paddingValues = PaddingValues(
top = padding.calculateTopPadding() + (verticalPadding * 1.5f),
bottom = padding.calculateBottomPadding(),
start = padding.calculateStartPadding(LayoutDirection.Ltr) + verticalPadding,
end = padding.calculateEndPadding(LayoutDirection.Ltr) + verticalPadding,
),
intents,
packageName,
appName,
@@ -726,6 +738,7 @@ fun MainScreen(
PermissionsScreen(
modifier = Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(padding)
.padding(horizontal = verticalPadding)
.padding(top = verticalPadding * 1.5f),
@@ -742,6 +755,7 @@ fun MainScreen(
SettingsScreen(
Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(padding)
.padding(horizontal = verticalPadding)
.padding(top = verticalPadding * 1.5f),
@@ -758,6 +772,7 @@ fun MainScreen(
AccountBackupScreen(
Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(padding)
.padding(horizontal = verticalPadding)
.padding(top = verticalPadding * 1.5f),
@@ -775,6 +790,7 @@ fun MainScreen(
modifier =
Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(padding)
.padding(horizontal = verticalPadding)
.padding(top = verticalPadding * 1.5f),
@@ -791,12 +807,12 @@ fun MainScreen(
Route.Logs.route,
content = {
LogsScreen(
modifier =
Modifier
.fillMaxSize()
.padding(padding)
.padding(horizontal = verticalPadding)
.padding(top = verticalPadding * 1.5f),
PaddingValues(
top = padding.calculateTopPadding() + (verticalPadding * 1.5f),
bottom = padding.calculateBottomPadding(),
start = padding.calculateStartPadding(LayoutDirection.Ltr) + verticalPadding,
end = padding.calculateEndPadding(LayoutDirection.Ltr) + verticalPadding,
),
account = account,
)
},
@@ -810,6 +826,7 @@ fun MainScreen(
modifier =
Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(padding)
.padding(horizontal = verticalPadding)
.padding(top = verticalPadding * 1.5f),
@@ -889,6 +906,7 @@ fun MainScreen(
modifier =
Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(padding)
.padding(horizontal = verticalPadding)
.padding(top = verticalPadding * 1.5f),
@@ -907,6 +925,7 @@ fun MainScreen(
modifier =
Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(padding)
.padding(horizontal = verticalPadding)
.padding(top = verticalPadding * 1.5f),
@@ -926,6 +945,7 @@ fun MainScreen(
modifier =
Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(padding)
.padding(horizontal = verticalPadding)
.padding(top = verticalPadding * 1.5f),
@@ -945,6 +965,7 @@ fun MainScreen(
modifier =
Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(padding)
.padding(horizontal = verticalPadding)
.padding(top = verticalPadding * 1.5f),
@@ -961,12 +982,12 @@ fun MainScreen(
val localUrl = Base64.getDecoder().decode(url).toString(Charsets.UTF_8)
RelayLogScreen(
url = localUrl,
modifier =
Modifier
.fillMaxSize()
.padding(padding)
.padding(horizontal = verticalPadding)
.padding(top = verticalPadding * 1.5f),
paddingValues = PaddingValues(
top = padding.calculateTopPadding() + (verticalPadding * 1.5f),
bottom = padding.calculateBottomPadding(),
start = padding.calculateStartPadding(LayoutDirection.Ltr) + verticalPadding,
end = padding.calculateEndPadding(LayoutDirection.Ltr) + verticalPadding,
),
)
}
},
@@ -980,6 +1001,7 @@ fun MainScreen(
EditConfigurationScreen(
modifier = Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(padding)
.padding(horizontal = verticalPadding)
.padding(top = verticalPadding * 1.5f),
@@ -1032,6 +1054,7 @@ fun MainScreen(
SeeDetailsScreen(
modifier = Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(padding)
.padding(horizontal = verticalPadding)
.padding(top = verticalPadding * 1.5f),
@@ -8,8 +8,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
@@ -50,55 +48,50 @@ fun PermissionsScreen(
Text(stringResource(R.string.no_permissions_granted))
}
} else {
LazyColumn(
Modifier
.fillMaxSize(),
) {
itemsIndexed(applications.value) { _, applicationWithHistory ->
Row(
modifier = Modifier
.fillMaxSize()
.padding(vertical = 4.dp)
.clickable {
navController.navigate("Permission/${applicationWithHistory.application.key}")
},
verticalAlignment = Alignment.CenterVertically,
applications.value.forEach { applicationWithHistory ->
Row(
modifier = Modifier
.fillMaxSize()
.padding(vertical = 4.dp)
.clickable {
navController.navigate("Permission/${applicationWithHistory.application.key}")
},
verticalAlignment = Alignment.CenterVertically,
) {
Column(
verticalArrangement = Arrangement.Center,
) {
Column(
verticalArrangement = Arrangement.Center,
Text(
modifier = Modifier.padding(top = 16.dp),
text = applicationWithHistory.application.name.ifBlank { applicationWithHistory.application.key.toShortenHex() },
fontSize = 24.sp,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
)
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
) {
Text(
modifier = Modifier.padding(top = 16.dp),
text = applicationWithHistory.application.name.ifBlank { applicationWithHistory.application.key.toShortenHex() },
fontSize = 24.sp,
modifier = Modifier.padding(top = 4.dp, bottom = 16.dp),
text = applicationWithHistory.application.key.toShortenHex(),
fontSize = 16.sp,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
)
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
) {
Text(
modifier = Modifier.padding(top = 4.dp, bottom = 16.dp),
text = applicationWithHistory.application.key.toShortenHex(),
fontSize = 16.sp,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
)
Text(
modifier = Modifier.padding(top = 4.dp, bottom = 16.dp),
text = if (applicationWithHistory.latestTime == null) stringResource(R.string.never) else TimeUtils.formatLongToCustomDateTime(applicationWithHistory.latestTime * 1000),
fontSize = 16.sp,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
)
}
Spacer(Modifier.weight(1f))
HorizontalDivider(
color = MaterialTheme.colorScheme.primary,
Text(
modifier = Modifier.padding(top = 4.dp, bottom = 16.dp),
text = if (applicationWithHistory.latestTime == null) stringResource(R.string.never) else TimeUtils.formatLongToCustomDateTime(applicationWithHistory.latestTime * 1000),
fontSize = 16.sp,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
)
}
Spacer(Modifier.weight(1f))
HorizontalDivider(
color = MaterialTheme.colorScheme.primary,
)
}
}
}
@@ -8,8 +8,6 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.Checkbox
@@ -44,8 +42,7 @@ fun SeeDetailsScreen(
val context = LocalContext.current
Column(
modifier = modifier
.fillMaxWidth()
.verticalScroll(rememberScrollState()),
.fillMaxWidth(),
) {
var rememberMyChoice by remember { mutableStateOf(MultiEventScreenIntents.intents.first().rememberMyChoice.value) }
val first = MultiEventScreenIntents.intents.first()
@@ -10,8 +10,6 @@ import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Draw
import androidx.compose.material.icons.filled.FilterList
@@ -95,8 +93,7 @@ fun SettingsScreen(
}
Column(
modifier
.verticalScroll(rememberScrollState()),
modifier,
) {
Box(
Modifier
@@ -15,9 +15,7 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Visibility
import androidx.compose.material.icons.outlined.VisibilityOff
@@ -128,9 +126,6 @@ fun AccountBackupScreen(
.fillMaxSize(),
) {
Column(
modifier =
Modifier
.verticalScroll(rememberScrollState()),
horizontalAlignment = Alignment.CenterHorizontally,
) {
val content = stringResource(R.string.account_backup_tips_md)
@@ -5,11 +5,9 @@ import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Check
import androidx.compose.material.icons.filled.Close
@@ -80,58 +78,51 @@ fun ActivityScreen(
)
}
LazyColumn(
Modifier
.fillMaxHeight()
.fillMaxWidth(),
) {
items(activities.size) {
val activity = activities[it]
val permission =
Permission(
activity.type.toLowerCase(Locale.current),
activity.kind,
)
Column {
Row(
modifier = Modifier
.fillMaxSize()
.padding(vertical = 4.dp),
verticalAlignment = Alignment.CenterVertically,
activities.forEach { activity ->
val permission =
Permission(
activity.type.toLowerCase(Locale.current),
activity.kind,
)
Column {
Row(
modifier = Modifier
.fillMaxSize()
.padding(vertical = 4.dp),
verticalAlignment = Alignment.CenterVertically,
) {
Column(
modifier = Modifier.fillMaxWidth(0.9f),
verticalArrangement = Arrangement.Center,
) {
Column(
modifier = Modifier.fillMaxWidth(0.9f),
verticalArrangement = Arrangement.Center,
) {
Text(
modifier = Modifier.padding(top = 16.dp),
text = if (permission.type == "connect") stringResource(R.string.connect) else permission.toLocalizedString(context),
maxLines = 1,
overflow = TextOverflow.Ellipsis,
color = if (activity.accepted) Color.Unspecified else Color.Gray,
)
Text(
modifier = Modifier.padding(top = 16.dp),
text = if (permission.type == "connect") stringResource(R.string.connect) else permission.toLocalizedString(context),
maxLines = 1,
overflow = TextOverflow.Ellipsis,
color = if (activity.accepted) Color.Unspecified else Color.Gray,
)
Text(
modifier = Modifier.padding(top = 4.dp, bottom = 16.dp),
text = TimeUtils.formatLongToCustomDateTimeWithSeconds(activity.time * 1000),
fontSize = 16.sp,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
color = Color.Gray,
)
}
Icon(
if (activity.accepted) Icons.Default.Check else Icons.Default.Close,
contentDescription = if (activity.accepted) stringResource(R.string.accepted) else stringResource(R.string.rejected),
tint = if (activity.accepted) Color(0xFF1D8802) else Color(0xFFFF6B00),
modifier = Modifier.padding(start = 10.dp, top = 4.dp, bottom = 16.dp),
Text(
modifier = Modifier.padding(top = 4.dp, bottom = 16.dp),
text = TimeUtils.formatLongToCustomDateTimeWithSeconds(activity.time * 1000),
fontSize = 16.sp,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
color = Color.Gray,
)
}
Spacer(Modifier.weight(1f))
HorizontalDivider(
color = MaterialTheme.colorScheme.primary,
Icon(
if (activity.accepted) Icons.Default.Check else Icons.Default.Close,
contentDescription = if (activity.accepted) stringResource(R.string.accepted) else stringResource(R.string.rejected),
tint = if (activity.accepted) Color(0xFF1D8802) else Color(0xFFFF6B00),
modifier = Modifier.padding(start = 10.dp, top = 4.dp, bottom = 16.dp),
)
}
Spacer(Modifier.weight(1f))
HorizontalDivider(
color = MaterialTheme.colorScheme.primary,
)
}
}
}
@@ -5,9 +5,9 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
@@ -443,7 +443,7 @@ suspend fun onAddRelay(
@Composable
fun RelayLogScreen(
modifier: Modifier,
paddingValues: PaddingValues,
url: String,
) {
val context = LocalContext.current
@@ -455,7 +455,8 @@ fun RelayLogScreen(
val logs = flows.collectAsStateWithLifecycle(initialValue = emptyList())
LazyColumn(
modifier.fillMaxSize(),
Modifier.fillMaxSize(),
contentPadding = paddingValues,
) {
itemsIndexed(logs.value) { _, log ->
Row(
@@ -511,67 +512,55 @@ fun ActiveRelaysScreen(
}
}
Surface(
Column(
modifier = modifier
.fillMaxSize(),
) {
Column(
modifier = Modifier
.background(MaterialTheme.colorScheme.background)
.fillMaxSize(),
) {
LazyColumn(
Modifier
.fillMaxHeight(0.9f)
.fillMaxWidth(),
relays2.forEach { relay ->
Row(
modifier = Modifier
.fillMaxSize()
.padding(vertical = 4.dp)
.clickable {
navController.navigate(
"RelayLogScreen/${
Base64
.getEncoder()
.encodeToString(relay.url.toByteArray())
}",
)
},
verticalAlignment = Alignment.CenterVertically,
) {
items(relays2.size) {
Column(
verticalArrangement = Arrangement.Center,
) {
Text(
modifier = Modifier.padding(top = 16.dp),
text = relay.url,
fontSize = 24.sp,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
color = if (RelayPool.getRelay(relay.url)?.isConnected() == true) Color.Unspecified else Color.Gray,
)
Row(
modifier = Modifier
.fillMaxSize()
.padding(vertical = 4.dp)
.clickable {
navController.navigate(
"RelayLogScreen/${
Base64
.getEncoder()
.encodeToString(relays2[it].url.toByteArray())
}",
)
},
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
) {
Column(
verticalArrangement = Arrangement.Center,
) {
Text(
modifier = Modifier.padding(top = 16.dp),
text = relays2[it].url,
fontSize = 24.sp,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
color = if (RelayPool.getRelay(relays2[it].url)?.isConnected() == true) Color.Unspecified else Color.Gray,
)
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
) {
Text(
modifier = Modifier.padding(top = 4.dp, bottom = 16.dp),
text = if (RelayPool.getRelay(relays2[it].url)?.isConnected() == true) "${RelayStats.get(relays2[it].url).pingInMs}ms ping" else "Unavailable",
fontSize = 16.sp,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
color = if (RelayPool.getRelay(relays2[it].url)?.isConnected() == true) Color.Unspecified else Color.Gray,
)
}
Spacer(Modifier.weight(1f))
HorizontalDivider(
color = MaterialTheme.colorScheme.primary,
)
}
Text(
modifier = Modifier.padding(top = 4.dp, bottom = 16.dp),
text = if (RelayPool.getRelay(relay.url)?.isConnected() == true) "${RelayStats.get(relay.url).pingInMs}ms ping" else "Unavailable",
fontSize = 16.sp,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
color = if (RelayPool.getRelay(relay.url)?.isConnected() == true) Color.Unspecified else Color.Gray,
)
}
Spacer(Modifier.weight(1f))
HorizontalDivider(
color = MaterialTheme.colorScheme.primary,
)
}
}
}
@@ -2,11 +2,15 @@ package com.greenart7c3.nostrsigner.ui.components
import android.widget.Toast
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Card
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@@ -34,6 +38,7 @@ import kotlinx.coroutines.launch
@Composable
fun EncryptDecryptData(
paddingValues: PaddingValues,
content: String,
encryptedData: String,
shouldRunOnAccept: Boolean?,
@@ -55,7 +60,8 @@ fun EncryptDecryptData(
Column(
Modifier
.fillMaxSize()
.padding(8.dp),
.verticalScroll(rememberScrollState())
.padding(paddingValues),
) {
val message =
when (type) {
@@ -121,7 +127,7 @@ fun EncryptDecryptData(
RawJson(
content,
encryptedData,
Modifier.weight(1f),
Modifier.height(200.dp),
stringResource(R.string.encrypted_decrypted_data),
type,
) {
@@ -1,11 +1,15 @@
package com.greenart7c3.nostrsigner.ui.components
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Card
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@@ -32,6 +36,7 @@ import com.vitorpamplona.quartz.events.Event
@Composable
fun EventData(
paddingValues: PaddingValues,
shouldAcceptOrReject: Boolean?,
remember: MutableState<Boolean>,
packageName: String?,
@@ -51,7 +56,8 @@ fun EventData(
Column(
Modifier
.fillMaxSize()
.padding(8.dp),
.verticalScroll(rememberScrollState())
.padding(paddingValues),
) {
val permission = Permission("sign_event", event.kind)
val text = stringResource(R.string.wants_you_to_sign_a, permission.toLocalizedString(context))
@@ -106,7 +112,7 @@ fun EventData(
if (!showMore) stringResource(R.string.show_details) else stringResource(R.string.hide_details),
)
if (showMore) {
RawJson(rawJson, "", Modifier.weight(1f), type = type)
RawJson(rawJson, "", Modifier.height(200.dp), type = type)
} else {
Spacer(modifier = Modifier.weight(1f))
}
@@ -5,6 +5,7 @@ import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
@@ -49,6 +50,7 @@ import com.greenart7c3.nostrsigner.models.Permission
@Composable
fun LoginWithPubKey(
paddingValues: PaddingValues,
remember: MutableState<Boolean>,
isBunkerRequest: Boolean,
account: Account,
@@ -71,7 +73,8 @@ fun LoginWithPubKey(
Column(
Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState()),
.verticalScroll(rememberScrollState())
.padding(paddingValues),
) {
packageName?.let {
Text(
@@ -140,7 +143,8 @@ fun LoginWithPubKey(
Column(
Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState()),
.verticalScroll(rememberScrollState())
.padding(paddingValues),
) {
packageName?.let {
Text(
@@ -9,8 +9,8 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
@@ -78,6 +78,7 @@ import kotlinx.coroutines.launch
@Composable
fun MultiEventHomeScreen(
paddingValues: PaddingValues,
intents: List<IntentData>,
packageName: String?,
accountParam: Account,
@@ -115,8 +116,8 @@ fun MultiEventHomeScreen(
Column(
Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState()),
.verticalScroll(rememberScrollState())
.padding(paddingValues),
) {
Text(
stringResource(R.string.is_requiring_some_permissions_please_review_them, appName),
@@ -2,11 +2,15 @@ package com.greenart7c3.nostrsigner.ui.components
import android.widget.Toast
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Card
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@@ -34,6 +38,7 @@ import kotlinx.coroutines.launch
@Composable
fun SignMessage(
paddingValues: PaddingValues,
content: String,
shouldRunOnAccept: Boolean?,
remember: MutableState<Boolean>,
@@ -54,7 +59,8 @@ fun SignMessage(
Column(
Modifier
.fillMaxSize()
.padding(8.dp),
.verticalScroll(rememberScrollState())
.padding(paddingValues),
) {
val message = stringResource(R.string.sign_message)
@@ -112,7 +118,7 @@ fun SignMessage(
RawJson(
content,
"",
Modifier.weight(1f),
Modifier.height(200.dp),
stringResource(R.string.content),
type,
) {
@@ -3,6 +3,7 @@ package com.greenart7c3.nostrsigner.ui.components
import android.widget.Toast
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.size
@@ -48,6 +49,7 @@ import kotlinx.coroutines.launch
@Composable
fun SingleEventHomeScreen(
paddingValues: PaddingValues,
packageName: String?,
applicationName: String?,
intentData: IntentData,
@@ -95,6 +97,7 @@ fun SingleEventHomeScreen(
}
LoginWithPubKey(
paddingValues,
remember,
intentData.bunkerRequest != null && intentData.type == SignerType.GET_PUBLIC_KEY,
account,
@@ -180,6 +183,7 @@ fun SingleEventHomeScreen(
packageName
}
SignMessage(
paddingValues,
intentData.data,
permission?.acceptable,
remember,
@@ -211,6 +215,8 @@ fun SingleEventHomeScreen(
{
coroutineScope.launch(Dispatchers.IO) {
if (key == "null") {
context.getAppCompatActivity()?.intent = null
context.getAppCompatActivity()?.finish()
return@launch
}
@@ -314,6 +320,7 @@ fun SingleEventHomeScreen(
packageName
}
EncryptDecryptData(
paddingValues,
intentData.data,
intentData.encryptedData ?: "",
permission?.acceptable,
@@ -462,6 +469,7 @@ fun SingleEventHomeScreen(
packageName
}
EventData(
paddingValues,
permission?.acceptable,
remember,
localPackageName,
@@ -1,55 +0,0 @@
package com.greenart7c3.nostrsigner.ui.previews
import android.annotation.SuppressLint
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.greenart7c3.nostrsigner.models.SignerType
import com.greenart7c3.nostrsigner.models.TimeUtils
import com.greenart7c3.nostrsigner.ui.components.EventData
import com.greenart7c3.nostrsigner.ui.theme.NostrSignerTheme
import com.vitorpamplona.quartz.events.Event
@SuppressLint("UnusedMaterialScaffoldPaddingParameter")
@Preview(device = "id:Nexus S")
@Composable
fun EventDataPreview() {
val event =
Event(
"123",
"7579076d9aff0a4cfdefa7e2045f2486c7e5d8bc63bfc6b45397233e1bbfcb19",
TimeUtils.now(),
1,
arrayOf(),
"This is a test 123 123 123 123 123 123",
"",
)
val data = event.toJson()
val remember = remember { mutableStateOf(false) }
NostrSignerTheme(darkTheme = true) {
Scaffold {
Box(
Modifier.padding(it),
) {
EventData(
false,
remember,
null,
"App",
null,
event,
data,
SignerType.SIGN_EVENT,
{ },
{ },
)
}
}
}
}