change linter rules

This commit is contained in:
greenart7c3
2024-05-08 08:13:46 -03:00
parent 62e24a6384
commit 0f021d19a5
35 changed files with 622 additions and 723 deletions
+3 -1
View File
@@ -12,7 +12,9 @@ ij_kotlin_name_count_to_use_star_import = 999
ij_kotlin_name_count_to_use_star_import_for_members = 999
max_line_length = off
ktlint_function_naming_ignore_when_annotated_with = Composable
ktlint_code_style = ktlint_official
ktlint_code_style = android_studio
ij_kotlin_allow_trailing_comma_on_call_site = true
ij_kotlin_allow_trailing_comma = true
[*.{yml,yaml}]
indent_size = 2
@@ -17,11 +17,11 @@ import com.vitorpamplona.quartz.encoders.hexToByteArray
import com.vitorpamplona.quartz.encoders.toHexKey
import com.vitorpamplona.quartz.encoders.toNpub
import fr.acinq.secp256k1.jni.BuildConfig
import java.io.File
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext
import org.json.JSONObject
import java.io.File
// Release mode (!BuildConfig.DEBUG) always uses encrypted preferences
// To use plaintext SharedPreferences for debugging, set this to true
@@ -61,13 +61,11 @@ data class BunkerRequest(
return BunkerRequest(
id = jsonObject.get("id").asText().intern(),
method = jsonObject.get("method").asText().intern(),
params =
jsonObject.get("params").asIterable().toList().map {
params = jsonObject.get("params").asIterable().toList().map {
it.asText().intern()
}.toTypedArray(),
localKey = jsonObject.get("localKey")?.asText()?.intern() ?: "",
relays =
jsonObject.get("relays")?.asIterable()?.toList()?.map {
relays = jsonObject.get("relays")?.asIterable()?.toList()?.map {
it.asText().intern()
} ?: listOf(),
secret = jsonObject.get("secret")?.asText()?.intern() ?: "",
@@ -24,12 +24,12 @@ import android.util.Log
import com.greenart7c3.nostrsigner.checkNotInMainThread
import com.vitorpamplona.quartz.events.Event
import com.vitorpamplona.quartz.events.EventInterface
import java.util.UUID
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import java.util.UUID
/**
* The Nostr Client manages multiple personae the user may switch between. Events are received and
@@ -30,12 +30,12 @@ import com.vitorpamplona.quartz.events.EventInterface
import com.vitorpamplona.quartz.events.RelayAuthEvent
import com.vitorpamplona.quartz.events.bytesUsedInMemory
import com.vitorpamplona.quartz.utils.TimeUtils
import java.util.concurrent.atomic.AtomicBoolean
import kotlinx.coroutines.CancellationException
import okhttp3.Request
import okhttp3.Response
import okhttp3.WebSocket
import okhttp3.WebSocketListener
import java.util.concurrent.atomic.AtomicBoolean
enum class FeedType {
FOLLOWS,
@@ -152,8 +152,7 @@ object AmberUtils {
database
.applicationDao()
.getByKey(key) ?: ApplicationWithPermissions(
application =
ApplicationEntity(
application = ApplicationEntity(
key,
appName,
listOf(),
@@ -21,6 +21,7 @@
package com.greenart7c3.nostrsigner.service
import androidx.compose.runtime.Stable
import java.util.concurrent.atomic.AtomicBoolean
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@@ -30,7 +31,6 @@ import kotlinx.coroutines.cancel
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.util.concurrent.atomic.AtomicBoolean
/** This class is designed to have a waiting time between two calls of invalidate */
@Stable
@@ -22,15 +22,15 @@ package com.greenart7c3.nostrsigner.service
import android.util.Log
import com.greenart7c3.nostrsigner.BuildConfig
import okhttp3.Interceptor
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
import java.io.IOException
import java.net.InetSocketAddress
import java.net.Proxy
import java.time.Duration
import kotlin.properties.Delegates
import okhttp3.Interceptor
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
object HttpClientManager {
val DEFAULT_TIMEOUT_ON_WIFI: Duration = Duration.ofSeconds(10L)
@@ -32,14 +32,14 @@ import com.vitorpamplona.quartz.encoders.toHexKey
import com.vitorpamplona.quartz.encoders.toNpub
import com.vitorpamplona.quartz.events.Event
import fr.acinq.secp256k1.Hex
import java.net.URLDecoder
import java.util.UUID
import java.util.concurrent.ConcurrentHashMap
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import java.net.URLDecoder
import java.util.UUID
import java.util.concurrent.ConcurrentHashMap
data class BunkerMetadata(
val name: String,
@@ -27,12 +27,12 @@ import com.greenart7c3.nostrsigner.relays.Relay
import com.greenart7c3.nostrsigner.relays.Subscription
import com.vitorpamplona.quartz.events.Event
import com.vitorpamplona.quartz.utils.TimeUtils
import java.util.UUID
import java.util.concurrent.atomic.AtomicBoolean
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.launch
import java.util.UUID
import java.util.concurrent.atomic.AtomicBoolean
abstract class NostrDataSource(val debugName: String) {
private val scope = CoroutineScope(Dispatchers.IO + SupervisorJob())
@@ -59,8 +59,7 @@ object NotificationDataSource : NostrDataSource("AccountData") {
return TypedFilter(
types = setOf(FeedType.FOLLOWS),
filter =
JsonFilter(
filter = JsonFilter(
kinds = listOf(24133),
tags = mapOf("p" to pubKeys),
limit = 1,
@@ -38,8 +38,7 @@ open class AmberEvent(
pubKey = jsonObject.get("pubkey")?.asString ?: "",
createdAt = jsonObject.get("created_at")?.asLong ?: TimeUtils.now(),
kind = jsonObject.get("kind").asInt,
tags =
jsonObject.get("tags")?.asJsonArray?.map {
tags = jsonObject.get("tags")?.asJsonArray?.map {
it.asJsonArray.mapNotNull { s -> if (s.isJsonNull) null else s.asString }.toTypedArray()
}?.toTypedArray() ?: emptyArray(),
content = jsonObject.get("content").asString,
@@ -74,13 +74,13 @@ import com.greenart7c3.nostrsigner.ui.components.PostButton
import com.greenart7c3.nostrsigner.ui.navigation.Route
import com.vitorpamplona.quartz.encoders.toHexKey
import com.vitorpamplona.quartz.encoders.toNpub
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.time.Instant
import java.time.LocalDateTime
import java.time.ZoneId
import java.time.format.DateTimeFormatter
import java.time.format.FormatStyle
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
fun convertLongToDateTime(longValue: Long): String {
val dateTime =
@@ -128,14 +128,12 @@ fun ActivityDialog(
.fillMaxSize(),
) {
Column(
modifier =
Modifier
modifier = Modifier
.background(MaterialTheme.colorScheme.background)
.fillMaxSize(),
) {
Row(
modifier =
Modifier
modifier = Modifier
.fillMaxWidth()
.padding(10.dp),
horizontalArrangement = Arrangement.SpaceBetween,
@@ -273,19 +271,16 @@ fun EditPermission(
properties = DialogProperties(usePlatformDefaultWidth = false),
) {
Surface(
modifier =
Modifier
modifier = Modifier
.fillMaxSize(),
) {
Column(
modifier =
Modifier
modifier = Modifier
.background(MaterialTheme.colorScheme.background)
.fillMaxSize(),
) {
Row(
modifier =
Modifier
modifier = Modifier
.fillMaxWidth()
.padding(10.dp),
horizontalArrangement = Arrangement.SpaceBetween,
@@ -345,13 +340,11 @@ fun EditPermission(
) {
OutlinedTextField(
enabled = !applicationData.isConnected,
modifier =
Modifier
modifier = Modifier
.fillMaxWidth(0.9f)
.padding(horizontal = 16.dp),
value = textFieldRelay.text,
keyboardOptions =
KeyboardOptions(
keyboardOptions = KeyboardOptions(
imeAction = ImeAction.Done,
),
onValueChange = {
@@ -500,8 +493,7 @@ fun EditPermission(
Row(
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically,
modifier =
Modifier
modifier = Modifier
.padding(horizontal = 8.dp)
.clickable {
checked = !checked
@@ -523,13 +515,11 @@ fun EditPermission(
}
}
OutlinedTextField(
modifier =
Modifier
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp),
value = textFieldvalue.text,
keyboardOptions =
KeyboardOptions(
keyboardOptions = KeyboardOptions(
imeAction = ImeAction.Done,
),
onValueChange = {
@@ -590,16 +580,14 @@ fun EditPermission(
localPermission.toString()
}
Row(
modifier =
Modifier
modifier = Modifier
.padding(vertical = 15.dp, horizontal = 25.dp)
.fillMaxWidth(),
) {
Icon(
if (permission.acceptable) Icons.Default.Check else Icons.Default.Close,
null,
modifier =
Modifier
modifier = Modifier
.size(22.dp)
.padding(end = 4.dp)
.clickable {
@@ -617,8 +605,7 @@ fun EditPermission(
tint = if (permission.acceptable) Color.Green else Color.Red,
)
Row(
modifier =
Modifier
modifier = Modifier
.weight(1f),
verticalAlignment = Alignment.CenterVertically,
) {
@@ -630,8 +617,7 @@ fun EditPermission(
Icon(
Icons.Default.Delete,
null,
modifier =
Modifier
modifier = Modifier
.size(22.dp)
.clickable {
permissions.remove(permission)
@@ -84,8 +84,7 @@ fun LoginPage(accountViewModel: AccountStateViewModel) {
val scope = rememberCoroutineScope()
Column(
modifier =
Modifier
modifier = Modifier
.fillMaxSize()
.navigationBarsPadding()
.verticalScroll(rememberScrollState()),
@@ -97,8 +96,7 @@ fun LoginPage(accountViewModel: AccountStateViewModel) {
// The second child, this column, is centered vertically.
Column(
modifier =
Modifier
modifier = Modifier
.padding(20.dp)
.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
@@ -128,8 +126,7 @@ fun LoginPage(accountViewModel: AccountStateViewModel) {
LocalAutofillTree.current += autofillNodePassword
OutlinedTextField(
modifier =
Modifier
modifier = Modifier
.onGloballyPositioned { coordinates ->
autofillNodeKey.boundingBox = coordinates.boundsInWindow()
}
@@ -144,8 +141,7 @@ fun LoginPage(accountViewModel: AccountStateViewModel) {
},
value = key.value,
onValueChange = { key.value = it },
keyboardOptions =
KeyboardOptions(
keyboardOptions = KeyboardOptions(
autoCorrect = false,
keyboardType = KeyboardType.Password,
imeAction = ImeAction.Go,
@@ -160,8 +156,7 @@ fun LoginPage(accountViewModel: AccountStateViewModel) {
IconButton(onClick = { showPassword = !showPassword }) {
Icon(
imageVector = if (showPassword) Icons.Outlined.VisibilityOff else Icons.Outlined.Visibility,
contentDescription =
if (showPassword) {
contentDescription = if (showPassword) {
stringResource(R.string.show_password)
} else {
stringResource(R.string.hide_password)
@@ -189,8 +184,7 @@ fun LoginPage(accountViewModel: AccountStateViewModel) {
}
},
visualTransformation = if (showPassword) VisualTransformation.None else PasswordVisualTransformation(),
keyboardActions =
KeyboardActions(
keyboardActions = KeyboardActions(
onGo = {
if (key.value.text.isBlank()) {
errorMessage = context.getString(R.string.key_is_required)
@@ -229,8 +223,7 @@ fun LoginPage(accountViewModel: AccountStateViewModel) {
if (needsPassword.value) {
OutlinedTextField(
modifier =
Modifier
modifier = Modifier
.onGloballyPositioned { coordinates ->
autofillNodePassword.boundingBox = coordinates.boundsInWindow()
}
@@ -250,8 +243,7 @@ fun LoginPage(accountViewModel: AccountStateViewModel) {
errorMessage = ""
}
},
keyboardOptions =
KeyboardOptions(
keyboardOptions = KeyboardOptions(
autoCorrect = false,
keyboardType = KeyboardType.Password,
imeAction = ImeAction.Go,
@@ -265,10 +257,8 @@ fun LoginPage(accountViewModel: AccountStateViewModel) {
Row {
IconButton(onClick = { showCharsPassword = !showCharsPassword }) {
Icon(
imageVector =
if (showCharsPassword) Icons.Outlined.VisibilityOff else Icons.Outlined.Visibility,
contentDescription =
if (showCharsPassword) {
imageVector = if (showCharsPassword) Icons.Outlined.VisibilityOff else Icons.Outlined.Visibility,
contentDescription = if (showCharsPassword) {
stringResource(R.string.show_password)
} else {
stringResource(
@@ -279,10 +269,8 @@ fun LoginPage(accountViewModel: AccountStateViewModel) {
}
}
},
visualTransformation =
if (showCharsPassword) VisualTransformation.None else PasswordVisualTransformation(),
keyboardActions =
KeyboardActions(
visualTransformation = if (showCharsPassword) VisualTransformation.None else PasswordVisualTransformation(),
keyboardActions = KeyboardActions(
onGo = {
if (key.value.text.isBlank()) {
errorMessage = context.getString(R.string.key_is_required)
@@ -381,8 +369,7 @@ fun LoginPage(accountViewModel: AccountStateViewModel) {
}
},
shape = RoundedCornerShape(Size35dp),
modifier =
Modifier
modifier = Modifier
.fillMaxWidth()
.height(50.dp),
) {
@@ -393,8 +380,7 @@ fun LoginPage(accountViewModel: AccountStateViewModel) {
Spacer(modifier = Modifier.height(10.dp))
TextButton(
modifier =
Modifier
modifier = Modifier
.padding(30.dp)
.fillMaxWidth(),
onClick = {
@@ -107,14 +107,14 @@ import com.greenart7c3.nostrsigner.ui.navigation.Route
import com.greenart7c3.nostrsigner.ui.theme.ButtonBorder
import com.vitorpamplona.quartz.encoders.toHexKey
import com.vitorpamplona.quartz.encoders.toNpub
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import java.io.ByteArrayOutputStream
import java.util.Base64
import java.util.UUID
import java.util.zip.GZIPOutputStream
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
@OptIn(DelicateCoroutinesApi::class)
fun sendResult(
@@ -179,8 +179,7 @@ fun sendResult(
val application =
savedApplication ?: ApplicationWithPermissions(
application =
ApplicationEntity(
application = ApplicationEntity(
key,
appName ?: localAppName ?: "",
relays,
@@ -436,8 +435,7 @@ fun PermissionsFloatingActionButton(
val rotation by animateFloatAsState(
targetValue = if (expanded) 0f else 180f,
animationSpec =
tween(
animationSpec = tween(
durationMillis = 150,
easing = LinearEasing,
),
@@ -732,8 +730,7 @@ fun MainScreen(
Route.Permissions.route,
content = {
PermissionsScreen(
modifier =
Modifier
modifier = Modifier
.fillMaxSize()
.padding(padding),
account = account,
@@ -40,8 +40,7 @@ fun QrCodeDrawer(
val foregroundColor = Color.Black
Box(
modifier =
modifier
modifier = modifier
.defaultMinSize(48.dp, 48.dp)
.aspectRatio(1f)
.background(Color.White),
@@ -55,8 +54,7 @@ fun QrCodeDrawer(
// of the number of rows/columns to the width and height
drawQrCodeFinders(
sideLength = size.width,
finderPatternSize =
Size(
finderPatternSize = Size(
width = columnWidth * FINDER_PATTERN_ROW_COUNT,
height = rowHeight * FINDER_PATTERN_ROW_COUNT,
),
@@ -66,8 +64,7 @@ fun QrCodeDrawer(
// Draw data bits (encoded data part)
drawAllQrCodeDataBits(
bytes = qrCode.matrix,
size =
Size(
size = Size(
width = columnWidth,
height = rowHeight,
),
@@ -108,8 +105,7 @@ fun DrawScope.drawAllQrCodeDataBits(
// data bits between top left finder pattern and top right finder pattern.
Pair(
first = Coordinate(first = FINDER_PATTERN_ROW_COUNT, second = 0),
second =
Coordinate(
second = Coordinate(
first = (bytes.width - FINDER_PATTERN_ROW_COUNT),
second = FINDER_PATTERN_ROW_COUNT,
),
@@ -117,21 +113,18 @@ fun DrawScope.drawAllQrCodeDataBits(
// data bits below top left finder pattern and above bottom left finder pattern.
Pair(
first = Coordinate(first = 0, second = FINDER_PATTERN_ROW_COUNT),
second =
Coordinate(
second = Coordinate(
first = bytes.width,
second = bytes.height - FINDER_PATTERN_ROW_COUNT,
),
),
// data bits to the right of the bottom left finder pattern.
Pair(
first =
Coordinate(
first = Coordinate(
first = FINDER_PATTERN_ROW_COUNT,
second = (bytes.height - FINDER_PATTERN_ROW_COUNT),
),
second =
Coordinate(
second = Coordinate(
first = bytes.width,
second = bytes.height,
),
@@ -142,8 +135,7 @@ fun DrawScope.drawAllQrCodeDataBits(
if (bytes[x, y] == 1.toByte()) {
drawPath(
color = color,
path =
newPath {
path = newPath {
addRect(
rect =
Rect(
@@ -210,8 +202,7 @@ private fun DrawScope.drawQrCodeFinder(
) {
drawPath(
color = color,
path =
newPath {
path = newPath {
// Draw the outer rectangle for the finder pattern.
addRoundRect(
roundRect =
@@ -70,6 +70,7 @@ import com.greenart7c3.nostrsigner.ui.components.PostButton
import com.greenart7c3.nostrsigner.ui.components.TextSpinner
import com.greenart7c3.nostrsigner.ui.components.TitleExplainer
import com.vitorpamplona.quartz.encoders.toNpub
import java.io.IOException
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.ImmutableMap
import kotlinx.collections.immutable.persistentListOf
@@ -79,7 +80,6 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.xmlpull.v1.XmlPullParser
import org.xmlpull.v1.XmlPullParserException
import java.io.IOException
fun Context.getLocaleListFromXml(): LocaleListCompat {
val tagsList = mutableListOf<CharSequence>()
@@ -377,8 +377,7 @@ fun SettingsScreen(
.padding(16.dp),
) {
IconRow(
title =
if (checked) {
title = if (checked) {
stringResource(R.string.disconnect_from_your_orbot_setup)
} else {
stringResource(R.string.connect_via_tor_short)
@@ -408,13 +407,11 @@ fun SettingsScreen(
fullText = "v${BuildConfig.VERSION_NAME}\n\n${context.getString(
R.string.support_development,
)}\n\n${context.getString(R.string.source_code)}",
hyperLinks =
mutableMapOf(
hyperLinks = mutableMapOf(
stringResource(R.string.source_code) to stringResource(R.string.amber_github_uri),
stringResource(R.string.support_development) to stringResource(R.string.support_development_uri),
),
textStyle =
TextStyle(
textStyle = TextStyle(
textAlign = TextAlign.Center,
color = MaterialTheme.colorScheme.inverseSurface,
),
@@ -512,8 +509,7 @@ fun SettingsRow(
placeholder = selectedItems[selectedIndex].title,
options = selectedItems,
onSelect = onSelect,
modifier =
Modifier
modifier = Modifier
.windowInsetsPadding(WindowInsets(0.dp, 0.dp, 0.dp, 0.dp))
.weight(1f),
)
@@ -168,8 +168,7 @@ fun AccountBackupDialog(
LocalAutofillTree.current += autofillNode
OutlinedTextField(
modifier =
Modifier
modifier = Modifier
.onGloballyPositioned { coordinates ->
autofillNode.boundingBox = coordinates.boundsInWindow()
}
@@ -189,8 +188,7 @@ fun AccountBackupDialog(
errorMessage = ""
}
},
keyboardOptions =
KeyboardOptions(
keyboardOptions = KeyboardOptions(
autoCorrect = false,
keyboardType = KeyboardType.Password,
imeAction = ImeAction.Go,
@@ -204,10 +202,8 @@ fun AccountBackupDialog(
Row {
IconButton(onClick = { showCharsPassword = !showCharsPassword }) {
Icon(
imageVector =
if (showCharsPassword) Icons.Outlined.VisibilityOff else Icons.Outlined.Visibility,
contentDescription =
if (showCharsPassword) {
imageVector = if (showCharsPassword) Icons.Outlined.VisibilityOff else Icons.Outlined.Visibility,
contentDescription = if (showCharsPassword) {
stringResource(R.string.show_password)
} else {
stringResource(
@@ -218,8 +214,7 @@ fun AccountBackupDialog(
}
}
},
visualTransformation =
if (showCharsPassword) VisualTransformation.None else PasswordVisualTransformation(),
visualTransformation = if (showCharsPassword) VisualTransformation.None else PasswordVisualTransformation(),
)
if (errorMessage.isNotBlank()) {
@@ -311,14 +306,12 @@ fun QrCodeDialog(
) {
Surface(modifier = Modifier.fillMaxSize()) {
Column(
modifier =
Modifier
modifier = Modifier
.background(MaterialTheme.colorScheme.background)
.fillMaxSize(),
) {
Row(
modifier =
Modifier
modifier = Modifier
.fillMaxWidth()
.padding(10.dp),
horizontalArrangement = Arrangement.SpaceBetween,
@@ -328,8 +321,7 @@ fun QrCodeDialog(
}
Column(
modifier =
Modifier
modifier = Modifier
.fillMaxSize()
.padding(horizontal = 30.dp),
horizontalAlignment = Alignment.CenterHorizontally,
@@ -337,8 +329,7 @@ fun QrCodeDialog(
) {
Row(
horizontalArrangement = Arrangement.Center,
modifier =
Modifier
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = Size35dp),
) {
@@ -452,8 +443,7 @@ private fun EncryptNSecCopyButton(
)
},
shape = ButtonBorder,
colors =
ButtonDefaults.buttonColors(
colors = ButtonDefaults.buttonColors(
containerColor = MaterialTheme.colorScheme.primary,
),
contentPadding = PaddingValues(vertical = 6.dp, horizontal = 16.dp),
@@ -462,8 +452,7 @@ private fun EncryptNSecCopyButton(
Icon(
tint = MaterialTheme.colorScheme.onPrimary,
imageVector = Icons.Default.Key,
contentDescription =
stringResource(R.string.copies_the_nsec_id_your_password_to_the_clipboard_for_backup),
contentDescription = stringResource(R.string.copies_the_nsec_id_your_password_to_the_clipboard_for_backup),
modifier = Modifier.padding(end = 5.dp),
)
Text(
@@ -521,8 +510,7 @@ private fun EncryptNSecQRButton(
)
},
shape = ButtonBorder,
colors =
ButtonDefaults.buttonColors(
colors = ButtonDefaults.buttonColors(
containerColor = MaterialTheme.colorScheme.primary,
),
contentPadding = PaddingValues(vertical = 6.dp, horizontal = 16.dp),
@@ -531,8 +519,7 @@ private fun EncryptNSecQRButton(
Icon(
tint = MaterialTheme.colorScheme.onPrimary,
imageVector = Icons.Default.QrCode,
contentDescription =
stringResource(R.string.shows_qr_code_with_you_private_key),
contentDescription = stringResource(R.string.shows_qr_code_with_you_private_key),
modifier = Modifier.padding(end = 5.dp),
)
Text(
@@ -76,8 +76,7 @@ fun AccountsBottomSheet(
Column(modifier = Modifier.verticalScroll(scrollState)) {
Row(
modifier =
Modifier
modifier = Modifier
.fillMaxWidth()
.padding(16.dp),
horizontalArrangement = Arrangement.Center,
@@ -88,8 +87,7 @@ fun AccountsBottomSheet(
accounts.forEach { acc ->
val name = LocalPreferences.getAccountName(acc.npub)
Row(
modifier =
Modifier
modifier = Modifier
.fillMaxWidth()
.clickable {
accountStateViewModel.switchUser(acc.npub, null)
@@ -146,8 +144,7 @@ fun AccountsBottomSheet(
}
}
Row(
modifier =
Modifier
modifier = Modifier
.fillMaxWidth()
.padding(16.dp),
horizontalArrangement = Arrangement.Center,
@@ -202,15 +199,13 @@ fun EditAccountDialog(
) {
Surface {
Column(
modifier =
Modifier
modifier = Modifier
.background(MaterialTheme.colorScheme.background)
.fillMaxWidth()
.padding(8.dp),
) {
Row(
modifier =
Modifier
modifier = Modifier
.fillMaxWidth()
.padding(10.dp),
horizontalArrangement = Arrangement.SpaceBetween,
@@ -230,8 +225,7 @@ fun EditAccountDialog(
}
Column(
modifier =
Modifier
modifier = Modifier
.padding(horizontal = 30.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center,
@@ -47,14 +47,12 @@ fun AdjustPermissionsDialog(
) {
Surface(modifier = Modifier.fillMaxSize()) {
Column(
modifier =
Modifier
modifier = Modifier
.background(MaterialTheme.colorScheme.background)
.fillMaxSize(),
) {
Row(
modifier =
Modifier
modifier = Modifier
.fillMaxWidth()
.padding(10.dp),
horizontalArrangement = Arrangement.SpaceBetween,
@@ -75,8 +73,7 @@ fun AdjustPermissionsDialog(
Row(
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically,
modifier =
Modifier
modifier = Modifier
.padding(horizontal = 8.dp)
.clickable {
selectAll = !selectAll
@@ -110,8 +107,7 @@ fun AdjustPermissionsDialog(
Row(
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically,
modifier =
Modifier
modifier = Modifier
.clickable {
dialogPermissions =
dialogPermissions.mapIndexed { j, item ->
@@ -107,8 +107,7 @@ fun ConnectOrbotDialog(
) {
val myMarkDownStyle =
RichTextDefaults.copy(
stringStyle =
RichTextDefaults.stringStyle?.copy(
stringStyle = RichTextDefaults.stringStyle?.copy(
linkStyle =
SpanStyle(
textDecoration = TextDecoration.Underline,
@@ -142,8 +141,7 @@ fun ConnectOrbotDialog(
OutlinedTextField(
value = portNumber.value,
onValueChange = { portNumber.value = it },
keyboardOptions =
KeyboardOptions.Default.copy(
keyboardOptions = KeyboardOptions.Default.copy(
capitalization = KeyboardCapitalization.None,
keyboardType = KeyboardType.Number,
),
@@ -175,8 +173,7 @@ fun UseOrbotButton(
}
},
shape = ButtonBorder,
colors =
ButtonDefaults.buttonColors(
colors = ButtonDefaults.buttonColors(
containerColor = if (isActive) MaterialTheme.colorScheme.primary else Color.Gray,
),
) {
@@ -18,8 +18,7 @@ fun LogoutDialog(
},
text = {
Text(
text =
stringResource(
text = stringResource(
R.string.logging_out_deletes_all_your_local_information_make_sure_to_have_your_private_keys_backed_up_to_avoid_losing_your_account_do_you_want_to_continue,
),
)
@@ -31,8 +31,7 @@ fun AcceptRejectButtons(
Button(
shape = ButtonBorder,
onClick = onReject,
colors =
ButtonDefaults.buttonColors(
colors = ButtonDefaults.buttonColors(
containerColor = Color(0xFF5A5554),
),
) {
@@ -77,8 +77,7 @@ fun EncryptDecryptData(
Spacer(Modifier.size(4.dp))
if (!type.toString().contains("DECRYPT")) {
Card(
modifier =
Modifier
modifier = Modifier
.fillMaxWidth(),
) {
Column(Modifier.padding(6.dp)) {
@@ -91,8 +90,7 @@ fun EncryptDecryptData(
content,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
modifier =
Modifier
modifier = Modifier
.fillMaxWidth()
.padding(top = 8.dp),
)
@@ -66,8 +66,7 @@ fun EventData(
val content = if (event.kind == 22242) AmberEvent.relay(event) else event.content
if (content.isNotBlank()) {
Card(
modifier =
Modifier
modifier = Modifier
.fillMaxWidth(),
) {
Column(Modifier.padding(16.dp)) {
@@ -79,8 +78,7 @@ fun EventData(
content,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
modifier =
Modifier
modifier = Modifier
.fillMaxWidth()
.padding(top = 8.dp),
)
@@ -30,8 +30,7 @@ fun HyperlinkText(
val startIndex = fullText.indexOf(key)
val endIndex = startIndex + key.length
addStyle(
style =
SpanStyle(
style = SpanStyle(
color = linkTextColor,
fontSize = fontSize,
fontWeight = linkTextFontWeight,
@@ -48,8 +47,7 @@ fun HyperlinkText(
)
}
addStyle(
style =
SpanStyle(
style = SpanStyle(
fontSize = fontSize,
),
start = 0,
@@ -28,8 +28,7 @@ fun IconRow(
onLongClick: (() -> Unit)? = null,
) {
Row(
modifier =
Modifier
modifier = Modifier
.fillMaxWidth()
.combinedClickable(
onClick = onClick,
@@ -37,8 +36,7 @@ fun IconRow(
),
) {
Row(
modifier =
Modifier
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 15.dp, horizontal = 25.dp),
verticalAlignment = Alignment.CenterVertically,
@@ -70,8 +68,7 @@ fun IconRow(
onLongClick: (() -> Unit)? = null,
) {
Row(
modifier =
Modifier
modifier = Modifier
.fillMaxWidth()
.combinedClickable(
onClick = onClick,
@@ -79,8 +76,7 @@ fun IconRow(
),
) {
Row(
modifier =
Modifier
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 15.dp, horizontal = 25.dp),
verticalAlignment = Alignment.CenterVertically,
@@ -141,8 +141,7 @@ fun LoginWithPubKey(
onClick = {
showAdjustDialog = true
},
modifier =
Modifier
modifier = Modifier
.padding(8.dp),
) {
Text(text = stringResource(R.string.adjust))
@@ -151,8 +150,7 @@ fun LoginWithPubKey(
}
Button(
modifier =
Modifier
modifier = Modifier
.fillMaxWidth(0.8f)
.padding(8.dp),
shape = ButtonBorder,
@@ -169,8 +167,7 @@ fun LoginWithPubKey(
.padding(8.dp),
shape = ButtonBorder,
onClick = onReject,
colors =
ButtonDefaults.buttonColors(
colors = ButtonDefaults.buttonColors(
containerColor = Color(0xFF5A5554),
),
) {
@@ -83,8 +83,7 @@ fun SelectAllButton(
Row(
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically,
modifier =
Modifier
modifier = Modifier
.padding(horizontal = 8.dp)
.clickable {
onSelected()
@@ -188,8 +187,7 @@ fun MultiEventHomeScreen(
database
.applicationDao()
.getByKey(key) ?: ApplicationWithPermissions(
application =
ApplicationEntity(
application = ApplicationEntity(
key,
applicationEntity?.application?.name?.ifBlank { applicationEntity.application.key.toShortenHex() } ?: "",
listOf(),
@@ -260,8 +258,7 @@ fun MultiEventHomeScreen(
database
.applicationDao()
.getByKey(key) ?: ApplicationWithPermissions(
application =
ApplicationEntity(
application = ApplicationEntity(
key,
applicationEntity?.application?.name?.ifBlank { applicationEntity.application.key.toShortenHex() } ?: "",
listOf(),
@@ -408,8 +405,7 @@ fun ListItem(
Row(
verticalAlignment = Alignment.CenterVertically,
modifier =
Modifier
modifier = Modifier
.fillMaxWidth()
.padding(4.dp),
) {
@@ -436,8 +432,7 @@ fun ListItem(
}
Text(
modifier = Modifier.weight(1f),
text =
buildAnnotatedString {
text = buildAnnotatedString {
withStyle(style = SpanStyle(fontWeight = FontWeight.Bold)) {
append(appName)
}
@@ -476,8 +471,7 @@ fun ListItem(
content,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
modifier =
Modifier
modifier = Modifier
.fillMaxWidth()
.padding(top = 8.dp),
)
@@ -41,8 +41,7 @@ fun RawJson(
}
OutlinedTextField(
modifier =
modifier
modifier = modifier
.fillMaxWidth(),
value = TextFieldValue(currentContent),
onValueChange = { },
@@ -29,8 +29,7 @@ fun RememberMyChoice(
Row(
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically,
modifier =
Modifier
modifier = Modifier
.clickable {
onChanged()
},
@@ -142,8 +142,7 @@ fun SingleEventHomeScreen(
val relays = intentData.bunkerRequest?.relays ?: listOf()
val application =
savedApplication ?: ApplicationWithPermissions(
application =
ApplicationEntity(
application = ApplicationEntity(
key,
appName,
relays,
@@ -264,8 +263,7 @@ fun SingleEventHomeScreen(
val relays = intentData.bunkerRequest?.relays ?: listOf()
val application =
savedApplication ?: ApplicationWithPermissions(
application =
ApplicationEntity(
application = ApplicationEntity(
key,
appName,
relays,
@@ -417,8 +415,7 @@ fun SingleEventHomeScreen(
val relays = intentData.bunkerRequest?.relays ?: listOf()
val application =
savedApplication ?: ApplicationWithPermissions(
application =
ApplicationEntity(
application = ApplicationEntity(
key,
appName,
relays,
@@ -102,8 +102,7 @@ fun TextSpinner(
remember { Modifier.fillMaxWidth().focusRequester(focusRequester) },
)
Box(
modifier =
Modifier.matchParentSize().clickable(
modifier = Modifier.matchParentSize().clickable(
interactionSource = interactionSource,
indication = null,
) {
@@ -9,8 +9,7 @@ import androidx.compose.ui.unit.sp
// Set of Material typography styles to start with
val Typography =
Typography(
bodyLarge =
TextStyle(
bodyLarge = TextStyle(
fontFamily = FontFamily.Default,
fontWeight = FontWeight.Normal,
fontSize = 16.sp,
@@ -9,12 +9,12 @@ import com.greenart7c3.nostrsigner.LocalPreferences
import com.greenart7c3.nostrsigner.service.NotificationUtils.getOrCreateDMChannel
import com.vitorpamplona.quartz.events.Event
import com.vitorpamplona.quartz.events.GiftWrapEvent
import kotlin.time.measureTimedValue
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.cancel
import kotlinx.coroutines.launch
import kotlin.time.measureTimedValue
class Notifications : FirebaseMessagingService() {
private val scope = CoroutineScope(Dispatchers.IO + SupervisorJob())