From d529208103f89934e79da5e5523de2961cd649c4 Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Fri, 3 May 2024 12:24:15 -0300 Subject: [PATCH] refactor multieventhomescreen --- .../ui/components/MultiEventHomeScreen.kt | 130 ++++++++++-------- 1 file changed, 76 insertions(+), 54 deletions(-) diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/ui/components/MultiEventHomeScreen.kt b/app/src/main/java/com/greenart7c3/nostrsigner/ui/components/MultiEventHomeScreen.kt index 7a84448c..bc622abb 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/ui/components/MultiEventHomeScreen.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/ui/components/MultiEventHomeScreen.kt @@ -2,6 +2,7 @@ package com.greenart7c3.nostrsigner.ui.components import android.app.Activity import android.content.Intent +import androidx.appcompat.app.AppCompatActivity import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -69,6 +70,34 @@ import com.vitorpamplona.quartz.events.LnZapRequestEvent import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +@Composable +fun SelectAllButton( + checked: Boolean, + onSelected: () -> Unit, +) { + Row( + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically, + modifier = + Modifier + .padding(horizontal = 8.dp) + .clickable { + onSelected() + }, + ) { + Text( + modifier = Modifier.weight(1f), + text = stringResource(R.string.select_deselect_all), + ) + Switch( + checked = checked, + onCheckedChange = { + onSelected() + }, + ) + } +} + @Composable fun MultiEventHomeScreen( intents: List, @@ -86,32 +115,13 @@ fun MultiEventHomeScreen( var selectAll by remember { mutableStateOf(false) } - Row( - horizontalArrangement = Arrangement.SpaceBetween, - verticalAlignment = Alignment.CenterVertically, - modifier = - Modifier - .padding(horizontal = 8.dp) - .clickable { - selectAll = !selectAll - intents.forEach { - it.checked.value = selectAll - } - }, + SelectAllButton( + checked = selectAll, ) { - Text( - modifier = Modifier.weight(1f), - text = stringResource(R.string.select_deselect_all), - ) - Switch( - checked = selectAll, - onCheckedChange = { - selectAll = !selectAll - intents.forEach { - it.checked.value = selectAll - } - }, - ) + selectAll = !selectAll + intents.forEach { + it.checked.value = selectAll + } } LazyColumn( Modifier.fillMaxHeight(0.9f), @@ -120,7 +130,6 @@ fun MultiEventHomeScreen( ListItem( intents[it], packageName, - accountParam, intents, ) } @@ -140,24 +149,7 @@ fun MultiEventHomeScreen( try { val activity = context.getAppCompatActivity() val results = mutableListOf() - if (intents.any { it.bunkerRequest != null }) { - RelayPool.getAll().forEach { relay -> - if (!relay.isConnected() && !NotificationDataSource.isActive()) { - relay.connectAndRun { - val builder = OneTimeWorkRequest.Builder(RelayDisconnectService::class.java) - val inputData = Data.Builder() - inputData.putString("relay", relay.url) - builder.setInputData(inputData.build()) - WorkManager.getInstance(NostrSigner.instance).enqueue(builder.build()) - } - } - } - var count = 0 - while (RelayPool.getAll().any { !it.isReady() } && count < 10) { - count++ - Thread.sleep(1000) - } - } + reconnectToRelays(intents) for (intentData in intents) { val localAccount = @@ -248,19 +240,13 @@ fun MultiEventHomeScreen( } if (results.isNotEmpty()) { - val gson = GsonBuilder().serializeNulls().create() - val json = gson.toJson(results) - val intent = Intent() - intent.putExtra("results", json) - activity?.setResult(Activity.RESULT_OK, intent) + sendResultIntent(results, activity) } if (intents.any { it.bunkerRequest != null }) { EventNotificationConsumer(context).notificationManager().cancelAll() - activity?.intent = null - activity?.finish() + finishActivity(activity) } else { - activity?.intent = null - activity?.finish() + finishActivity(activity) } } finally { onLoading(false) @@ -274,11 +260,47 @@ fun MultiEventHomeScreen( } } +private fun finishActivity(activity: AppCompatActivity?) { + activity?.intent = null + activity?.finish() +} + +private fun sendResultIntent( + results: MutableList, + activity: AppCompatActivity?, +) { + val gson = GsonBuilder().serializeNulls().create() + val json = gson.toJson(results) + val intent = Intent() + intent.putExtra("results", json) + activity?.setResult(Activity.RESULT_OK, intent) +} + +private fun reconnectToRelays(intents: List) { + if (!intents.any { it.bunkerRequest != null }) return + + RelayPool.getAll().forEach { relay -> + if (!relay.isConnected() && !NotificationDataSource.isActive()) { + relay.connectAndRun { + val builder = OneTimeWorkRequest.Builder(RelayDisconnectService::class.java) + val inputData = Data.Builder() + inputData.putString("relay", relay.url) + builder.setInputData(inputData.build()) + WorkManager.getInstance(NostrSigner.instance).enqueue(builder.build()) + } + } + } + var count = 0 + while (RelayPool.getAll().any { !it.isReady() } && count < 10) { + count++ + Thread.sleep(1000) + } +} + @Composable fun ListItem( intentData: IntentData, packageName: String?, - accountParam: Account, intents: List, ) { var isExpanded by remember { mutableStateOf(false) }