rename example

This commit is contained in:
2026-06-01 03:09:19 +02:00
parent 7f3d14a764
commit b5473bfafc
59 changed files with 261 additions and 182 deletions
+80 -1
View File
@@ -1 +1,80 @@
/build # Built application files
*.apk
*.aab
*.ap_
*.dex
# Java class files
*.class
# Generated files
bin/
gen/
out/
# Gradle files
.gradle/
build/
# Local configuration file (sdk path, etc)
local.properties
# Proguard folder generated by Eclipse
proguard/
# Log Files
*.log
# Android Studio Navigation editor temp files
.navigation/
# Android Studio captures folder
captures/
# IntelliJ
*.iml
.idea/
# If you prefer to keep some .idea config tracked, use these instead:
# .idea/caches
# .idea/libraries
# .idea/tasks.xml
# .idea/gradle.xml
# .idea/assetWizardSettings.xml
# .idea/dictionaries
# .idea/navEditor.xml
# Keystore files
# Note: uncomment the following if you commit keystore files.
# *.jks
# *.keystore
# External native build folder generated in Android Studio 2.2+
.externalNativeBuild/
.cxx/
# Google Services (if you use Firebase/Google APIs, keep this ignored
# and use a template like google-services.json.example instead)
# google-services.json
# Kotlin
*.kotlin_module
# Fabric/Google Crashlytics
fabric.properties
# Secrets / API keys
*.keystore
*.jks
secrets.properties
api_keys.properties
# OS files
.DS_Store
Thumbs.db
# Lint reports
lint-results.xml
lint-results_files/
# APK signing info
signing.properties
+2 -2
View File
@@ -4,7 +4,7 @@ plugins {
} }
android { android {
namespace = "com.example.gudariwallet" namespace = "com.bitcointxoko.gudariwallet"
compileSdk { compileSdk {
version = release(36) { version = release(36) {
minorApiLevel = 1 minorApiLevel = 1
@@ -12,7 +12,7 @@ android {
} }
defaultConfig { defaultConfig {
applicationId = "com.example.gudariwallet" applicationId = "com.bitcointxoko.gudariwallet"
minSdk = 26 minSdk = 26
targetSdk = 36 targetSdk = 36
versionCode = 1 versionCode = 1
@@ -1,4 +1,4 @@
package com.example.gudariwallet package com.bitcointxoko.gudariwallet
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -19,6 +19,6 @@ class ExampleInstrumentedTest {
fun useAppContext() { fun useAppContext() {
// Context of the app under test. // Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("com.example.gudariwallet", appContext.packageName) assertEquals("com.bitcointxoko.gudariwallet", appContext.packageName)
} }
} }
@@ -1,4 +1,4 @@
package com.example.gudariwallet package com.bitcointxoko.gudariwallet
import android.Manifest import android.Manifest
import android.content.ActivityNotFoundException import android.content.ActivityNotFoundException
@@ -17,15 +17,15 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.core.content.edit import androidx.core.content.edit
import androidx.core.net.toUri import androidx.core.net.toUri
import com.example.gudariwallet.security.EncryptedSecretStore import com.bitcointxoko.gudariwallet.security.EncryptedSecretStore
import com.example.gudariwallet.service.WalletNotificationService import com.bitcointxoko.gudariwallet.service.WalletNotificationService
import com.example.gudariwallet.ui.OnboardingScreen import com.bitcointxoko.gudariwallet.ui.OnboardingScreen
import com.example.gudariwallet.ui.WalletScreen import com.bitcointxoko.gudariwallet.ui.WalletScreen
import com.example.gudariwallet.ui.WalletViewModel import com.bitcointxoko.gudariwallet.ui.WalletViewModel
import com.example.gudariwallet.ui.WalletViewModelFactory import com.bitcointxoko.gudariwallet.ui.WalletViewModelFactory
import com.example.gudariwallet.ui.theme.GudariWalletTheme import com.bitcointxoko.gudariwallet.ui.theme.GudariWalletTheme
import com.example.gudariwallet.util.NotificationHelper import com.bitcointxoko.gudariwallet.util.NotificationHelper
import com.example.gudariwallet.util.IntentUtils import com.bitcointxoko.gudariwallet.util.IntentUtils
import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableSharedFlow
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
@@ -1,4 +1,4 @@
package com.example.gudariwallet.api package com.bitcointxoko.gudariwallet.api
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.GsonBuilder import com.google.gson.GsonBuilder
@@ -1,4 +1,4 @@
package com.example.gudariwallet.api package com.bitcointxoko.gudariwallet.api
import retrofit2.http.Body import retrofit2.http.Body
import retrofit2.http.GET import retrofit2.http.GET
@@ -1,7 +1,7 @@
package com.example.gudariwallet.api package com.bitcointxoko.gudariwallet.api
import com.example.gudariwallet.BuildConfig import com.bitcointxoko.gudariwallet.BuildConfig
import com.example.gudariwallet.util.WalletConstants import com.bitcointxoko.gudariwallet.util.WalletConstants
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit import retrofit2.Retrofit
@@ -1,4 +1,4 @@
package com.example.gudariwallet.api package com.bitcointxoko.gudariwallet.api
import com.google.gson.TypeAdapter import com.google.gson.TypeAdapter
import com.google.gson.annotations.SerializedName import com.google.gson.annotations.SerializedName
@@ -1,4 +1,4 @@
package com.example.gudariwallet.api package com.bitcointxoko.gudariwallet.api
import retrofit2.http.GET import retrofit2.http.GET
import retrofit2.http.Path import retrofit2.http.Path
@@ -1,4 +1,4 @@
package com.example.gudariwallet.api package com.bitcointxoko.gudariwallet.api
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import retrofit2.Retrofit import retrofit2.Retrofit
@@ -1,13 +1,13 @@
package com.example.gudariwallet.data package com.bitcointxoko.gudariwallet.data
import com.example.gudariwallet.api.LnurlScanResponse import com.bitcointxoko.gudariwallet.api.LnurlScanResponse
import com.example.gudariwallet.api.RouteHintHop import com.bitcointxoko.gudariwallet.api.RouteHintHop
/** /**
* Domain model classes for the wallet layer. * Domain model classes for the wallet layer.
* *
* These are the types returned by [WalletRepository] methods deliberately * These are the types returned by [WalletRepository] methods deliberately
* decoupled from the raw API response models in [com.example.gudariwallet.api]. * decoupled from the raw API response models in [com.bitcointxoko.gudariwallet.api].
*/ */
data class WalletBalance( data class WalletBalance(
@@ -1,6 +1,6 @@
package com.example.gudariwallet.data package com.bitcointxoko.gudariwallet.data
import com.example.gudariwallet.service.NodeAliasService import com.bitcointxoko.gudariwallet.service.NodeAliasService
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
/** /**
@@ -1,14 +1,14 @@
package com.example.gudariwallet.data package com.bitcointxoko.gudariwallet.data
import android.content.Context import android.content.Context
import android.net.Uri import android.net.Uri
import android.util.Log import android.util.Log
import com.example.gudariwallet.api.* import com.bitcointxoko.gudariwallet.api.*
import com.example.gudariwallet.api.LNbitsClient.httpClient import com.bitcointxoko.gudariwallet.api.LNbitsClient.httpClient
import com.example.gudariwallet.security.SecretStore import com.bitcointxoko.gudariwallet.security.SecretStore
import com.example.gudariwallet.util.LnurlBech32 import com.bitcointxoko.gudariwallet.util.LnurlBech32
import com.example.gudariwallet.util.LnurlMetadataParser import com.bitcointxoko.gudariwallet.util.LnurlMetadataParser
import com.example.gudariwallet.util.WalletConstants import com.bitcointxoko.gudariwallet.util.WalletConstants
private const val TAG = "LNbitsWalletRepo" private const val TAG = "LNbitsWalletRepo"
@@ -16,8 +16,8 @@ class LNbitsWalletRepository(
private val api: LNbitsApi, private val api: LNbitsApi,
private val secrets: SecretStore, private val secrets: SecretStore,
private val context : Context, private val context : Context,
private val nodeAliasService: com.example.gudariwallet.service.NodeAliasService = private val nodeAliasService: com.bitcointxoko.gudariwallet.service.NodeAliasService =
com.example.gudariwallet.service.NodeAliasService(httpClient, context), com.bitcointxoko.gudariwallet.service.NodeAliasService(httpClient, context),
) : WalletRepository { ) : WalletRepository {
// ── Balance ─────────────────────────────────────────────────────────────── // ── Balance ───────────────────────────────────────────────────────────────
@@ -1,10 +1,10 @@
package com.example.gudariwallet.data package com.bitcointxoko.gudariwallet.data
import android.content.Context import android.content.Context
import android.content.SharedPreferences import android.content.SharedPreferences
import android.util.Log import android.util.Log
import com.example.gudariwallet.api.LnurlScanResponse import com.bitcointxoko.gudariwallet.api.LnurlScanResponse
import com.example.gudariwallet.util.WalletConstants import com.bitcointxoko.gudariwallet.util.WalletConstants
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.reflect.TypeToken import com.google.gson.reflect.TypeToken
@@ -1,4 +1,4 @@
package com.example.gudariwallet.data package com.bitcointxoko.gudariwallet.data
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
@@ -1,14 +1,14 @@
package com.example.gudariwallet.data package com.bitcointxoko.gudariwallet.data
import android.content.Context import android.content.Context
import android.content.SharedPreferences import android.content.SharedPreferences
import android.util.Log import android.util.Log
import com.example.gudariwallet.api.GsonProvider import com.bitcointxoko.gudariwallet.api.GsonProvider
import com.example.gudariwallet.api.PaymentDetailResponse import com.bitcointxoko.gudariwallet.api.PaymentDetailResponse
import com.example.gudariwallet.api.PaymentRecord import com.bitcointxoko.gudariwallet.api.PaymentRecord
import com.example.gudariwallet.util.WalletConstants import com.bitcointxoko.gudariwallet.util.WalletConstants
import com.example.gudariwallet.api.SuccessAction import com.bitcointxoko.gudariwallet.api.SuccessAction
import com.example.gudariwallet.api.SuccessActionAdapter import com.bitcointxoko.gudariwallet.api.SuccessActionAdapter
import com.google.gson.GsonBuilder import com.google.gson.GsonBuilder
import com.google.gson.reflect.TypeToken import com.google.gson.reflect.TypeToken
@@ -1,9 +1,9 @@
package com.example.gudariwallet.data package com.bitcointxoko.gudariwallet.data
import com.example.gudariwallet.api.LnurlScanResponse import com.bitcointxoko.gudariwallet.api.LnurlScanResponse
import com.example.gudariwallet.api.PaymentDetailResponse import com.bitcointxoko.gudariwallet.api.PaymentDetailResponse
import com.example.gudariwallet.api.PaymentRecord import com.bitcointxoko.gudariwallet.api.PaymentRecord
import com.example.gudariwallet.api.WithdrawCallbackResponse import com.bitcointxoko.gudariwallet.api.WithdrawCallbackResponse
/** /**
* Contract for all wallet operations. * Contract for all wallet operations.
@@ -1,4 +1,4 @@
package com.example.gudariwallet.security package com.bitcointxoko.gudariwallet.security
import android.security.keystore.KeyGenParameterSpec import android.security.keystore.KeyGenParameterSpec
import android.security.keystore.KeyProperties import android.security.keystore.KeyProperties
@@ -1,7 +1,7 @@
package com.example.gudariwallet.security package com.bitcointxoko.gudariwallet.security
import android.content.Context import android.content.Context
import com.example.gudariwallet.util.WalletConstants import com.bitcointxoko.gudariwallet.util.WalletConstants
// Interface — lets you swap in a FakeSecretStore in tests // Interface — lets you swap in a FakeSecretStore in tests
@@ -1,9 +1,9 @@
package com.example.gudariwallet.service package com.bitcointxoko.gudariwallet.service
import android.content.Context import android.content.Context
import android.content.SharedPreferences import android.content.SharedPreferences
import android.util.Log import android.util.Log
import com.example.gudariwallet.util.WalletConstants import com.bitcointxoko.gudariwallet.util.WalletConstants
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.reflect.TypeToken import com.google.gson.reflect.TypeToken
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@@ -1,4 +1,4 @@
package com.example.gudariwallet.service package com.bitcointxoko.gudariwallet.service
import android.app.Service import android.app.Service
import android.content.Context import android.content.Context
@@ -7,13 +7,13 @@ import android.content.pm.ServiceInfo
import android.os.Build import android.os.Build
import android.os.IBinder import android.os.IBinder
import android.util.Log import android.util.Log
import com.example.gudariwallet.api.GsonProvider import com.bitcointxoko.gudariwallet.api.GsonProvider
import com.example.gudariwallet.api.LNbitsClient import com.bitcointxoko.gudariwallet.api.LNbitsClient
import com.example.gudariwallet.api.WsPaymentMessage import com.bitcointxoko.gudariwallet.api.WsPaymentMessage
import com.example.gudariwallet.security.EncryptedSecretStore import com.bitcointxoko.gudariwallet.security.EncryptedSecretStore
import com.example.gudariwallet.util.NotificationConstants import com.bitcointxoko.gudariwallet.util.NotificationConstants
import com.example.gudariwallet.util.NotificationHelper import com.bitcointxoko.gudariwallet.util.NotificationHelper
import com.example.gudariwallet.util.WalletConstants import com.bitcointxoko.gudariwallet.util.WalletConstants
import com.google.gson.Gson import com.google.gson.Gson
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@@ -1,4 +1,4 @@
package com.example.gudariwallet.ui package com.bitcointxoko.gudariwallet.ui
import android.content.ClipData import android.content.ClipData
import android.content.Intent import android.content.Intent
@@ -29,10 +29,10 @@ import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.core.net.toUri import androidx.core.net.toUri
import com.example.gudariwallet.api.PaymentRecord import com.bitcointxoko.gudariwallet.api.PaymentRecord
import com.example.gudariwallet.ui.theme.semanticColors import com.bitcointxoko.gudariwallet.ui.theme.semanticColors
import com.example.gudariwallet.util.feePpm import com.bitcointxoko.gudariwallet.util.feePpm
import com.example.gudariwallet.util.formatFiatForSats // ← new import import com.bitcointxoko.gudariwallet.util.formatFiatForSats // ← new import
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
// ── List screen ────────────────────────────────────────────────────────────── // ── List screen ──────────────────────────────────────────────────────────────
@@ -1,14 +1,14 @@
package com.example.gudariwallet.ui package com.bitcointxoko.gudariwallet.ui
import android.util.Log import android.util.Log
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.example.gudariwallet.data.NodeAliasRepository import com.bitcointxoko.gudariwallet.data.NodeAliasRepository
import com.example.gudariwallet.api.PaymentRecord import com.bitcointxoko.gudariwallet.api.PaymentRecord
import com.example.gudariwallet.data.PaymentCacheRepository import com.bitcointxoko.gudariwallet.data.PaymentCacheRepository
import com.example.gudariwallet.data.WalletRepository import com.bitcointxoko.gudariwallet.data.WalletRepository
import com.example.gudariwallet.util.WalletConstants import com.bitcointxoko.gudariwallet.util.WalletConstants
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
@@ -1,4 +1,4 @@
package com.example.gudariwallet.ui package com.bitcointxoko.gudariwallet.ui
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
@@ -28,7 +28,7 @@ import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalFocusManager
import com.example.gudariwallet.util.formatFiat import com.bitcointxoko.gudariwallet.util.formatFiat
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
@@ -1,4 +1,4 @@
package com.example.gudariwallet.ui package com.bitcointxoko.gudariwallet.ui
import android.Manifest import android.Manifest
import android.content.Context import android.content.Context
@@ -1,4 +1,4 @@
package com.example.gudariwallet.ui package com.bitcointxoko.gudariwallet.ui
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
@@ -11,7 +11,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.text.input.* import androidx.compose.ui.text.input.*
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.example.gudariwallet.security.SecretStore import com.bitcointxoko.gudariwallet.security.SecretStore
@Composable @Composable
fun OnboardingScreen( fun OnboardingScreen(
@@ -1,4 +1,4 @@
package com.example.gudariwallet.ui package com.bitcointxoko.gudariwallet.ui
import androidx.compose.animation.core.* import androidx.compose.animation.core.*
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
@@ -1,4 +1,4 @@
package com.example.gudariwallet.ui package com.bitcointxoko.gudariwallet.ui
import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@@ -1,4 +1,4 @@
package com.example.gudariwallet.ui package com.bitcointxoko.gudariwallet.ui
import android.app.Activity import android.app.Activity
import android.view.WindowManager import android.view.WindowManager
@@ -52,10 +52,10 @@ import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.example.gudariwallet.ui.components.UnitWheelPicker import com.bitcointxoko.gudariwallet.ui.components.UnitWheelPicker
import com.example.gudariwallet.ui.receive.AmountDisplay import com.bitcointxoko.gudariwallet.ui.receive.AmountDisplay
import com.example.gudariwallet.ui.receive.QrDisplayCard import com.bitcointxoko.gudariwallet.ui.receive.QrDisplayCard
import com.example.gudariwallet.util.fiatLabel import com.bitcointxoko.gudariwallet.util.fiatLabel
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
@Composable @Composable
@@ -1,4 +1,4 @@
package com.example.gudariwallet.ui package com.bitcointxoko.gudariwallet.ui
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
@@ -20,11 +20,11 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.example.gudariwallet.ui.send.Bolt11ConfirmCard import com.bitcointxoko.gudariwallet.ui.send.Bolt11ConfirmCard
import com.example.gudariwallet.ui.send.LnurlInvoiceConfirmCard import com.bitcointxoko.gudariwallet.ui.send.LnurlInvoiceConfirmCard
import com.example.gudariwallet.ui.send.LnurlPayForm import com.bitcointxoko.gudariwallet.ui.send.LnurlPayForm
import com.example.gudariwallet.util.SendInputDetector import com.bitcointxoko.gudariwallet.util.SendInputDetector
import com.example.gudariwallet.util.feePpm import com.bitcointxoko.gudariwallet.util.feePpm
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@Composable @Composable
@@ -1,11 +1,11 @@
package com.example.gudariwallet.ui package com.bitcointxoko.gudariwallet.ui
import com.example.gudariwallet.api.LnurlScanResponse import com.bitcointxoko.gudariwallet.api.LnurlScanResponse
import com.example.gudariwallet.api.PaymentDetailResponse import com.bitcointxoko.gudariwallet.api.PaymentDetailResponse
import com.example.gudariwallet.api.PaymentRecord import com.bitcointxoko.gudariwallet.api.PaymentRecord
import com.example.gudariwallet.api.RouteHintHop import com.bitcointxoko.gudariwallet.api.RouteHintHop
import com.example.gudariwallet.util.RouteHintRisk import com.bitcointxoko.gudariwallet.util.RouteHintRisk
import com.example.gudariwallet.util.SendInputType import com.bitcointxoko.gudariwallet.util.SendInputType
sealed class UiState<out T> { sealed class UiState<out T> {
data object Loading : UiState<Nothing>() data object Loading : UiState<Nothing>()
@@ -1,4 +1,4 @@
package com.example.gudariwallet.ui package com.bitcointxoko.gudariwallet.ui
import android.content.ClipboardManager import android.content.ClipboardManager
import android.util.Log import android.util.Log
@@ -52,8 +52,8 @@ import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument import androidx.navigation.navArgument
import com.example.gudariwallet.MainActivity import com.bitcointxoko.gudariwallet.MainActivity
import com.example.gudariwallet.util.SendInputType import com.bitcointxoko.gudariwallet.util.SendInputType
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
// ── Tab destinations ────────────────────────────────────────────────────────── // ── Tab destinations ──────────────────────────────────────────────────────────
@@ -1,23 +1,23 @@
package com.example.gudariwallet.ui package com.bitcointxoko.gudariwallet.ui
import android.content.Context import android.content.Context
import android.content.SharedPreferences import android.content.SharedPreferences
import android.util.Log import android.util.Log
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.example.gudariwallet.api.LnurlScanResponse import com.bitcointxoko.gudariwallet.api.LnurlScanResponse
import com.example.gudariwallet.data.LnurlCacheRepository import com.bitcointxoko.gudariwallet.data.LnurlCacheRepository
import com.example.gudariwallet.data.NodeAliasRepository import com.bitcointxoko.gudariwallet.data.NodeAliasRepository
import com.example.gudariwallet.data.PaymentCacheRepository import com.bitcointxoko.gudariwallet.data.PaymentCacheRepository
import com.example.gudariwallet.data.WalletRepository import com.bitcointxoko.gudariwallet.data.WalletRepository
import com.example.gudariwallet.service.WalletNotificationService import com.bitcointxoko.gudariwallet.service.WalletNotificationService
import com.example.gudariwallet.util.LnurlMetadataParser import com.bitcointxoko.gudariwallet.util.LnurlMetadataParser
import com.example.gudariwallet.util.RouteHintAnalyzer import com.bitcointxoko.gudariwallet.util.RouteHintAnalyzer
import com.example.gudariwallet.util.SendInputDetector import com.bitcointxoko.gudariwallet.util.SendInputDetector
import com.example.gudariwallet.util.SendInputType import com.bitcointxoko.gudariwallet.util.SendInputType
import com.example.gudariwallet.util.WalletConstants import com.bitcointxoko.gudariwallet.util.WalletConstants
import com.example.gudariwallet.util.satsToFiat import com.bitcointxoko.gudariwallet.util.satsToFiat
import com.example.gudariwallet.util.parseApiError import com.bitcointxoko.gudariwallet.util.parseApiError
import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.SharedFlow
@@ -27,9 +27,9 @@ import androidx.core.content.edit
import kotlinx.coroutines.flow.mapNotNull import kotlinx.coroutines.flow.mapNotNull
import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.SharingStarted
import com.example.gudariwallet.util.lnurlProtocolError import com.bitcointxoko.gudariwallet.util.lnurlProtocolError
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import com.example.gudariwallet.util.BiometricHelper import com.bitcointxoko.gudariwallet.util.BiometricHelper
private const val TAG = "WalletViewModel" private const val TAG = "WalletViewModel"
@@ -1,15 +1,15 @@
package com.example.gudariwallet.ui package com.bitcointxoko.gudariwallet.ui
import android.app.Application import android.app.Application
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import com.example.gudariwallet.api.LNbitsClient import com.bitcointxoko.gudariwallet.api.LNbitsClient
import com.example.gudariwallet.data.LNbitsNodeAliasRepository import com.bitcointxoko.gudariwallet.data.LNbitsNodeAliasRepository
import com.example.gudariwallet.data.LNbitsWalletRepository import com.bitcointxoko.gudariwallet.data.LNbitsWalletRepository
import com.example.gudariwallet.data.LnurlCacheRepository import com.bitcointxoko.gudariwallet.data.LnurlCacheRepository
import com.example.gudariwallet.data.PaymentCacheRepository import com.bitcointxoko.gudariwallet.data.PaymentCacheRepository
import com.example.gudariwallet.security.EncryptedSecretStore import com.bitcointxoko.gudariwallet.security.EncryptedSecretStore
import com.example.gudariwallet.service.NodeAliasService import com.bitcointxoko.gudariwallet.service.NodeAliasService
class WalletViewModelFactory(private val app: Application) : ViewModelProvider.Factory { class WalletViewModelFactory(private val app: Application) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T { override fun <T : ViewModel> create(modelClass: Class<T>): T {
@@ -1,4 +1,4 @@
package com.example.gudariwallet.ui.components package com.bitcointxoko.gudariwallet.ui.components
import android.content.ClipData import android.content.ClipData
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
@@ -1,4 +1,4 @@
package com.example.gudariwallet.ui.components package com.bitcointxoko.gudariwallet.ui.components
import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.gestures.snapping.rememberSnapFlingBehavior import androidx.compose.foundation.gestures.snapping.rememberSnapFlingBehavior
@@ -1,4 +1,4 @@
package com.example.gudariwallet.ui.receive package com.bitcointxoko.gudariwallet.ui.receive
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
@@ -1,4 +1,4 @@
package com.example.gudariwallet.ui.receive package com.bitcointxoko.gudariwallet.ui.receive
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.BrightnessHigh import androidx.compose.material.icons.filled.BrightnessHigh
@@ -1,4 +1,4 @@
package com.example.gudariwallet.ui.receive package com.bitcointxoko.gudariwallet.ui.receive
import android.content.ClipData import android.content.ClipData
import android.graphics.Bitmap import android.graphics.Bitmap
@@ -27,7 +27,7 @@ import androidx.compose.ui.platform.ClipEntry
import androidx.compose.ui.platform.LocalClipboard import androidx.compose.ui.platform.LocalClipboard
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.example.gudariwallet.util.IntentUtils import com.bitcointxoko.gudariwallet.util.IntentUtils
import com.google.zxing.BarcodeFormat import com.google.zxing.BarcodeFormat
import com.google.zxing.qrcode.QRCodeWriter import com.google.zxing.qrcode.QRCodeWriter
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -1,4 +1,4 @@
package com.example.gudariwallet.ui.send package com.bitcointxoko.gudariwallet.ui.send
import android.content.Intent import android.content.Intent
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
@@ -19,13 +19,13 @@ import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.core.net.toUri import androidx.core.net.toUri
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import com.example.gudariwallet.ui.DecodedInvoice import com.bitcointxoko.gudariwallet.ui.DecodedInvoice
import com.example.gudariwallet.ui.SendState import com.bitcointxoko.gudariwallet.ui.SendState
import com.example.gudariwallet.ui.WalletViewModel import com.bitcointxoko.gudariwallet.ui.WalletViewModel
import com.example.gudariwallet.ui.components.CopyIconButton import com.bitcointxoko.gudariwallet.ui.components.CopyIconButton
import com.example.gudariwallet.ui.components.DetailRow import com.bitcointxoko.gudariwallet.ui.components.DetailRow
import com.example.gudariwallet.util.fiatLabel import com.bitcointxoko.gudariwallet.util.fiatLabel
import com.example.gudariwallet.util.payingToLabel import com.bitcointxoko.gudariwallet.util.payingToLabel
@Composable @Composable
internal fun Bolt11ConfirmCard( internal fun Bolt11ConfirmCard(
@@ -1,4 +1,4 @@
package com.example.gudariwallet.ui.send package com.bitcointxoko.gudariwallet.ui.send
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
@@ -17,13 +17,13 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.example.gudariwallet.ui.SendState import com.bitcointxoko.gudariwallet.ui.SendState
import com.example.gudariwallet.ui.WalletViewModel import com.bitcointxoko.gudariwallet.ui.WalletViewModel
import com.example.gudariwallet.util.WalletConstants import com.bitcointxoko.gudariwallet.util.WalletConstants
import com.example.gudariwallet.util.fiatLabel import com.bitcointxoko.gudariwallet.util.fiatLabel
import com.example.gudariwallet.util.formatFiat import com.bitcointxoko.gudariwallet.util.formatFiat
import com.example.gudariwallet.util.payingToLabel import com.bitcointxoko.gudariwallet.util.payingToLabel
import com.example.gudariwallet.util.satsToFiat import com.bitcointxoko.gudariwallet.util.satsToFiat
@Composable @Composable
internal fun LnurlPayForm( internal fun LnurlPayForm(
@@ -1,4 +1,4 @@
package com.example.gudariwallet.ui.send package com.bitcointxoko.gudariwallet.ui.send
import android.content.Intent import android.content.Intent
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
@@ -33,11 +33,11 @@ import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.core.net.toUri import androidx.core.net.toUri
import com.example.gudariwallet.api.RouteHintHop import com.bitcointxoko.gudariwallet.api.RouteHintHop
import com.example.gudariwallet.ui.components.CopyIconButton import com.bitcointxoko.gudariwallet.ui.components.CopyIconButton
import com.example.gudariwallet.util.RiskLevel import com.bitcointxoko.gudariwallet.util.RiskLevel
import com.example.gudariwallet.util.RouteHintRisk import com.bitcointxoko.gudariwallet.util.RouteHintRisk
import com.example.gudariwallet.util.baseFeeLabel import com.bitcointxoko.gudariwallet.util.baseFeeLabel
@Composable @Composable
internal fun RouteHintWarningBanner( internal fun RouteHintWarningBanner(
@@ -1,4 +1,4 @@
package com.example.gudariwallet.ui.theme package com.bitcointxoko.gudariwallet.ui.theme
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
@@ -1,6 +1,6 @@
// ui/theme/SemanticColors.kt // ui/theme/SemanticColors.kt
package com.example.gudariwallet.ui.theme package com.bitcointxoko.gudariwallet.ui.theme
import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@@ -1,4 +1,4 @@
package com.example.gudariwallet.ui.theme package com.bitcointxoko.gudariwallet.ui.theme
import android.app.Activity import android.app.Activity
import android.os.Build import android.os.Build
@@ -1,4 +1,4 @@
package com.example.gudariwallet.ui.theme package com.bitcointxoko.gudariwallet.ui.theme
import androidx.compose.material3.Typography import androidx.compose.material3.Typography
import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.TextStyle
@@ -1,6 +1,6 @@
package com.example.gudariwallet.util package com.bitcointxoko.gudariwallet.util
import com.example.gudariwallet.api.LnurlScanResponse import com.bitcointxoko.gudariwallet.api.LnurlScanResponse
import org.json.JSONObject import org.json.JSONObject
import retrofit2.HttpException import retrofit2.HttpException
@@ -1,4 +1,4 @@
package com.example.gudariwallet.util package com.bitcointxoko.gudariwallet.util
import android.content.Context import android.content.Context
import android.content.ContextWrapper import android.content.ContextWrapper
@@ -1,4 +1,4 @@
package com.example.gudariwallet.util package com.bitcointxoko.gudariwallet.util
/** /**
* Converts a satoshi amount to its fiat equivalent. * Converts a satoshi amount to its fiat equivalent.
@@ -1,4 +1,4 @@
package com.example.gudariwallet.util package com.bitcointxoko.gudariwallet.util
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
@@ -1,4 +1,4 @@
package com.example.gudariwallet.util package com.bitcointxoko.gudariwallet.util
import kotlin.collections.toByteArray import kotlin.collections.toByteArray
@@ -1,11 +1,11 @@
package com.example.gudariwallet.util package com.bitcointxoko.gudariwallet.util
import org.json.JSONArray import org.json.JSONArray
/** /**
* Stateless helpers for parsing LNURL-pay step-1 metadata fields. * Stateless helpers for parsing LNURL-pay step-1 metadata fields.
* Shared between [com.example.gudariwallet.data.LNbitsWalletRepository] * Shared between [com.bitcointxoko.gudariwallet.data.LNbitsWalletRepository]
* and [com.example.gudariwallet.ui.WalletViewModel] so neither duplicates * and [com.bitcointxoko.gudariwallet.ui.WalletViewModel] so neither duplicates
* the logic. * the logic.
*/ */
object LnurlMetadataParser { object LnurlMetadataParser {
@@ -1,4 +1,4 @@
package com.example.gudariwallet.util package com.bitcointxoko.gudariwallet.util
object NotificationConstants { object NotificationConstants {
@@ -1,4 +1,4 @@
package com.example.gudariwallet.util package com.bitcointxoko.gudariwallet.util
import android.app.Notification import android.app.Notification
import android.app.NotificationChannel import android.app.NotificationChannel
@@ -8,8 +8,8 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat import androidx.core.app.NotificationManagerCompat
import com.example.gudariwallet.MainActivity import com.bitcointxoko.gudariwallet.MainActivity
import com.example.gudariwallet.R import com.bitcointxoko.gudariwallet.R
object NotificationHelper { object NotificationHelper {
@@ -1,6 +1,6 @@
package com.example.gudariwallet.util package com.bitcointxoko.gudariwallet.util
import com.example.gudariwallet.api.RouteHintHop import com.bitcointxoko.gudariwallet.api.RouteHintHop
data class RouteHintRisk( data class RouteHintRisk(
val worstHop : RouteHintHop, val worstHop : RouteHintHop,
@@ -1,6 +1,6 @@
package com.example.gudariwallet.util package com.bitcointxoko.gudariwallet.util
import com.example.gudariwallet.util.WalletConstants.MSAT_PER_SAT import com.bitcointxoko.gudariwallet.util.WalletConstants.MSAT_PER_SAT
/** Convert millisatoshis to satoshis. e.g. 10_000L.msatToSat == 10L */ /** Convert millisatoshis to satoshis. e.g. 10_000L.msatToSat == 10L */
val Long.msatToSat: Long get() = this / MSAT_PER_SAT val Long.msatToSat: Long get() = this / MSAT_PER_SAT
@@ -1,4 +1,4 @@
package com.example.gudariwallet.util package com.bitcointxoko.gudariwallet.util
sealed class SendInputType { sealed class SendInputType {
data object Bolt11 : SendInputType() data object Bolt11 : SendInputType()
@@ -1,4 +1,4 @@
package com.example.gudariwallet.util package com.bitcointxoko.gudariwallet.util
object WalletConstants { object WalletConstants {
@@ -1,4 +1,4 @@
package com.example.gudariwallet package com.bitcointxoko.gudariwallet
import org.junit.Test import org.junit.Test