diff --git a/.idea/runConfigurations/sdk_ext_ui_lib_connectedCheck.xml b/.idea/runConfigurations/sdk_ext_ui_lib_connectedCheck.xml
deleted file mode 100644
index 1e47be31..00000000
--- a/.idea/runConfigurations/sdk_ext_ui_lib_connectedCheck.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/co/electriccoin/zcash/app/ZcashApplication.kt b/app/src/main/java/co/electriccoin/zcash/app/ZcashApplication.kt
index c40dfa99..058540a2 100644
--- a/app/src/main/java/co/electriccoin/zcash/app/ZcashApplication.kt
+++ b/app/src/main/java/co/electriccoin/zcash/app/ZcashApplication.kt
@@ -26,10 +26,7 @@ class ZcashApplication : CoroutineApplication() {
Twig.initialize(applicationContext)
Twig.info { "Starting application…" }
- if (BuildConfig.DEBUG) {
- // This is an internal API to the Zcash SDK to enable logging; it could change in the future
- cash.z.ecc.android.sdk.internal.Twig.enabled(true)
- } else {
+ if (!BuildConfig.DEBUG) {
// In release builds, logs should be stripped by R8 rules
Twig.assertLoggingStripped()
}
diff --git a/docs/Architecture.md b/docs/Architecture.md
index eb0e4893..91847fc0 100644
--- a/docs/Architecture.md
+++ b/docs/Architecture.md
@@ -41,7 +41,6 @@ The logical components of the app are implemented as a number of Gradle modules.
* `preference-impl-android-lib` — Android-specific implementation for preference storage.
* sdk
* `sdk-ext-lib` — Contains extensions on top of the to the Zcash SDK. Some of these extensions might be migrated into the SDK eventually, while others might represent Android-centric idioms. Depending on how this module evolves, it could adopt another name such as `wallet-lib` or be split into two.
- * `sdk-ext-ui` — Place for Zcash SDK components (same as `sdk-ext-lib`), which are related to the UI (e.g. depend on user locale and thus need to be translated via `strings.xml`).
* spackle — Random utilities, to fill in the cracks in the frameworks.
* `spackle-lib` — Multiplatform implementation for Kotlin and JVM
* `spackle-android-lib` — Android-specific additions.
@@ -55,9 +54,8 @@ The following diagram shows a rough depiction of dependencies between the module
subgraph sdk
sdkLib[[sdk-lib]];
sdkExtLib[[sdk-ext-lib]];
- sdkExtUi[[sdk-ext-ui]];
end
- sdkLib[[sdk-lib]] --> sdkExtLib[[sdk-ext-lib]] --> sdkExtUi[[sdk-ext-ui]];
+ sdkLib[[sdk-lib]] --> sdkExtLib[[sdk-ext-lib]];
subgraph preference
preferenceApiLib[[preference-api-lib]];
preferenceImplAndroidLib[[preference-impl-android-lib]];
diff --git a/gradle.properties b/gradle.properties
index 70c84aea..6fddc390 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -149,7 +149,7 @@ ZCASH_ANDROID_WALLET_PLUGINS_VERSION=1.0.0
ZCASH_BIP39_VERSION=1.0.4
# TODO [#279]: Revert to stable SDK before app release
# TODO [#279]: https://github.com/zcash/secant-android-wallet/issues/279
-ZCASH_SDK_VERSION=1.12.0-beta01-SNAPSHOT
+ZCASH_SDK_VERSION=1.14.0-beta01-SNAPSHOT
ZXING_VERSION=3.5.0
diff --git a/sdk-ext-lib/build.gradle.kts b/sdk-ext-lib/build.gradle.kts
index ddf2485c..f152d92d 100644
--- a/sdk-ext-lib/build.gradle.kts
+++ b/sdk-ext-lib/build.gradle.kts
@@ -17,6 +17,7 @@ dependencies {
implementation(libs.kotlinx.coroutines.core)
implementation(libs.kotlinx.datetime)
api(libs.zcash.sdk)
+ api(libs.zcash.sdk.incubator)
api(libs.zcash.bip39)
androidTestImplementation(libs.bundles.androidx.test)
@@ -37,4 +38,3 @@ dependencies {
}
}
}
-
diff --git a/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/ext/StringExtTest.kt b/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/ext/StringExtTest.kt
deleted file mode 100644
index 1e0523e9..00000000
--- a/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/ext/StringExtTest.kt
+++ /dev/null
@@ -1,21 +0,0 @@
-package cash.z.ecc.sdk.ext
-
-import kotlin.test.Test
-import kotlin.test.assertEquals
-
-class StringExtTest {
- @Test
- fun sizeInBytes_empty() {
- assertEquals(0, "".sizeInUtf8Bytes())
- }
-
- @Test
- fun sizeInBytes_one() {
- assertEquals(1, "a".sizeInUtf8Bytes())
- }
-
- @Test
- fun sizeInBytes_unicode() {
- assertEquals(2, "á".sizeInUtf8Bytes())
- }
-}
diff --git a/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/MemoTest.kt b/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/MemoTest.kt
deleted file mode 100644
index 9aaff029..00000000
--- a/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/MemoTest.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-package cash.z.ecc.sdk.model
-
-import cash.z.ecc.sdk.fixture.ZecSendFixture
-import java.lang.IllegalArgumentException
-import kotlin.test.Test
-import kotlin.test.assertFalse
-import kotlin.test.assertTrue
-
-class MemoTest {
- companion object {
- private const val BYTE_STRING_513 = """
- asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfa
- """
- }
-
- @Test
- fun isWithinMaxSize_too_big() {
- assertFalse(Memo.isWithinMaxLength(BYTE_STRING_513))
- }
-
- @Test
- fun isWithinMaxSize_ok() {
- assertTrue(Memo.isWithinMaxLength(ZecSendFixture.MEMO.value))
- }
-
- @Test(IllegalArgumentException::class)
- fun init_max_size() {
- Memo(BYTE_STRING_513)
- }
-}
diff --git a/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/PercentDecimalTest.kt b/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/PercentDecimalTest.kt
deleted file mode 100644
index 16f14607..00000000
--- a/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/PercentDecimalTest.kt
+++ /dev/null
@@ -1,19 +0,0 @@
-package cash.z.ecc.sdk.model
-
-import androidx.test.filters.SmallTest
-import org.junit.Test
-
-class PercentDecimalTest {
-
- @Test(expected = IllegalArgumentException::class)
- @SmallTest
- fun require_greater_than_zero() {
- PercentDecimal(-1.0f)
- }
-
- @Test(expected = IllegalArgumentException::class)
- @SmallTest
- fun require_less_than_one() {
- PercentDecimal(1.5f)
- }
-}
diff --git a/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/PersistableWalletTest.kt b/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/PersistableWalletTest.kt
deleted file mode 100644
index f4be2c7f..00000000
--- a/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/PersistableWalletTest.kt
+++ /dev/null
@@ -1,51 +0,0 @@
-package cash.z.ecc.sdk.model
-
-import androidx.test.filters.SmallTest
-import cash.z.ecc.android.sdk.model.ZcashNetwork
-import cash.z.ecc.sdk.fixture.PersistableWalletFixture
-import cash.z.ecc.sdk.fixture.SeedPhraseFixture
-import cash.z.ecc.sdk.test.count
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertFalse
-import org.junit.Assert.assertTrue
-import org.junit.Test
-
-class PersistableWalletTest {
- @Test
- @SmallTest
- fun serialize() {
- val persistableWallet = PersistableWalletFixture.new()
-
- val jsonObject = persistableWallet.toJson()
- assertEquals(4, jsonObject.keys().count())
- assertTrue(jsonObject.has(PersistableWallet.KEY_VERSION))
- assertTrue(jsonObject.has(PersistableWallet.KEY_NETWORK_ID))
- assertTrue(jsonObject.has(PersistableWallet.KEY_SEED_PHRASE))
- assertTrue(jsonObject.has(PersistableWallet.KEY_BIRTHDAY))
-
- assertEquals(1, jsonObject.getInt(PersistableWallet.KEY_VERSION))
- assertEquals(ZcashNetwork.Testnet.id, jsonObject.getInt(PersistableWallet.KEY_NETWORK_ID))
- assertEquals(PersistableWalletFixture.SEED_PHRASE.joinToString(), jsonObject.getString(PersistableWallet.KEY_SEED_PHRASE))
-
- // Birthday serialization is tested in a separate file
- }
-
- @Test
- @SmallTest
- fun round_trip() {
- val persistableWallet = PersistableWalletFixture.new()
-
- val deserialized = PersistableWallet.from(persistableWallet.toJson())
-
- assertEquals(persistableWallet, deserialized)
- assertFalse(persistableWallet === deserialized)
- }
-
- @Test
- @SmallTest
- fun toString_security() {
- val actual = PersistableWalletFixture.new().toString()
-
- assertFalse(actual.contains(SeedPhraseFixture.SEED_PHRASE))
- }
-}
diff --git a/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/SeedPhraseTest.kt b/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/SeedPhraseTest.kt
deleted file mode 100644
index 392a558c..00000000
--- a/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/SeedPhraseTest.kt
+++ /dev/null
@@ -1,26 +0,0 @@
-package cash.z.ecc.sdk.model
-
-import androidx.test.filters.SmallTest
-import cash.z.ecc.sdk.fixture.SeedPhraseFixture
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertFalse
-import org.junit.Test
-
-class SeedPhraseTest {
- @Test
- @SmallTest
- fun split_and_join() {
- val seedPhrase = SeedPhrase.new(SeedPhraseFixture.SEED_PHRASE)
-
- assertEquals(SeedPhraseFixture.SEED_PHRASE, seedPhrase.joinToString())
- }
-
- @Test
- @SmallTest
- fun security() {
- val seedPhrase = SeedPhraseFixture.new()
- seedPhrase.split.forEach {
- assertFalse(seedPhrase.toString().contains(it))
- }
- }
-}
diff --git a/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/WalletAddressTest.kt b/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/WalletAddressTest.kt
deleted file mode 100644
index 575b21ee..00000000
--- a/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/WalletAddressTest.kt
+++ /dev/null
@@ -1,18 +0,0 @@
-package cash.z.ecc.sdk.model
-
-import cash.z.ecc.sdk.fixture.WalletAddressFixture
-import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.test.runTest
-import kotlin.test.Test
-import kotlin.test.assertEquals
-
-class WalletAddressTest {
- @Test
- @ExperimentalCoroutinesApi
- fun unified_equals_different_instance() = runTest {
- val one = WalletAddressFixture.unified()
- val two = WalletAddressFixture.unified()
-
- assertEquals(one, two)
- }
-}
diff --git a/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/WalletAddressesTest.kt b/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/WalletAddressesTest.kt
deleted file mode 100644
index f6aef4a4..00000000
--- a/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/WalletAddressesTest.kt
+++ /dev/null
@@ -1,21 +0,0 @@
-package cash.z.ecc.sdk.model
-
-import androidx.test.filters.SmallTest
-import cash.z.ecc.sdk.fixture.WalletAddressesFixture
-import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.test.runTest
-import org.junit.Assert.assertFalse
-import org.junit.Test
-
-@OptIn(ExperimentalCoroutinesApi::class)
-class WalletAddressesTest {
- @Test
- @SmallTest
- fun security() = runTest {
- val walletAddresses = WalletAddressesFixture.new()
- val actual = WalletAddressesFixture.new().toString()
- assertFalse(actual.contains(walletAddresses.sapling.address))
- assertFalse(actual.contains(walletAddresses.transparent.address))
- assertFalse(actual.contains(walletAddresses.unified.address))
- }
-}
diff --git a/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/ZecRequestTest.kt b/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/ZecRequestTest.kt
index e7fc5b6a..f09940d8 100644
--- a/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/ZecRequestTest.kt
+++ b/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/ZecRequestTest.kt
@@ -1,6 +1,7 @@
package cash.z.ecc.sdk.model
import androidx.test.filters.SmallTest
+import cash.z.ecc.android.sdk.model.WalletAddress
import cash.z.ecc.android.sdk.model.Zatoshi
import cash.z.ecc.sdk.fixture.Zip321UriBuildFixture
import cash.z.ecc.sdk.fixture.Zip321UriParseFixture
diff --git a/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/test/Iterator.kt b/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/test/Iterator.kt
deleted file mode 100644
index 1826bc61..00000000
--- a/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/test/Iterator.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-@file:Suppress("ktlint:filename")
-
-package cash.z.ecc.sdk.test
-
-fun Iterator.count(): Int {
- var count = 0
- forEach { count++ }
-
- return count
-}
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/SynchronizerExt.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/SynchronizerExt.kt
index 37ba0f59..5d6882b0 100644
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/SynchronizerExt.kt
+++ b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/SynchronizerExt.kt
@@ -4,7 +4,7 @@ package cash.z.ecc.sdk
import cash.z.ecc.android.sdk.Synchronizer
import cash.z.ecc.android.sdk.model.UnifiedSpendingKey
-import cash.z.ecc.sdk.model.ZecSend
+import cash.z.ecc.android.sdk.model.ZecSend
suspend fun Synchronizer.send(spendingKey: UnifiedSpendingKey, send: ZecSend) = sendToAddress(
spendingKey,
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/ext/StringExt.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/ext/StringExt.kt
deleted file mode 100644
index 4cb17b29..00000000
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/ext/StringExt.kt
+++ /dev/null
@@ -1,9 +0,0 @@
-@file:Suppress("ktlint:filename")
-
-package cash.z.ecc.sdk.ext
-
-import java.nio.charset.Charset
-
-private val UTF_8 = Charset.forName("UTF-8")
-
-fun String.sizeInUtf8Bytes() = toByteArray(UTF_8).size
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/CurrencyConversionFixture.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/CurrencyConversionFixture.kt
deleted file mode 100644
index 0269e4d3..00000000
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/CurrencyConversionFixture.kt
+++ /dev/null
@@ -1,18 +0,0 @@
-package cash.z.ecc.sdk.fixture
-
-import cash.z.ecc.sdk.model.CurrencyConversion
-import cash.z.ecc.sdk.model.FiatCurrency
-import kotlinx.datetime.Instant
-import kotlinx.datetime.toInstant
-
-object CurrencyConversionFixture {
- val FIAT_CURRENCY = FiatCurrencyFixture.new()
- val TIMESTAMP = "2022-07-08T11:51:44Z".toInstant()
- const val PRICE_OF_ZEC = 54.98
-
- fun new(
- fiatCurrency: FiatCurrency = FIAT_CURRENCY,
- timestamp: Instant = TIMESTAMP,
- priceOfZec: Double = PRICE_OF_ZEC
- ) = CurrencyConversion(fiatCurrency, timestamp, priceOfZec)
-}
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/FiatCurrencyFixture.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/FiatCurrencyFixture.kt
deleted file mode 100644
index 86c9580f..00000000
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/FiatCurrencyFixture.kt
+++ /dev/null
@@ -1,9 +0,0 @@
-package cash.z.ecc.sdk.fixture
-
-import cash.z.ecc.sdk.model.FiatCurrency
-
-object FiatCurrencyFixture {
- const val USD = "USD"
-
- fun new(code: String = USD) = FiatCurrency(code)
-}
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/MemoFixture.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/MemoFixture.kt
index 7653516e..cbae75f0 100644
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/MemoFixture.kt
+++ b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/MemoFixture.kt
@@ -1,6 +1,6 @@
package cash.z.ecc.sdk.fixture
-import cash.z.ecc.sdk.model.Memo
+import cash.z.ecc.android.sdk.model.Memo
object MemoFixture {
const val MEMO_STRING = "Thanks for lunch"
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/PersistableWalletFixture.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/PersistableWalletFixture.kt
index 8eaeadd1..21b301b8 100644
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/PersistableWalletFixture.kt
+++ b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/PersistableWalletFixture.kt
@@ -1,9 +1,9 @@
package cash.z.ecc.sdk.fixture
import cash.z.ecc.android.sdk.model.BlockHeight
+import cash.z.ecc.android.sdk.model.PersistableWallet
+import cash.z.ecc.android.sdk.model.SeedPhrase
import cash.z.ecc.android.sdk.model.ZcashNetwork
-import cash.z.ecc.sdk.model.PersistableWallet
-import cash.z.ecc.sdk.model.SeedPhrase
object PersistableWalletFixture {
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/SeedPhraseFixture.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/SeedPhraseFixture.kt
index 4f7e850a..7c8ff73d 100644
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/SeedPhraseFixture.kt
+++ b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/SeedPhraseFixture.kt
@@ -1,6 +1,6 @@
package cash.z.ecc.sdk.fixture
-import cash.z.ecc.sdk.model.SeedPhrase
+import cash.z.ecc.android.sdk.model.SeedPhrase
object SeedPhraseFixture {
@Suppress("MaxLineLength")
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/WalletAddressFixture.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/WalletAddressFixture.kt
deleted file mode 100644
index 6adb7a6c..00000000
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/WalletAddressFixture.kt
+++ /dev/null
@@ -1,18 +0,0 @@
-package cash.z.ecc.sdk.fixture
-
-import cash.z.ecc.sdk.model.WalletAddress
-
-object WalletAddressFixture {
-
- // These fixture values are derived from the secret defined in PersistableWalletFixture
- @Suppress("MaxLineLength")
- const val UNIFIED_ADDRESS_STRING = "utest1qwerty6tj6989fcf0r57aavfnypj0krtxnmz93ty7ujr7d0spdxnz97kfdcugq9ndglvyg7v89m78dparu33q0putwaf2kvnsypsh8juzmcdvnedjlrrwhel9ldr203p7wc922luxup"
-
- @Suppress("MaxLineLength")
- const val SAPLING_ADDRESS_STRING = "zs1hf72k87gev2qnvg9228vn2xt97adfelju2hm2ap4xwrxkau5dz56mvkeseer3u8283wmy7skt4u"
- const val TRANSPARENT_ADDRESS_STRING = "t1QZMTZaU1EwXppCLL5dR6U9y2M4ph3CSPK"
-
- suspend fun unified() = WalletAddress.Unified.new(UNIFIED_ADDRESS_STRING)
- suspend fun sapling() = WalletAddress.Sapling.new(SAPLING_ADDRESS_STRING)
- suspend fun transparent() = WalletAddress.Transparent.new(TRANSPARENT_ADDRESS_STRING)
-}
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/WalletAddressesFixture.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/WalletAddressesFixture.kt
deleted file mode 100644
index 36b39ba6..00000000
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/WalletAddressesFixture.kt
+++ /dev/null
@@ -1,17 +0,0 @@
-package cash.z.ecc.sdk.fixture
-
-import cash.z.ecc.sdk.model.WalletAddress
-import cash.z.ecc.sdk.model.WalletAddresses
-
-object WalletAddressesFixture {
-
- suspend fun new(
- unified: String = WalletAddressFixture.UNIFIED_ADDRESS_STRING,
- sapling: String = WalletAddressFixture.SAPLING_ADDRESS_STRING,
- transparent: String = WalletAddressFixture.TRANSPARENT_ADDRESS_STRING
- ) = WalletAddresses(
- WalletAddress.Unified.new(unified),
- WalletAddress.Sapling.new(sapling),
- WalletAddress.Transparent.new(transparent)
- )
-}
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/ZecRequestFixture.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/ZecRequestFixture.kt
index eca8225d..4c4b6a63 100644
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/ZecRequestFixture.kt
+++ b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/ZecRequestFixture.kt
@@ -1,7 +1,8 @@
package cash.z.ecc.sdk.fixture
+import cash.z.ecc.android.sdk.fixture.WalletAddressFixture
+import cash.z.ecc.android.sdk.model.WalletAddress
import cash.z.ecc.android.sdk.model.Zatoshi
-import cash.z.ecc.sdk.model.WalletAddress
import cash.z.ecc.sdk.model.ZecRequest
import cash.z.ecc.sdk.model.ZecRequestMessage
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/ZecSendFixture.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/ZecSendFixture.kt
index e373625a..845d80f6 100644
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/ZecSendFixture.kt
+++ b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/ZecSendFixture.kt
@@ -1,9 +1,10 @@
package cash.z.ecc.sdk.fixture
+import cash.z.ecc.android.sdk.fixture.WalletAddressFixture
+import cash.z.ecc.android.sdk.model.Memo
+import cash.z.ecc.android.sdk.model.WalletAddress
import cash.z.ecc.android.sdk.model.Zatoshi
-import cash.z.ecc.sdk.model.Memo
-import cash.z.ecc.sdk.model.WalletAddress
-import cash.z.ecc.sdk.model.ZecSend
+import cash.z.ecc.android.sdk.model.ZecSend
object ZecSendFixture {
const val ADDRESS: String = WalletAddressFixture.UNIFIED_ADDRESS_STRING
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/Zip321UriBuildFixture.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/Zip321UriBuildFixture.kt
index 299c8300..aa90de27 100644
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/Zip321UriBuildFixture.kt
+++ b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/Zip321UriBuildFixture.kt
@@ -1,7 +1,8 @@
package cash.z.ecc.sdk.fixture
+import cash.z.ecc.android.sdk.fixture.WalletAddressFixture
+import cash.z.ecc.android.sdk.model.WalletAddress
import cash.z.ecc.android.sdk.model.Zatoshi
-import cash.z.ecc.sdk.model.WalletAddress
import cash.z.ecc.sdk.model.ZecRequest
import cash.z.ecc.sdk.model.ZecRequestMessage
import kotlinx.coroutines.runBlocking
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/Zip321UriParseFixture.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/Zip321UriParseFixture.kt
index 30733e67..b49fe89c 100644
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/Zip321UriParseFixture.kt
+++ b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/fixture/Zip321UriParseFixture.kt
@@ -1,7 +1,8 @@
package cash.z.ecc.sdk.fixture
+import cash.z.ecc.android.sdk.fixture.WalletAddressFixture
+import cash.z.ecc.android.sdk.model.WalletAddress
import cash.z.ecc.android.sdk.model.Zatoshi
-import cash.z.ecc.sdk.model.WalletAddress
import cash.z.ecc.sdk.model.ZecRequest
import cash.z.ecc.sdk.model.ZecRequestMessage
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/CompactBlockProcessorExt.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/CompactBlockProcessorExt.kt
index 2789b354..d88c5d58 100644
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/CompactBlockProcessorExt.kt
+++ b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/CompactBlockProcessorExt.kt
@@ -1,6 +1,7 @@
package cash.z.ecc.sdk.model
import cash.z.ecc.android.sdk.block.CompactBlockProcessor
+import cash.z.ecc.android.sdk.model.PercentDecimal
fun CompactBlockProcessor.ProcessorInfo.downloadProgress(): PercentDecimal {
val lastDownloadRangeSnapshot = lastDownloadRange
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/CurrencyConversion.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/CurrencyConversion.kt
deleted file mode 100644
index 886aaa3b..00000000
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/CurrencyConversion.kt
+++ /dev/null
@@ -1,35 +0,0 @@
-package cash.z.ecc.sdk.model
-
-import kotlinx.datetime.Instant
-
-/**
- * Represents a snapshot in time of a currency conversion rate.
- *
- * @param fiatCurrency The fiat currency for this conversion.
- * @param timestamp The timestamp when this conversion was obtained. This value is returned by
- * the server so it shouldn't have issues with client-side clock inaccuracy.
- * @param priceOfZec The conversion rate of ZEC to the fiat currency.
- */
-data class CurrencyConversion(
- val fiatCurrency: FiatCurrency,
- val timestamp: Instant,
- val priceOfZec: Double
-) {
- init {
- require(priceOfZec > 0) { "priceOfZec must be greater than 0" }
- require(priceOfZec.isFinite()) { "priceOfZec must be finite" }
- }
-}
-
-/**
- * Represents an ISO 4217 currency code.
- */
-@Suppress("MagicNumber")
-data class FiatCurrency(val code: String) {
- init {
- require(code.length == 3) { "Fiat currency code must be 3 characters long." }
-
- // TODO [#532] https://github.com/zcash/secant-android-wallet/issues/532
- // Add another check to make sure the code is in the known ISO currency code list.
- }
-}
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/Memo.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/Memo.kt
deleted file mode 100644
index 68757add..00000000
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/Memo.kt
+++ /dev/null
@@ -1,24 +0,0 @@
-package cash.z.ecc.sdk.model
-
-import cash.z.ecc.sdk.ext.sizeInUtf8Bytes
-
-@JvmInline
-value class Memo(val value: String) {
- init {
- require(isWithinMaxLength(value)) {
- "Memo length in bytes must be less than $MAX_MEMO_LENGTH_BYTES but " +
- "actually has length ${value.sizeInUtf8Bytes()}"
- }
- }
-
- companion object {
- /**
- * The decoded memo contents MUST NOT exceed 512 bytes.
- *
- * https://zips.z.cash/zip-0321
- */
- private const val MAX_MEMO_LENGTH_BYTES = 512
-
- fun isWithinMaxLength(memoString: String) = memoString.sizeInUtf8Bytes() <= MAX_MEMO_LENGTH_BYTES
- }
-}
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/PercentDecimal.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/PercentDecimal.kt
deleted file mode 100644
index 12c72cad..00000000
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/PercentDecimal.kt
+++ /dev/null
@@ -1,25 +0,0 @@
-package cash.z.ecc.sdk.model
-
-/**
- * @param decimal A percent represented as a `Double` decimal value in the range of [0, 1].
- */
-@JvmInline
-value class PercentDecimal(val decimal: Float) {
- init {
- require(decimal >= MIN)
- require(decimal <= MAX)
- }
-
- companion object {
- const val MIN = 0.0f
- const val MAX = 1.0f
- val ZERO_PERCENT = PercentDecimal(MIN)
- val ONE_HUNDRED_PERCENT = PercentDecimal(MAX)
-
- fun newLenient(decimal: Float) = PercentDecimal(
- decimal
- .coerceAtLeast(MIN)
- .coerceAtMost(MAX)
- )
- }
-}
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/PersistableWallet.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/PersistableWallet.kt
deleted file mode 100644
index 02428453..00000000
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/PersistableWallet.kt
+++ /dev/null
@@ -1,89 +0,0 @@
-package cash.z.ecc.sdk.model
-
-import android.app.Application
-import cash.z.ecc.android.bip39.Mnemonics
-import cash.z.ecc.android.bip39.toEntropy
-import cash.z.ecc.android.sdk.model.BlockHeight
-import cash.z.ecc.android.sdk.model.ZcashNetwork
-import cash.z.ecc.sdk.type.fromResources
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.withContext
-import org.json.JSONObject
-
-/**
- * Represents everything needed to save and restore a wallet.
- */
-data class PersistableWallet(
- val network: ZcashNetwork,
- val birthday: BlockHeight?,
- val seedPhrase: SeedPhrase
-) {
-
- /**
- * @return Wallet serialized to JSON format, suitable for long-term encrypted storage.
- */
- // Note: We're using a hand-crafted serializer so that we're less likely to have accidental
- // breakage from reflection or annotation based methods, and so that we can carefully manage versioning.
- fun toJson() = JSONObject().apply {
- put(KEY_VERSION, VERSION_1)
- put(KEY_NETWORK_ID, network.id)
- birthday?.let {
- put(KEY_BIRTHDAY, it.value)
- }
- put(KEY_SEED_PHRASE, seedPhrase.joinToString())
- }
-
- // For security, intentionally override the toString method to reduce risk of accidentally logging secrets
- override fun toString() = "PersistableWallet"
-
- companion object {
- private const val VERSION_1 = 1
-
- internal const val KEY_VERSION = "v"
- internal const val KEY_NETWORK_ID = "network_ID"
- internal const val KEY_BIRTHDAY = "birthday"
- internal const val KEY_SEED_PHRASE = "seed_phrase"
-
- fun from(jsonObject: JSONObject): PersistableWallet {
- when (val version = jsonObject.getInt(KEY_VERSION)) {
- VERSION_1 -> {
- val network = run {
- val networkId = jsonObject.getInt(KEY_NETWORK_ID)
- ZcashNetwork.from(networkId)
- }
- val birthday = if (jsonObject.has(KEY_BIRTHDAY)) {
- val birthdayBlockHeightLong = jsonObject.getLong(KEY_BIRTHDAY)
- BlockHeight.new(network, birthdayBlockHeightLong)
- } else {
- null
- }
- val seedPhrase = jsonObject.getString(KEY_SEED_PHRASE)
-
- return PersistableWallet(network, birthday, SeedPhrase.new(seedPhrase))
- }
- else -> {
- throw IllegalArgumentException("Unsupported version $version")
- }
- }
- }
-
- /**
- * @return A new PersistableWallet with a random seed phrase.
- */
- suspend fun new(application: Application): PersistableWallet {
- val zcashNetwork = ZcashNetwork.fromResources(application)
- val birthday = BlockHeight.ofLatestCheckpoint(application, zcashNetwork)
-
- val seedPhrase = newSeedPhrase()
-
- return PersistableWallet(zcashNetwork, birthday, seedPhrase)
- }
- }
-}
-
-// Using IO context because of https://github.com/zcash/kotlin-bip39/issues/13
-private suspend fun newMnemonic() = withContext(Dispatchers.IO) {
- Mnemonics.MnemonicCode(cash.z.ecc.android.bip39.Mnemonics.WordCount.COUNT_24.toEntropy()).words
-}
-
-private suspend fun newSeedPhrase() = SeedPhrase(newMnemonic().map { it.concatToString() })
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/SeedPhrase.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/SeedPhrase.kt
deleted file mode 100644
index 2006ed25..00000000
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/SeedPhrase.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-package cash.z.ecc.sdk.model
-
-import cash.z.ecc.android.bip39.Mnemonics
-import cash.z.ecc.android.bip39.toSeed
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.withContext
-
-// Consider using ImmutableList here
-data class SeedPhrase(val split: List) {
- init {
- require(SEED_PHRASE_SIZE == split.size) {
- "Seed phrase must split into $SEED_PHRASE_SIZE words but was ${split.size}"
- }
- }
-
- // For security, intentionally override the toString method to reduce risk of accidentally logging secrets
- override fun toString() = "SeedPhrase"
-
- fun joinToString() = split.joinToString(DEFAULT_DELIMITER)
-
- suspend fun toByteArray() = withContext(Dispatchers.IO) { Mnemonics.MnemonicCode(joinToString()).toSeed() }
-
- companion object {
- const val SEED_PHRASE_SIZE = 24
-
- const val DEFAULT_DELIMITER = " "
-
- fun new(phrase: String) = SeedPhrase(phrase.split(DEFAULT_DELIMITER))
- }
-}
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/SeedPhraseValidation.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/SeedPhraseValidation.kt
index 8e412710..e95f01f3 100644
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/SeedPhraseValidation.kt
+++ b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/SeedPhraseValidation.kt
@@ -1,6 +1,7 @@
package cash.z.ecc.sdk.model
import cash.z.ecc.android.bip39.Mnemonics
+import cash.z.ecc.android.sdk.model.SeedPhrase
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.util.Locale
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/WalletAddress.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/WalletAddress.kt
deleted file mode 100644
index b12731fe..00000000
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/WalletAddress.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-package cash.z.ecc.sdk.model
-
-sealed class WalletAddress(val address: String) {
- class Unified private constructor(address: String) : WalletAddress(address) {
- companion object {
- suspend fun new(address: String): WalletAddress.Unified {
- // https://github.com/zcash/zcash-android-wallet-sdk/issues/342
- // TODO [#342]: refactor SDK to enable direct calls for address verification
- return WalletAddress.Unified(address)
- }
- }
- }
-
- class Sapling private constructor(address: String) : WalletAddress(address) {
- companion object {
- suspend fun new(address: String): Sapling {
- // TODO [#342]: https://github.com/zcash/zcash-android-wallet-sdk/issues/342
- // TODO [#342]: refactor SDK to enable direct calls for address verification
- return Sapling(address)
- }
- }
- }
-
- class Transparent private constructor(address: String) : WalletAddress(address) {
- companion object {
- suspend fun new(address: String): Transparent {
- // TODO [#342]: https://github.com/zcash/zcash-android-wallet-sdk/issues/342
- // TODO [#342]: refactor SDK to enable direct calls for address verification
- return Transparent(address)
- }
- }
- }
-
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (javaClass != other?.javaClass) return false
-
- other as WalletAddress
-
- if (address != other.address) return false
-
- return true
- }
-
- override fun hashCode() = address.hashCode()
-}
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/WalletAddresses.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/WalletAddresses.kt
deleted file mode 100644
index 8410321e..00000000
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/WalletAddresses.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package cash.z.ecc.sdk.model
-
-import cash.z.ecc.android.sdk.Synchronizer
-import cash.z.ecc.android.sdk.model.Account
-
-data class WalletAddresses(
- val unified: WalletAddress.Unified,
- val sapling: WalletAddress.Sapling,
- val transparent: WalletAddress.Transparent
-) {
- // Override to prevent leaking details in logs
- override fun toString() = "WalletAddresses"
-
- companion object {
- suspend fun new(synchronizer: Synchronizer): WalletAddresses {
- val unifiedAddress = WalletAddress.Unified.new(
- synchronizer.getUnifiedAddress(Account.DEFAULT)
- )
- val saplingAddress = WalletAddress.Sapling.new(
- synchronizer.getSaplingAddress(Account.DEFAULT)
- )
- val transparentAddress = WalletAddress.Transparent.new(
- synchronizer.getTransparentAddress(Account.DEFAULT)
- )
-
- return WalletAddresses(
- unified = unifiedAddress,
- sapling = saplingAddress,
- transparent = transparentAddress
- )
- }
- }
-}
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/ZecRequest.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/ZecRequest.kt
index 88a9bc1a..e5d961ed 100644
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/ZecRequest.kt
+++ b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/ZecRequest.kt
@@ -1,5 +1,6 @@
package cash.z.ecc.sdk.model
+import cash.z.ecc.android.sdk.model.WalletAddress
import cash.z.ecc.android.sdk.model.Zatoshi
import cash.z.ecc.sdk.fixture.Zip321UriBuildFixture
import cash.z.ecc.sdk.fixture.Zip321UriParseFixture
diff --git a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/ZecSend.kt b/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/ZecSend.kt
deleted file mode 100644
index b9294fc3..00000000
--- a/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/ZecSend.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-package cash.z.ecc.sdk.model
-
-import cash.z.ecc.android.sdk.model.Zatoshi
-
-data class ZecSend(val destination: WalletAddress, val amount: Zatoshi, val memo: Memo) {
- companion object
-}
diff --git a/sdk-ext-ui-lib/build.gradle.kts b/sdk-ext-ui-lib/build.gradle.kts
deleted file mode 100644
index 1838eb6b..00000000
--- a/sdk-ext-ui-lib/build.gradle.kts
+++ /dev/null
@@ -1,38 +0,0 @@
-plugins {
- id("com.android.library")
- kotlin("android")
- id("secant.android-build-conventions")
- id("wtf.emulator.gradle")
- id("secant.emulator-wtf-conventions")
- id("secant.jacoco-conventions")
-}
-
-android {
- namespace = "cash.z.ecc.sdk.ext.ui"
- testNamespace = "cash.z.ecc.sdk.ext.ui.test"
- resourcePrefix = "co_electriccoin_zcash_"
-}
-
-dependencies {
- implementation(projects.sdkExtLib)
-
- implementation(libs.kotlinx.coroutines.core)
- implementation(libs.kotlinx.datetime)
-
- androidTestImplementation(libs.bundles.androidx.test)
- androidTestImplementation(libs.kotlin.test)
-
- androidTestUtil(libs.androidx.test.services) {
- artifact {
- type = "apk"
- }
- }
-
- if (project.property("IS_USE_TEST_ORCHESTRATOR").toString().toBoolean()) {
- androidTestUtil(libs.androidx.test.orchestrator) {
- artifact {
- type = "apk"
- }
- }
- }
-}
diff --git a/sdk-ext-ui-lib/proguard-consumer.txt b/sdk-ext-ui-lib/proguard-consumer.txt
deleted file mode 100644
index e69de29b..00000000
diff --git a/sdk-ext-ui-lib/src/androidTest/AndroidManifest.xml b/sdk-ext-ui-lib/src/androidTest/AndroidManifest.xml
deleted file mode 100644
index 49bef3a5..00000000
--- a/sdk-ext-ui-lib/src/androidTest/AndroidManifest.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/sdk-ext-ui-lib/src/androidTest/java/cash/z/ecc/sdk/ext/ui/model/FiatCurrencyConversionRateStateTest.kt b/sdk-ext-ui-lib/src/androidTest/java/cash/z/ecc/sdk/ext/ui/model/FiatCurrencyConversionRateStateTest.kt
deleted file mode 100644
index 9e819503..00000000
--- a/sdk-ext-ui-lib/src/androidTest/java/cash/z/ecc/sdk/ext/ui/model/FiatCurrencyConversionRateStateTest.kt
+++ /dev/null
@@ -1,109 +0,0 @@
-package cash.z.ecc.sdk.ext.ui.model
-
-import androidx.test.filters.SmallTest
-import cash.z.ecc.sdk.ext.ui.fixture.LocaleFixture
-import cash.z.ecc.sdk.ext.ui.fixture.MonetarySeparatorsFixture
-import cash.z.ecc.sdk.ext.ui.toFiatCurrencyState
-import cash.z.ecc.sdk.fixture.CurrencyConversionFixture
-import cash.z.ecc.sdk.fixture.ZatoshiFixture
-import kotlinx.datetime.Clock
-import kotlinx.datetime.Instant
-import org.junit.Test
-import kotlin.test.assertIs
-import kotlin.time.Duration.Companion.seconds
-
-class FiatCurrencyConversionRateStateTest {
- @Test
- @SmallTest
- fun future_near() {
- val zatoshi = ZatoshiFixture.new()
-
- val frozenClock = FrozenClock(
- CurrencyConversionFixture.TIMESTAMP - FiatCurrencyConversionRateState.FUTURE_CUTOFF_AGE_INCLUSIVE
- )
-
- val currencyConversion = CurrencyConversionFixture.new()
-
- val result = zatoshi.toFiatCurrencyState(currencyConversion, LocaleFixture.new(), MonetarySeparatorsFixture.new(), frozenClock)
-
- assertIs(result)
- }
-
- @Test
- @SmallTest
- fun future_far() {
- val zatoshi = ZatoshiFixture.new()
-
- val frozenClock = FrozenClock(
- CurrencyConversionFixture.TIMESTAMP - FiatCurrencyConversionRateState.FUTURE_CUTOFF_AGE_INCLUSIVE - 1.seconds
- )
-
- val currencyConversion = CurrencyConversionFixture.new()
-
- val result = zatoshi.toFiatCurrencyState(currencyConversion, LocaleFixture.new(), MonetarySeparatorsFixture.new(), frozenClock)
-
- assertIs(result)
- }
-
- @Test
- @SmallTest
- fun current() {
- val zatoshi = ZatoshiFixture.new()
-
- val frozenClock = FrozenClock(CurrencyConversionFixture.TIMESTAMP)
-
- val currencyConversion = CurrencyConversionFixture.new(
- timestamp = CurrencyConversionFixture.TIMESTAMP - 1.seconds
- )
-
- val result = zatoshi.toFiatCurrencyState(currencyConversion, LocaleFixture.new(), MonetarySeparatorsFixture.new(), frozenClock)
-
- assertIs(result)
- }
-
- @Test
- @SmallTest
- fun stale() {
- val zatoshi = ZatoshiFixture.new()
-
- val frozenClock = FrozenClock(CurrencyConversionFixture.TIMESTAMP)
-
- val currencyConversion = CurrencyConversionFixture.new(
- timestamp = CurrencyConversionFixture.TIMESTAMP - FiatCurrencyConversionRateState.CURRENT_CUTOFF_AGE_INCLUSIVE - 1.seconds
- )
-
- val result = zatoshi.toFiatCurrencyState(currencyConversion, LocaleFixture.new(), MonetarySeparatorsFixture.new(), frozenClock)
-
- assertIs(result)
- }
-
- @Test
- @SmallTest
- fun too_stale() {
- val zatoshi = ZatoshiFixture.new()
-
- val frozenClock = FrozenClock(CurrencyConversionFixture.TIMESTAMP)
-
- val currencyConversion = CurrencyConversionFixture.new(
- timestamp = CurrencyConversionFixture.TIMESTAMP - FiatCurrencyConversionRateState.STALE_CUTOFF_AGE_INCLUSIVE - 1.seconds
- )
-
- val result = zatoshi.toFiatCurrencyState(currencyConversion, LocaleFixture.new(), MonetarySeparatorsFixture.new(), frozenClock)
-
- assertIs(result)
- }
-
- @Test
- @SmallTest
- fun null_conversion_rate() {
- val zatoshi = ZatoshiFixture.new()
-
- val result = zatoshi.toFiatCurrencyState(null, LocaleFixture.new(), MonetarySeparatorsFixture.new())
-
- assertIs(result)
- }
-}
-
-private class FrozenClock(private val timestamp: Instant) : Clock {
- override fun now() = timestamp
-}
diff --git a/sdk-ext-ui-lib/src/androidTest/java/cash/z/ecc/sdk/ext/ui/model/LocaleTest.kt b/sdk-ext-ui-lib/src/androidTest/java/cash/z/ecc/sdk/ext/ui/model/LocaleTest.kt
deleted file mode 100644
index 7f70faa8..00000000
--- a/sdk-ext-ui-lib/src/androidTest/java/cash/z/ecc/sdk/ext/ui/model/LocaleTest.kt
+++ /dev/null
@@ -1,26 +0,0 @@
-package cash.z.ecc.sdk.ext.ui.model
-
-import androidx.test.filters.SmallTest
-import org.junit.Test
-import kotlin.test.assertEquals
-
-class LocaleTest {
- @Test
- @SmallTest
- fun toKotlinLocale() {
- val javaLocale = java.util.Locale.forLanguageTag("en-US")
-
- val kotlinLocale = javaLocale.toKotlinLocale()
- assertEquals("en", kotlinLocale.language)
- assertEquals("US", kotlinLocale.region)
- assertEquals(null, kotlinLocale.variant)
- }
-
- @Test
- @SmallTest
- fun toJavaLocale() {
- val kotlinLocale = cash.z.ecc.sdk.ext.ui.model.Locale("en", "US", null)
- val javaLocale = kotlinLocale.toJavaLocale()
- assertEquals("en-US", javaLocale.toLanguageTag())
- }
-}
diff --git a/sdk-ext-ui-lib/src/androidTest/java/cash/z/ecc/sdk/ext/ui/model/ZatoshiExtTest.kt b/sdk-ext-ui-lib/src/androidTest/java/cash/z/ecc/sdk/ext/ui/model/ZatoshiExtTest.kt
deleted file mode 100644
index 5956e709..00000000
--- a/sdk-ext-ui-lib/src/androidTest/java/cash/z/ecc/sdk/ext/ui/model/ZatoshiExtTest.kt
+++ /dev/null
@@ -1,77 +0,0 @@
-package cash.z.ecc.sdk.ext.ui.model
-
-import androidx.test.filters.SmallTest
-import cash.z.ecc.sdk.ext.ui.fixture.LocaleFixture
-import cash.z.ecc.sdk.ext.ui.fixture.MonetarySeparatorsFixture
-import cash.z.ecc.sdk.ext.ui.toFiatString
-import cash.z.ecc.sdk.fixture.CurrencyConversionFixture
-import cash.z.ecc.sdk.fixture.ZatoshiFixture
-import org.junit.Test
-import kotlin.test.assertNotNull
-import kotlin.test.assertTrue
-
-class ZatoshiExtTest {
- companion object {
- private val EN_US_SEPARATORS = MonetarySeparatorsFixture.new()
- private val CURRENCY_CONVERSION = CurrencyConversionFixture.new()
- }
-
- @Test
- @SmallTest
- fun zero_zatoshi_to_fiat_conversion_test() {
- val zatoshi = ZatoshiFixture.new(0L)
- val fiatString = zatoshi.toFiatString(CURRENCY_CONVERSION, LocaleFixture.new(), EN_US_SEPARATORS)
-
- fiatString.also {
- assertNotNull(it)
- assertTrue(it.isNotEmpty())
- assertTrue(it.contains("0"))
- assertTrue(it.isValidNumber(EN_US_SEPARATORS))
- }
- }
-
- @Test
- @SmallTest
- fun regular_zatoshi_to_fiat_conversion_test() {
- val zatoshi = ZatoshiFixture.new(123_456_789L)
- val fiatString = zatoshi.toFiatString(CURRENCY_CONVERSION, LocaleFixture.new(), EN_US_SEPARATORS)
-
- fiatString.also {
- assertNotNull(it)
- assertTrue(it.isNotEmpty())
- assertTrue(it.isValidNumber(EN_US_SEPARATORS))
- }
- }
-
- @Test
- @SmallTest
- fun rounded_zatoshi_to_fiat_conversion_test() {
- val roundedZatoshi = ZatoshiFixture.new(100_000_000L)
- val roundedCurrencyConversion = CurrencyConversionFixture.new(
- priceOfZec = 100.0
- )
-
- val fiatString = roundedZatoshi.toFiatString(
- roundedCurrencyConversion,
- LocaleFixture.new(),
- EN_US_SEPARATORS
- )
-
- fiatString.also {
- assertNotNull(it)
- assertTrue(it.isNotEmpty())
- assertTrue(it.isValidNumber(EN_US_SEPARATORS))
- assertTrue("$100${EN_US_SEPARATORS.decimal}00" == it)
- }
- }
-}
-
-private fun Char.isDigitOrSeparator(separators: MonetarySeparators): Boolean {
- return this.isDigit() || this == separators.decimal || this == separators.grouping
-}
-
-private fun String.isValidNumber(separators: MonetarySeparators): Boolean {
- return this
- .drop(1) // remove currency symbol
- .all { return it.isDigitOrSeparator(separators) }
-}
diff --git a/sdk-ext-ui-lib/src/androidTest/java/cash/z/ecc/sdk/ext/ui/model/ZecStringTest.kt b/sdk-ext-ui-lib/src/androidTest/java/cash/z/ecc/sdk/ext/ui/model/ZecStringTest.kt
deleted file mode 100644
index 2b8fd3c9..00000000
--- a/sdk-ext-ui-lib/src/androidTest/java/cash/z/ecc/sdk/ext/ui/model/ZecStringTest.kt
+++ /dev/null
@@ -1,100 +0,0 @@
-package cash.z.ecc.sdk.ext.ui.model
-
-import android.content.Context
-import android.content.res.Configuration
-import androidx.test.core.app.ApplicationProvider
-import androidx.test.filters.SmallTest
-import cash.z.ecc.android.sdk.model.Zatoshi
-import cash.z.ecc.sdk.ext.ui.fixture.MonetarySeparatorsFixture
-import org.junit.Assert.assertEquals
-import org.junit.Ignore
-import org.junit.Test
-import java.util.Locale
-import kotlin.test.assertNotNull
-import kotlin.test.assertNull
-
-class ZecStringTest {
-
- companion object {
- private val EN_US_MONETARY_SEPARATORS = MonetarySeparatorsFixture.new()
- private val context = run {
- val applicationContext = ApplicationProvider.getApplicationContext()
- val enUsConfiguration = Configuration(applicationContext.resources.configuration).apply {
- setLocale(Locale.US)
- }
- applicationContext.createConfigurationContext(enUsConfiguration)
- }
- }
-
- @Test
- fun empty_string() {
- val actual = Zatoshi.fromZecString(context, "", EN_US_MONETARY_SEPARATORS)
- val expected = null
-
- assertEquals(expected, actual)
- }
-
- @Test
- fun decimal_monetary_separator() {
- val actual = Zatoshi.fromZecString(context, "1.13", EN_US_MONETARY_SEPARATORS)
- val expected = Zatoshi(113000000L)
-
- assertEquals(expected, actual)
- }
-
- @Test
- fun comma_grouping_separator() {
- val actual = Zatoshi.fromZecString(context, "1,130", EN_US_MONETARY_SEPARATORS)
- val expected = Zatoshi(113000000000L)
-
- assertEquals(expected, actual)
- }
-
- @Test
- fun decimal_monetary_and() {
- val actual = Zatoshi.fromZecString(context, "1,130", EN_US_MONETARY_SEPARATORS)
- val expected = Zatoshi(113000000000L)
-
- assertEquals(expected, actual)
- }
-
- @Test
- @Ignore("https://github.com/zcash/zcash-android-wallet-sdk/issues/412")
- fun toZecString() {
- val expected = "1.13000000"
- val actual = Zatoshi(113000000).toZecString()
-
- assertEquals(expected, actual)
- }
-
- @Test
- @Ignore("https://github.com/zcash/zcash-android-wallet-sdk/issues/412")
- fun round_trip() {
- val expected = Zatoshi(113000000L)
- val actual = Zatoshi.fromZecString(context, expected.toZecString(), EN_US_MONETARY_SEPARATORS)
-
- assertEquals(expected, actual)
- }
-
- @Test
- fun parse_bad_string() {
- assertNull(Zatoshi.fromZecString(context, "", EN_US_MONETARY_SEPARATORS))
- assertNull(Zatoshi.fromZecString(context, "+@#$~^&*=", EN_US_MONETARY_SEPARATORS))
- assertNull(Zatoshi.fromZecString(context, "asdf", EN_US_MONETARY_SEPARATORS))
- }
-
- @Test
- fun parse_invalid_numbers() {
- assertNull(Zatoshi.fromZecString(context, "", EN_US_MONETARY_SEPARATORS))
- assertNull(Zatoshi.fromZecString(context, "1,2", EN_US_MONETARY_SEPARATORS))
- assertNull(Zatoshi.fromZecString(context, "1,23,", EN_US_MONETARY_SEPARATORS))
- assertNull(Zatoshi.fromZecString(context, "1,234,", EN_US_MONETARY_SEPARATORS))
- }
-
- @Test
- @SmallTest
- fun overflow_number_test() {
- assertNotNull(Zatoshi.fromZecString(context, "21,000,000", EN_US_MONETARY_SEPARATORS))
- assertNull(Zatoshi.fromZecString(context, "21,000,001", EN_US_MONETARY_SEPARATORS))
- }
-}
diff --git a/sdk-ext-ui-lib/src/androidTest/java/cash/z/ecc/sdk/ext/ui/regex/ZecStringExtTest.kt b/sdk-ext-ui-lib/src/androidTest/java/cash/z/ecc/sdk/ext/ui/regex/ZecStringExtTest.kt
deleted file mode 100644
index 535d4901..00000000
--- a/sdk-ext-ui-lib/src/androidTest/java/cash/z/ecc/sdk/ext/ui/regex/ZecStringExtTest.kt
+++ /dev/null
@@ -1,169 +0,0 @@
-package cash.z.ecc.sdk.ext.ui.regex
-
-import androidx.test.filters.SmallTest
-import cash.z.ecc.sdk.ext.ui.R
-import cash.z.ecc.sdk.ext.ui.ZecStringExt
-import cash.z.ecc.sdk.ext.ui.fixture.MonetarySeparatorsFixture
-import cash.z.ecc.sdk.ext.ui.test.getStringResourceWithArgs
-import org.junit.Test
-import kotlin.test.assertFalse
-import kotlin.test.assertNotNull
-import kotlin.test.assertTrue
-
-class ZecStringExtTest {
-
- companion object {
- private val EN_US_SEPARATORS = MonetarySeparatorsFixture.new()
- }
-
- private fun getContinuousRegex(): Regex {
- return getStringResourceWithArgs(
- R.string.co_electriccoin_zcash_zec_amount_regex_continuous_filter,
- arrayOf(
- EN_US_SEPARATORS.grouping,
- EN_US_SEPARATORS.decimal
- )
- ).toRegex()
- }
-
- private fun getConfirmRegex(): Regex {
- return getStringResourceWithArgs(
- R.string.co_electriccoin_zcash_zec_amount_regex_confirm_filter,
- arrayOf(
- EN_US_SEPARATORS.grouping,
- EN_US_SEPARATORS.decimal
- )
- ).toRegex()
- }
-
- @Test
- @SmallTest
- fun check_continuous_regex_validity() {
- val regexString = getStringResourceWithArgs(
- R.string.co_electriccoin_zcash_zec_amount_regex_continuous_filter,
- arrayOf(
- EN_US_SEPARATORS.grouping,
- EN_US_SEPARATORS.decimal
- )
- )
- assertNotNull(regexString)
-
- val regexAmountChecker = regexString.toRegex()
-
- regexAmountChecker.also {
- assertNotNull(regexAmountChecker)
- assertTrue(regexAmountChecker.pattern.isNotEmpty())
- }
- }
-
- @Test
- @SmallTest
- fun check_confirm_regex_validity() {
- val regexString = getStringResourceWithArgs(
- R.string.co_electriccoin_zcash_zec_amount_regex_confirm_filter,
- arrayOf(
- EN_US_SEPARATORS.grouping,
- EN_US_SEPARATORS.decimal
- )
- )
- assertNotNull(regexString)
-
- val regexAmountChecker = regexString.toRegex()
-
- regexAmountChecker.also {
- assertNotNull(regexAmountChecker)
- assertTrue(regexAmountChecker.pattern.isNotEmpty())
- }
- }
-
- @Test
- @SmallTest
- fun check_continuous_regex_functionality_valid_inputs() {
- getContinuousRegex().also {
- assertTrue(it.matches(""))
- assertTrue(it.matches("123"))
- assertTrue(it.matches("${EN_US_SEPARATORS.decimal}"))
- assertTrue(it.matches("${EN_US_SEPARATORS.decimal}123"))
- assertTrue(it.matches("123${EN_US_SEPARATORS.grouping}"))
- assertTrue(it.matches("123${EN_US_SEPARATORS.grouping}456"))
- assertTrue(it.matches("123${EN_US_SEPARATORS.decimal}"))
- assertTrue(it.matches("123${EN_US_SEPARATORS.decimal}456"))
- assertTrue(it.matches("123${EN_US_SEPARATORS.grouping}456${EN_US_SEPARATORS.decimal}"))
- assertTrue(it.matches("123${EN_US_SEPARATORS.grouping}456${EN_US_SEPARATORS.decimal}789"))
- assertTrue(it.matches("1${EN_US_SEPARATORS.grouping}234${EN_US_SEPARATORS.grouping}567${EN_US_SEPARATORS.decimal}00"))
- }
- }
-
- @Test
- @SmallTest
- fun check_continuous_regex_functionality_invalid_inputs() {
- getContinuousRegex().also {
- assertFalse(it.matches("aaa"))
- assertFalse(it.matches("123aaa"))
- assertFalse(it.matches("${EN_US_SEPARATORS.grouping}"))
- assertFalse(it.matches("${EN_US_SEPARATORS.grouping}123"))
- assertFalse(it.matches("123${EN_US_SEPARATORS.grouping}${EN_US_SEPARATORS.grouping}"))
- assertFalse(it.matches("123${EN_US_SEPARATORS.decimal}${EN_US_SEPARATORS.decimal}"))
- assertFalse(it.matches("1${EN_US_SEPARATORS.grouping}2${EN_US_SEPARATORS.grouping}3"))
- assertFalse(it.matches("1${EN_US_SEPARATORS.decimal}2${EN_US_SEPARATORS.decimal}3"))
- assertFalse(it.matches("1${EN_US_SEPARATORS.decimal}2${EN_US_SEPARATORS.grouping}3"))
- }
- }
-
- @Test
- @SmallTest
- fun check_confirm_regex_functionality_valid_inputs() {
- getConfirmRegex().also {
- assertTrue(it.matches("123"))
- assertTrue(it.matches(".123"))
- assertTrue(it.matches("1,234"))
- assertTrue(it.matches("1,234,567,890"))
- assertTrue(it.matches("1.2"))
- assertTrue(it.matches("123.4"))
- assertTrue(it.matches("1.234"))
- assertTrue(it.matches("1,123."))
- assertTrue(it.matches("1,234.567"))
- assertTrue(it.matches("1,234,567.890"))
- }
- }
-
- @Test
- @SmallTest
- fun check_confirm_regex_functionality_invalid_inputs() {
- getContinuousRegex().also {
- assertFalse(it.matches("+@#$~^&*="))
- assertFalse(it.matches("asdf"))
- assertFalse(it.matches(".."))
- assertFalse(it.matches(","))
- assertFalse(it.matches(",,"))
- assertFalse(it.matches(",."))
- assertFalse(it.matches(".,"))
- assertFalse(it.matches(",123"))
- assertFalse(it.matches("1,2,3"))
- assertFalse(it.matches("1.2,3,4"))
- assertFalse(it.matches("123,,456"))
- assertFalse(it.matches("123..456"))
- assertFalse(it.matches("1.234,567"))
- assertFalse(it.matches("1.234,567,890"))
- }
- }
-
- @Test
- @SmallTest
- fun check_digits_between_grouping_separators_valid_test() {
- assertTrue(ZecStringExt.checkFor3Digits(EN_US_SEPARATORS, "123"))
- assertTrue(ZecStringExt.checkFor3Digits(EN_US_SEPARATORS, "1${EN_US_SEPARATORS.grouping}234"))
- assertTrue(ZecStringExt.checkFor3Digits(EN_US_SEPARATORS, "1${EN_US_SEPARATORS.grouping}234${EN_US_SEPARATORS.grouping}"))
- assertTrue(ZecStringExt.checkFor3Digits(EN_US_SEPARATORS, "1${EN_US_SEPARATORS.grouping}234${EN_US_SEPARATORS.grouping}5"))
- assertTrue(ZecStringExt.checkFor3Digits(EN_US_SEPARATORS, "1${EN_US_SEPARATORS.grouping}234${EN_US_SEPARATORS.grouping}567${EN_US_SEPARATORS.grouping}8"))
- }
-
- @Test
- @SmallTest
- fun check_digits_between_grouping_separators_invalid_test() {
- assertFalse(ZecStringExt.checkFor3Digits(EN_US_SEPARATORS, "1${EN_US_SEPARATORS.grouping}1${EN_US_SEPARATORS.grouping}2"))
- assertFalse(ZecStringExt.checkFor3Digits(EN_US_SEPARATORS, "1${EN_US_SEPARATORS.grouping}12${EN_US_SEPARATORS.grouping}3"))
- assertFalse(ZecStringExt.checkFor3Digits(EN_US_SEPARATORS, "1${EN_US_SEPARATORS.grouping}1234${EN_US_SEPARATORS.grouping}"))
- assertFalse(ZecStringExt.checkFor3Digits(EN_US_SEPARATORS, "1${EN_US_SEPARATORS.grouping}123${EN_US_SEPARATORS.grouping}4${EN_US_SEPARATORS.grouping}"))
- }
-}
diff --git a/sdk-ext-ui-lib/src/androidTest/java/cash/z/ecc/sdk/ext/ui/test/Global.kt b/sdk-ext-ui-lib/src/androidTest/java/cash/z/ecc/sdk/ext/ui/test/Global.kt
deleted file mode 100644
index accb0672..00000000
--- a/sdk-ext-ui-lib/src/androidTest/java/cash/z/ecc/sdk/ext/ui/test/Global.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-package cash.z.ecc.sdk.ext.ui.test
-
-import android.content.Context
-import android.text.TextUtils
-import android.view.View
-import androidx.annotation.StringRes
-import androidx.test.core.app.ApplicationProvider
-import java.util.Locale
-
-fun getStringResource(@StringRes resId: Int) = ApplicationProvider.getApplicationContext().getString(resId)
-
-fun getStringResourceWithArgs(@StringRes resId: Int, formatArgs: Array) = ApplicationProvider.getApplicationContext().getString(resId, *formatArgs)
-
-fun isLocaleRTL(locale: Locale) = TextUtils.getLayoutDirectionFromLocale(locale) == View.LAYOUT_DIRECTION_RTL
diff --git a/sdk-ext-ui-lib/src/main/AndroidManifest.xml b/sdk-ext-ui-lib/src/main/AndroidManifest.xml
deleted file mode 100644
index b85da638..00000000
--- a/sdk-ext-ui-lib/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/ZatoshiExt.kt b/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/ZatoshiExt.kt
deleted file mode 100644
index 6cb07991..00000000
--- a/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/ZatoshiExt.kt
+++ /dev/null
@@ -1,90 +0,0 @@
-@file:Suppress("ktlint:filename")
-
-package cash.z.ecc.sdk.ext.ui
-
-import cash.z.ecc.android.sdk.ext.Conversions
-import cash.z.ecc.android.sdk.model.Zatoshi
-import cash.z.ecc.sdk.ext.ui.model.FiatCurrencyConversionRateState
-import cash.z.ecc.sdk.ext.ui.model.Locale
-import cash.z.ecc.sdk.ext.ui.model.MonetarySeparators
-import cash.z.ecc.sdk.ext.ui.model.toJavaLocale
-import cash.z.ecc.sdk.model.CurrencyConversion
-import kotlinx.datetime.Clock
-import java.math.BigDecimal
-import java.math.MathContext
-import java.math.RoundingMode
-import java.text.DecimalFormat
-import java.text.NumberFormat
-import java.util.Currency
-import kotlin.time.Duration
-
-fun Zatoshi.toFiatCurrencyState(
- currencyConversion: CurrencyConversion?,
- locale: Locale,
- monetarySeparators: MonetarySeparators,
- clock: Clock = Clock.System
-): FiatCurrencyConversionRateState {
- if (currencyConversion == null) {
- return FiatCurrencyConversionRateState.Unavailable
- }
-
- val fiatCurrencyConversionRate = toFiatString(currencyConversion, locale, monetarySeparators)
-
- val currentSystemTime = clock.now()
-
- val age = currentSystemTime - currencyConversion.timestamp
-
- return if (age < Duration.ZERO && age.absoluteValue > FiatCurrencyConversionRateState.FUTURE_CUTOFF_AGE_INCLUSIVE) {
- // Special case if the device's clock is set to the future.
- // TODO [#535]: Consider using NTP requests to get the correct time instead of relying on the device's clock.
- FiatCurrencyConversionRateState.Unavailable
- } else if (age <= FiatCurrencyConversionRateState.CURRENT_CUTOFF_AGE_INCLUSIVE) {
- FiatCurrencyConversionRateState.Current(fiatCurrencyConversionRate)
- } else if (age <= FiatCurrencyConversionRateState.STALE_CUTOFF_AGE_INCLUSIVE) {
- FiatCurrencyConversionRateState.Stale(fiatCurrencyConversionRate)
- } else {
- FiatCurrencyConversionRateState.Unavailable
- }
-}
-
-fun Zatoshi.toFiatString(
- currencyConversion: CurrencyConversion,
- locale: Locale,
- monetarySeparators: MonetarySeparators
-) =
- convertZatoshiToZecDecimal()
- .convertZecDecimalToFiatDecimal(BigDecimal(currencyConversion.priceOfZec))
- .convertFiatDecimalToFiatString(
- Currency.getInstance(currencyConversion.fiatCurrency.code),
- locale.toJavaLocale(),
- monetarySeparators
- )
-
-private fun Zatoshi.convertZatoshiToZecDecimal(): BigDecimal {
- return BigDecimal(value, MathContext.DECIMAL128).divide(
- Conversions.ONE_ZEC_IN_ZATOSHI,
- MathContext.DECIMAL128
- ).setScale(Conversions.ZEC_FORMATTER.maximumFractionDigits, RoundingMode.HALF_EVEN)
-}
-
-private fun BigDecimal.convertZecDecimalToFiatDecimal(zecPrice: BigDecimal): BigDecimal {
- return multiply(zecPrice, MathContext.DECIMAL128)
-}
-
-private fun BigDecimal.convertFiatDecimalToFiatString(
- fiatCurrency: Currency,
- locale: java.util.Locale,
- monetarySeparators: MonetarySeparators
-): String {
- return NumberFormat.getCurrencyInstance(locale).apply {
- currency = fiatCurrency
- roundingMode = RoundingMode.HALF_EVEN
- if (this is DecimalFormat) {
- decimalFormatSymbols.apply {
- decimalSeparator = monetarySeparators.decimal
- monetaryDecimalSeparator = monetarySeparators.decimal
- groupingSeparator = monetarySeparators.grouping
- }
- }
- }.format(this)
-}
diff --git a/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/ZecSendExt.kt b/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/ZecSendExt.kt
deleted file mode 100644
index 635c8078..00000000
--- a/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/ZecSendExt.kt
+++ /dev/null
@@ -1,53 +0,0 @@
-package cash.z.ecc.sdk.ext.ui
-
-import android.content.Context
-import cash.z.ecc.android.sdk.model.Zatoshi
-import cash.z.ecc.sdk.ext.ui.model.MonetarySeparators
-import cash.z.ecc.sdk.ext.ui.model.fromZecString
-import cash.z.ecc.sdk.model.Memo
-import cash.z.ecc.sdk.model.WalletAddress
-import cash.z.ecc.sdk.model.ZecSend
-import kotlinx.coroutines.runBlocking
-
-object ZecSendExt {
-
- fun new(
- context: Context,
- destinationString: String,
- zecString: String,
- memoString: String,
- monetarySeparators: MonetarySeparators
- ): ZecSendValidation {
- // This runBlocking shouldn't have a performance impact, since everything needs to be loaded at this point.
- // However it would be better to eliminate it entirely.
- val destination = runBlocking { WalletAddress.Unified.new(destinationString) }
- val amount = Zatoshi.fromZecString(context, zecString, monetarySeparators)
- val memo = Memo(memoString)
-
- val validationErrors = buildSet {
- if (null == amount) {
- add(ZecSendValidation.Invalid.ValidationError.INVALID_AMOUNT)
- }
-
- // TODO [#250]: Implement all validation
- // TODO [#342]: https://github.com/zcash/zcash-android-wallet-sdk/issues/342
- }
-
- return if (validationErrors.isEmpty()) {
- ZecSendValidation.Valid(ZecSend(destination, amount!!, memo))
- } else {
- ZecSendValidation.Invalid(validationErrors)
- }
- }
-
- sealed class ZecSendValidation {
- data class Valid(val zecSend: ZecSend) : ZecSendValidation()
- data class Invalid(val validationErrors: Set) : ZecSendValidation() {
- enum class ValidationError {
- INVALID_ADDRESS,
- INVALID_AMOUNT,
- INVALID_MEMO
- }
- }
- }
-}
diff --git a/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/ZecStringExt.kt b/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/ZecStringExt.kt
deleted file mode 100644
index c12f413d..00000000
--- a/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/ZecStringExt.kt
+++ /dev/null
@@ -1,91 +0,0 @@
-package cash.z.ecc.sdk.ext.ui
-
-import android.content.Context
-import cash.z.ecc.sdk.ext.ui.model.MonetarySeparators
-
-object ZecStringExt {
-
- private const val DIGITS_BETWEEN_GROUP_SEPARATORS = 3
-
- /**
- * Builds filter with current local monetary separators for continuous input checking. The
- * solution is built upon regex validation and other common string validation checks.
- *
- * Regex example: ^([0-9]*([0-9]+([,]$|[,][0-9]+))*([.]$|[.][0-9]+)?)?$
- * Inputs may differ according to user locale.
- *
- * Valid amounts: "" . | .123 | 123, | 123. | 123,456 | 123.456 | 123,456.789 | 123,456,789 | 123,456,789.123 | etc.
- * Invalid amounts: 123,, | 123,. | 123.. | ,123 | 123.456.789 | etc.
- *
- * @param context used for loading localized pattern from strings.xml
- * @param separators which consist of localized monetary separators
- * @param zecString to be validated
- *
- * @return true in case of validation success, false otherwise
- */
- fun filterContinuous(context: Context, separators: MonetarySeparators, zecString: String): Boolean {
- if (!context.getString(
- R.string.co_electriccoin_zcash_zec_amount_regex_continuous_filter,
- separators.grouping,
- separators.decimal
- ).toRegex().matches(zecString) || !checkFor3Digits(separators, zecString)
- ) {
- return false
- }
- return true
- }
-
- /**
- * Checks for at least 3 digits between grouping separators.
- *
- * @param separators which consist of localized monetary separators
- * @param zecString to be validated
- *
- * @return true in case of validation success, false otherwise
- */
- fun checkFor3Digits(separators: MonetarySeparators, zecString: String): Boolean {
- if (zecString.count { it == separators.grouping } >= 2) {
- val groups = zecString.split(separators.grouping)
- for (i in 1 until (groups.size - 1)) {
- if (groups[i].length != DIGITS_BETWEEN_GROUP_SEPARATORS) {
- return false
- }
- }
- }
- return true
- }
-
- /**
- * Builds filter with current local monetary separators for validation of entered ZEC amount
- * after confirm button is pressed. The solution is built upon regex validation and other common
- * string validation checks.
- *
- * Regex example: ^([0-9]{1,3}(?:[,]?[0-9]{3})*)*(?:[0-9]*[.][0-9]*)?$
- * Inputs may differ according to user locale.
- *
- * Valid amounts: 123 | .123 | 123. | 123, | 123.456 | 123,456 | 123,456.789 | 123,456,789 | 123,456,789.123 | etc.
- * Invalid amounts: "" | , | . | 123,, | 123,. | 123.. | ,123 | 123.456.789 | etc.
- *
- * @param context used for loading localized pattern from strings.xml
- * @param separators which consist of localized monetary separators
- * @param zecString to be validated
- *
- * @return true in case of validation success, false otherwise
- */
- fun filterConfirm(context: Context, separators: MonetarySeparators, zecString: String): Boolean {
- if (zecString.isBlank() ||
- zecString == separators.grouping.toString() ||
- zecString == separators.decimal.toString()
- ) {
- return false
- }
-
- return (
- context.getString(
- R.string.co_electriccoin_zcash_zec_amount_regex_confirm_filter,
- separators.grouping,
- separators.decimal
- ).toRegex().matches(zecString) && checkFor3Digits(separators, zecString)
- )
- }
-}
diff --git a/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/fixture/LocaleFixture.kt b/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/fixture/LocaleFixture.kt
deleted file mode 100644
index 35983dcd..00000000
--- a/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/fixture/LocaleFixture.kt
+++ /dev/null
@@ -1,15 +0,0 @@
-package cash.z.ecc.sdk.ext.ui.fixture
-
-import cash.z.ecc.sdk.ext.ui.model.Locale
-
-object LocaleFixture {
- const val LANGUAGE = "en"
- const val COUNTRY = "US"
- val VARIANT: String? = null
-
- fun new(
- language: String = LANGUAGE,
- country: String? = COUNTRY,
- variant: String? = VARIANT
- ) = Locale(language, country, variant)
-}
diff --git a/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/fixture/MonetarySeparatorsFixture.kt b/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/fixture/MonetarySeparatorsFixture.kt
deleted file mode 100644
index d33859ea..00000000
--- a/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/fixture/MonetarySeparatorsFixture.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-package cash.z.ecc.sdk.ext.ui.fixture
-
-import cash.z.ecc.sdk.ext.ui.model.MonetarySeparators
-
-object MonetarySeparatorsFixture {
- const val US_GROUPING_SEPARATOR = ','
- const val US_DECIMAL_SEPARATOR = '.'
-
- fun new(
- grouping: Char = US_GROUPING_SEPARATOR,
- decimal: Char = US_DECIMAL_SEPARATOR
- ) = MonetarySeparators(grouping, decimal)
-}
diff --git a/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/model/FiatCurrencyConversionRateState.kt b/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/model/FiatCurrencyConversionRateState.kt
deleted file mode 100644
index e59be9bb..00000000
--- a/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/model/FiatCurrencyConversionRateState.kt
+++ /dev/null
@@ -1,40 +0,0 @@
-package cash.z.ecc.sdk.ext.ui.model
-
-import kotlin.time.Duration.Companion.days
-import kotlin.time.Duration.Companion.minutes
-
-/**
- * Represents a state of current fiat currency conversion to ZECs.
- */
-sealed class FiatCurrencyConversionRateState {
- /**
- * @param formattedFiatValue A fiat value formatted as a localized string. E.g. $1.00.
- */
- data class Current(val formattedFiatValue: String) : FiatCurrencyConversionRateState()
-
- /**
- * @param formattedFiatValue A fiat value formatted as a localized string. E.g. $1.00.
- */
- data class Stale(val formattedFiatValue: String) : FiatCurrencyConversionRateState()
- object Unavailable : FiatCurrencyConversionRateState()
-
- companion object {
-
- /**
- * Cutoff negative age. Some users may intentionally set their clock forward 10 minutes
- * because they're always late to things. This allows the app to mostly work for those users,
- * while still failing if the clock is way off.
- */
- val FUTURE_CUTOFF_AGE_INCLUSIVE = 10.minutes
-
- /**
- * Cutoff age for next attempt to refresh the conversion rate from the API.
- */
- val CURRENT_CUTOFF_AGE_INCLUSIVE = 1.minutes
-
- /**
- * Cutoff age for displaying conversion rate from prior app launches or background refresh.
- */
- val STALE_CUTOFF_AGE_INCLUSIVE = 1.days
- }
-}
diff --git a/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/model/Locale.kt b/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/model/Locale.kt
deleted file mode 100644
index 34ebb399..00000000
--- a/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/model/Locale.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package cash.z.ecc.sdk.ext.ui.model
-
-data class Locale(val language: String, val region: String?, val variant: String?) {
- companion object
-}
-
-fun Locale.toJavaLocale(): java.util.Locale {
- return if (!region.isNullOrEmpty() && !variant.isNullOrEmpty()) {
- java.util.Locale(language, region, variant)
- } else if (!region.isNullOrEmpty() && variant.isNullOrEmpty()) {
- java.util.Locale(language, region)
- } else {
- java.util.Locale(language)
- }
-}
-
-fun java.util.Locale.toKotlinLocale(): Locale {
- val resultCountry = if (country.isNullOrEmpty()) {
- null
- } else {
- country
- }
-
- val resultVariant = if (variant.isNullOrEmpty()) {
- null
- } else {
- variant
- }
-
- return Locale(language, resultCountry, resultVariant)
-}
diff --git a/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/model/ZecString.kt b/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/model/ZecString.kt
deleted file mode 100644
index bfea8e8f..00000000
--- a/sdk-ext-ui-lib/src/main/java/cash/z/ecc/sdk/ext/ui/model/ZecString.kt
+++ /dev/null
@@ -1,107 +0,0 @@
-package cash.z.ecc.sdk.ext.ui.model
-
-import android.content.Context
-import cash.z.ecc.android.sdk.ext.convertZatoshiToZecString
-import cash.z.ecc.android.sdk.ext.convertZecToZatoshi
-import cash.z.ecc.android.sdk.model.Zatoshi
-import cash.z.ecc.sdk.ext.ui.ZecStringExt
-import java.math.BigDecimal
-import java.math.RoundingMode
-import java.text.DecimalFormat
-import java.text.DecimalFormatSymbols
-import java.text.ParseException
-import java.util.Locale
-
-object ZecString {
-
- fun allowedCharacters(monetarySeparators: MonetarySeparators) = buildSet {
- add('0')
- add('1')
- add('2')
- add('3')
- add('4')
- add('5')
- add('6')
- add('7')
- add('8')
- add('9')
- add(monetarySeparators.decimal)
- add(monetarySeparators.grouping)
- }
-}
-
-data class MonetarySeparators(val grouping: Char, val decimal: Char) {
- init {
- require(grouping != decimal) { "Grouping and decimal separator cannot be the same character" }
- }
-
- companion object {
- /**
- * @return The current localized monetary separators. Do not cache this value, as it
- * can change if the system Locale changes.
- */
- fun current(): MonetarySeparators {
- val decimalFormatSymbols = DecimalFormatSymbols.getInstance()
-
- return MonetarySeparators(
- decimalFormatSymbols.groupingSeparator,
- decimalFormatSymbols.monetaryDecimalSeparator
- )
- }
- }
-}
-
-private const val DECIMALS = 8
-
-// TODO [#412]: https://github.com/zcash/zcash-android-wallet-sdk/issues/412
-// The SDK needs to fix the API for currency conversion
-fun Zatoshi.toZecString() = convertZatoshiToZecString(DECIMALS, DECIMALS)
-
-/*
- * ZEC is our own currency, so there's not going to be an existing localization that matches it perfectly.
- *
- * To ensure consistent behavior regardless of user Locale, use US localization except that we swap out the
- * separator characters based on the user's current Locale. This should avoid unexpected surprises
- * while also localizing the separator format.
- */
-/**
- * @return [zecString] parsed into Zatoshi or null if parsing failed.
- */
-@SuppressWarnings("ReturnCount")
-fun Zatoshi.Companion.fromZecString(
- context: Context,
- zecString: String,
- monetarySeparators: MonetarySeparators
-): Zatoshi? {
- if (!ZecStringExt.filterConfirm(context, monetarySeparators, zecString)) {
- return null
- }
-
- val symbols = DecimalFormatSymbols.getInstance(Locale.US).apply {
- this.groupingSeparator = monetarySeparators.grouping
- this.decimalSeparator = monetarySeparators.decimal
- }
- val localizedPattern = "#${monetarySeparators.grouping}##0${monetarySeparators.decimal}0#"
-
- // TODO [#321]: https://github.com/zcash/secant-android-wallet/issues/321
- val decimalFormat = DecimalFormat(localizedPattern, symbols).apply {
- isParseBigDecimal = true
- roundingMode = RoundingMode.HALF_EVEN // aka Bankers rounding
- }
-
- // TODO [#343]: https://github.com/zcash/secant-android-wallet/issues/343
- val bigDecimal = try {
- decimalFormat.parse(zecString) as BigDecimal
- } catch (e: NumberFormatException) {
- null
- } catch (e: ParseException) {
- null
- }
-
- @Suppress("SwallowedException")
- return try {
- bigDecimal.convertZecToZatoshi()
- } catch (e: IllegalArgumentException) {
- null
- }
-}
diff --git a/sdk-ext-ui-lib/src/main/res/values/strings.xml b/sdk-ext-ui-lib/src/main/res/values/strings.xml
deleted file mode 100644
index 14b3c37a..00000000
--- a/sdk-ext-ui-lib/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
- ^([0-9]*([0-9]+([%1$s]$|[%1$s][0-9]+))*([%2$s]$|[%2$s][0-9]+)?)?$
- ^([0-9]{1,3}(?:[%1$s]?[0-9]{3})*)*(?:[0-9]*[%2$s][0-9]*)?$
-
diff --git a/settings.gradle.kts b/settings.gradle.kts
index f6b2946b..11093409 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -228,6 +228,7 @@ dependencyResolutionManagement {
library("play-update", "com.google.android.play:app-update:$playAppUpdateVersion")
library("play-update-ktx", "com.google.android.play:app-update-ktx:$playAppUpdateKtxVersion")
library("zcash-sdk", "cash.z.ecc.android:zcash-android-sdk:$zcashSdkVersion")
+ library("zcash-sdk-incubator", "cash.z.ecc.android:zcash-android-sdk-incubator:$zcashSdkVersion")
library("zcash-bip39", "cash.z.ecc.android:kotlin-bip39:$zcashBip39Version")
library("zcash-walletplgns", "cash.z.ecc.android:zcash-android-wallet-plugins:$zcashBip39Version")
library("zxing", "com.google.zxing:core:$zxingVersion")
@@ -311,7 +312,6 @@ include("crash-android-lib")
include("preference-api-lib")
include("preference-impl-android-lib")
include("sdk-ext-lib")
-include("sdk-ext-ui-lib")
include("spackle-lib")
include("spackle-android-lib")
include("test-lib")
diff --git a/ui-lib/build.gradle.kts b/ui-lib/build.gradle.kts
index db2af153..acf8cfb8 100644
--- a/ui-lib/build.gradle.kts
+++ b/ui-lib/build.gradle.kts
@@ -68,6 +68,7 @@ dependencies {
implementation(libs.kotlinx.coroutines.guava)
implementation(libs.kotlinx.datetime)
implementation(libs.zcash.sdk)
+ implementation(libs.zcash.sdk.incubator)
implementation(libs.zcash.bip39)
implementation(libs.zxing)
@@ -76,7 +77,6 @@ dependencies {
implementation(projects.preferenceApiLib)
implementation(projects.preferenceImplAndroidLib)
implementation(projects.sdkExtLib)
- implementation(projects.sdkExtUiLib)
implementation(projects.spackleAndroidLib)
api(projects.uiDesignLib)
diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/address/view/WalletAddressViewTest.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/address/view/WalletAddressViewTest.kt
index 0c5123e8..e08bf4bd 100644
--- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/address/view/WalletAddressViewTest.kt
+++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/address/view/WalletAddressViewTest.kt
@@ -6,8 +6,8 @@ import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import androidx.test.filters.MediumTest
-import cash.z.ecc.sdk.fixture.WalletAddressesFixture
-import cash.z.ecc.sdk.model.WalletAddresses
+import cash.z.ecc.android.sdk.fixture.WalletAddressesFixture
+import cash.z.ecc.android.sdk.model.WalletAddresses
import co.electriccoin.zcash.test.UiTestPrerequisites
import co.electriccoin.zcash.ui.R
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/home/HomeTestSetup.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/home/HomeTestSetup.kt
index 51daa8c8..ccacdc53 100644
--- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/home/HomeTestSetup.kt
+++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/home/HomeTestSetup.kt
@@ -59,7 +59,6 @@ class HomeTestSetup(
onRequestCount.incrementAndGet()
},
resetSdk = {},
- wipeEntireWallet = {},
isDebugMenuEnabled = false,
updateAvailable = false
)
diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/home/integration/HomeViewIntegrationTest.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/home/integration/HomeViewIntegrationTest.kt
index be840388..7c8ba485 100644
--- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/home/integration/HomeViewIntegrationTest.kt
+++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/home/integration/HomeViewIntegrationTest.kt
@@ -9,7 +9,7 @@ import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.unit.dp
import androidx.test.filters.MediumTest
import cash.z.ecc.android.sdk.Synchronizer
-import cash.z.ecc.sdk.model.PercentDecimal
+import cash.z.ecc.android.sdk.model.PercentDecimal
import co.electriccoin.zcash.test.UiTestPrerequisites
import co.electriccoin.zcash.ui.fixture.WalletSnapshotFixture
import co.electriccoin.zcash.ui.screen.home.HomeTag
diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/home/model/WalletDisplayValuesTest.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/home/model/WalletDisplayValuesTest.kt
index 429eb459..b5d4be08 100644
--- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/home/model/WalletDisplayValuesTest.kt
+++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/home/model/WalletDisplayValuesTest.kt
@@ -2,9 +2,9 @@ package co.electriccoin.zcash.ui.screen.home.model
import androidx.test.filters.SmallTest
import cash.z.ecc.android.sdk.Synchronizer
-import cash.z.ecc.sdk.ext.ui.model.FiatCurrencyConversionRateState
-import cash.z.ecc.sdk.ext.ui.model.toZecString
-import cash.z.ecc.sdk.model.PercentDecimal
+import cash.z.ecc.android.sdk.model.FiatCurrencyConversionRateState
+import cash.z.ecc.android.sdk.model.PercentDecimal
+import cash.z.ecc.android.sdk.model.toZecString
import co.electriccoin.zcash.ui.R
import co.electriccoin.zcash.ui.fixture.WalletSnapshotFixture
import co.electriccoin.zcash.ui.test.getAppContext
diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/profile/view/ProfileViewScreenBrightnessTest.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/profile/view/ProfileViewScreenBrightnessTest.kt
index b7d0c9cf..39e4b338 100644
--- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/profile/view/ProfileViewScreenBrightnessTest.kt
+++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/profile/view/ProfileViewScreenBrightnessTest.kt
@@ -4,8 +4,8 @@ import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.test.junit4.ComposeContentTestRule
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.test.filters.MediumTest
-import cash.z.ecc.sdk.fixture.WalletAddressFixture
-import cash.z.ecc.sdk.model.WalletAddress
+import cash.z.ecc.android.sdk.fixture.WalletAddressFixture
+import cash.z.ecc.android.sdk.model.WalletAddress
import co.electriccoin.zcash.test.UiTestPrerequisites
import co.electriccoin.zcash.ui.common.LocalScreenBrightness
import co.electriccoin.zcash.ui.common.ScreenBrightness
diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/profile/view/ProfileViewScreenTimeoutTest.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/profile/view/ProfileViewScreenTimeoutTest.kt
index 291662de..efa08b90 100644
--- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/profile/view/ProfileViewScreenTimeoutTest.kt
+++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/profile/view/ProfileViewScreenTimeoutTest.kt
@@ -4,8 +4,8 @@ import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.test.junit4.ComposeContentTestRule
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.test.filters.MediumTest
-import cash.z.ecc.sdk.fixture.WalletAddressFixture
-import cash.z.ecc.sdk.model.WalletAddress
+import cash.z.ecc.android.sdk.fixture.WalletAddressFixture
+import cash.z.ecc.android.sdk.model.WalletAddress
import co.electriccoin.zcash.test.UiTestPrerequisites
import co.electriccoin.zcash.ui.common.LocalScreenTimeout
import co.electriccoin.zcash.ui.common.ScreenTimeout
diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/profile/view/ProfileViewTest.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/profile/view/ProfileViewTest.kt
index cfd75d50..dcbad033 100644
--- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/profile/view/ProfileViewTest.kt
+++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/profile/view/ProfileViewTest.kt
@@ -7,8 +7,8 @@ import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performScrollTo
import androidx.test.filters.MediumTest
-import cash.z.ecc.sdk.fixture.WalletAddressFixture
-import cash.z.ecc.sdk.model.WalletAddress
+import cash.z.ecc.android.sdk.fixture.WalletAddressFixture
+import cash.z.ecc.android.sdk.model.WalletAddress
import co.electriccoin.zcash.ui.R
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
import co.electriccoin.zcash.ui.screen.profile.util.ProfileConfiguration
diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/request/view/RequestViewTest.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/request/view/RequestViewTest.kt
index 9e1e7d07..a29f929d 100644
--- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/request/view/RequestViewTest.kt
+++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/request/view/RequestViewTest.kt
@@ -9,9 +9,9 @@ import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performTextClearance
import androidx.compose.ui.test.performTextInput
import androidx.test.filters.MediumTest
+import cash.z.ecc.android.sdk.fixture.WalletAddressFixture
+import cash.z.ecc.android.sdk.model.MonetarySeparators
import cash.z.ecc.android.sdk.model.Zatoshi
-import cash.z.ecc.sdk.ext.ui.model.MonetarySeparators
-import cash.z.ecc.sdk.fixture.WalletAddressFixture
import cash.z.ecc.sdk.fixture.ZecRequestFixture
import cash.z.ecc.sdk.model.ZecRequest
import cash.z.ecc.sdk.model.ZecRequestMessage
diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/restore/model/ParseResultTest.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/restore/model/ParseResultTest.kt
index 37e4b7ba..70d1b939 100644
--- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/restore/model/ParseResultTest.kt
+++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/restore/model/ParseResultTest.kt
@@ -1,7 +1,7 @@
package co.electriccoin.zcash.ui.screen.restore.model
import androidx.test.filters.SmallTest
-import cash.z.ecc.sdk.model.SeedPhrase
+import cash.z.ecc.android.sdk.model.SeedPhrase
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/restore/view/RestoreViewTest.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/restore/view/RestoreViewTest.kt
index 78bfcb2c..fff994fc 100644
--- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/restore/view/RestoreViewTest.kt
+++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/restore/view/RestoreViewTest.kt
@@ -16,8 +16,8 @@ import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performTextInput
import androidx.test.filters.MediumTest
import cash.z.ecc.android.bip39.Mnemonics
+import cash.z.ecc.android.sdk.model.SeedPhrase
import cash.z.ecc.sdk.fixture.SeedPhraseFixture
-import cash.z.ecc.sdk.model.SeedPhrase
import co.electriccoin.zcash.test.UiTestPrerequisites
import co.electriccoin.zcash.ui.R
import co.electriccoin.zcash.ui.design.component.CommonTag
diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/send/ext/WalletAddressExtTest.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/send/ext/WalletAddressExtTest.kt
index 77adf1c3..81a57f12 100644
--- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/send/ext/WalletAddressExtTest.kt
+++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/send/ext/WalletAddressExtTest.kt
@@ -1,7 +1,7 @@
package co.electriccoin.zcash.ui.screen.send.ext
import androidx.test.filters.SmallTest
-import cash.z.ecc.sdk.fixture.WalletAddressFixture
+import cash.z.ecc.android.sdk.fixture.WalletAddressFixture
import co.electriccoin.zcash.ui.test.getAppContext
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runTest
diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/send/ext/ZecSendExtTest.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/send/ext/ZecSendExtTest.kt
index 532485c6..979f1ed9 100644
--- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/send/ext/ZecSendExtTest.kt
+++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/send/ext/ZecSendExtTest.kt
@@ -2,8 +2,8 @@ package co.electriccoin.zcash.ui.screen.send.ext
import androidx.compose.runtime.saveable.SaverScope
import androidx.test.filters.SmallTest
+import cash.z.ecc.android.sdk.model.ZecSend
import cash.z.ecc.sdk.fixture.ZecSendFixture
-import cash.z.ecc.sdk.model.ZecSend
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runTest
import kotlin.test.Test
diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/send/view/SendViewTest.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/send/view/SendViewTest.kt
index 6cb7479c..8ecb88b6 100644
--- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/send/view/SendViewTest.kt
+++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/send/view/SendViewTest.kt
@@ -14,14 +14,14 @@ import androidx.compose.ui.test.performTextClearance
import androidx.compose.ui.test.performTextInput
import androidx.test.filters.MediumTest
import cash.z.ecc.android.sdk.ext.collectWith
+import cash.z.ecc.android.sdk.fixture.WalletAddressFixture
+import cash.z.ecc.android.sdk.model.Memo
+import cash.z.ecc.android.sdk.model.MonetarySeparators
import cash.z.ecc.android.sdk.model.Zatoshi
-import cash.z.ecc.sdk.ext.ui.model.MonetarySeparators
+import cash.z.ecc.android.sdk.model.ZecSend
import cash.z.ecc.sdk.fixture.MemoFixture
-import cash.z.ecc.sdk.fixture.WalletAddressFixture
import cash.z.ecc.sdk.fixture.ZatoshiFixture
import cash.z.ecc.sdk.fixture.ZecRequestFixture
-import cash.z.ecc.sdk.model.Memo
-import cash.z.ecc.sdk.model.ZecSend
import co.electriccoin.zcash.test.UiTestPrerequisites
import co.electriccoin.zcash.ui.R
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/settings/view/SettingsViewTest.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/settings/view/SettingsViewTest.kt
index 7f4bf344..23a7e253 100644
--- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/settings/view/SettingsViewTest.kt
+++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/settings/view/SettingsViewTest.kt
@@ -13,7 +13,6 @@ import co.electriccoin.zcash.ui.test.getStringResource
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runTest
import org.junit.Assert.assertEquals
-import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import java.util.concurrent.atomic.AtomicInteger
@@ -79,27 +78,11 @@ class SettingsViewTest : UiTestPrerequisites() {
assertEquals(1, testSetup.getAnalyticsToggleCount())
}
- @Test
- @MediumTest
- @Ignore("Wipe has been disabled in Settings and is now a debug-only option")
- fun wipe() = runTest {
- val testSetup = TestSetup(composeTestRule)
-
- assertEquals(0, testSetup.getBackupCount())
-
- composeTestRule.onNodeWithText(getStringResource(R.string.settings_wipe)).also {
- it.performClick()
- }
-
- assertEquals(1, testSetup.getWipeCount())
- }
-
private class TestSetup(private val composeTestRule: ComposeContentTestRule) {
private val onBackCount = AtomicInteger(0)
private val onBackupCount = AtomicInteger(0)
private val onRescanCount = AtomicInteger(0)
- private val onWipeCount = AtomicInteger(0)
private val onAnalyticsChangedCount = AtomicInteger(0)
fun getOnBackCount(): Int {
@@ -117,11 +100,6 @@ class SettingsViewTest : UiTestPrerequisites() {
return onRescanCount.get()
}
- fun getWipeCount(): Int {
- composeTestRule.waitForIdle()
- return onWipeCount.get()
- }
-
fun getAnalyticsToggleCount(): Int {
composeTestRule.waitForIdle()
return onAnalyticsChangedCount.get()
@@ -141,9 +119,6 @@ class SettingsViewTest : UiTestPrerequisites() {
onRescanWallet = {
onRescanCount.incrementAndGet()
},
- onWipeWallet = {
- onWipeCount.incrementAndGet()
- },
onAnalyticsSettingsChanged = {
onAnalyticsChangedCount.incrementAndGet()
}
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/global/WalletCoordinator.kt b/ui-lib/src/main/java/co/electriccoin/zcash/global/WalletCoordinator.kt
index 64c60b00..adf925d8 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/global/WalletCoordinator.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/global/WalletCoordinator.kt
@@ -1,220 +1,26 @@
package co.electriccoin.zcash.global
import android.content.Context
-import cash.z.ecc.android.sdk.Synchronizer
-import cash.z.ecc.android.sdk.ext.onFirst
-import cash.z.ecc.android.sdk.model.LightWalletEndpoint
-import cash.z.ecc.android.sdk.model.ZcashNetwork
-import cash.z.ecc.android.sdk.model.defaultForNetwork
-import cash.z.ecc.sdk.model.PersistableWallet
-import cash.z.ecc.sdk.type.fromResources
+import cash.z.ecc.android.sdk.WalletCoordinator
import co.electriccoin.zcash.spackle.LazyWithArgument
-import co.electriccoin.zcash.spackle.Twig
import co.electriccoin.zcash.ui.preference.EncryptedPreferenceKeys
import co.electriccoin.zcash.ui.preference.EncryptedPreferenceSingleton
-import co.electriccoin.zcash.ui.preference.StandardPreferenceKeys
-import co.electriccoin.zcash.ui.preference.StandardPreferenceSingleton
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.DelicateCoroutinesApi
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.FlowPreview
-import kotlinx.coroutines.GlobalScope
-import kotlinx.coroutines.channels.awaitClose
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.MutableStateFlow
-import kotlinx.coroutines.flow.SharingStarted
-import kotlinx.coroutines.flow.StateFlow
-import kotlinx.coroutines.flow.callbackFlow
-import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.emitAll
-import kotlinx.coroutines.flow.filter
-import kotlinx.coroutines.flow.filterIsInstance
-import kotlinx.coroutines.flow.flatMapConcat
-import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flow
-import kotlinx.coroutines.flow.flowOf
-import kotlinx.coroutines.flow.map
-import kotlinx.coroutines.flow.stateIn
-import kotlinx.coroutines.launch
-import kotlinx.coroutines.sync.Mutex
-import kotlinx.coroutines.sync.withLock
-import java.util.UUID
-
-class WalletCoordinator(context: Context) {
- companion object {
- private val lazy = LazyWithArgument { WalletCoordinator(it) }
-
- fun getInstance(context: Context) = lazy.getInstance(context)
- }
-
- private val applicationContext = context.applicationContext
-
- /*
- * We want a global scope that is independent of the lifecycles of either
- * WorkManager or the UI.
- */
- @OptIn(DelicateCoroutinesApi::class)
- private val walletScope = CoroutineScope(GlobalScope.coroutineContext + Dispatchers.Main)
-
- private val synchronizerMutex = Mutex()
+private val lazy = LazyWithArgument {
/**
* A flow of the user's stored wallet. Null indicates that no wallet has been stored.
*/
val persistableWallet = flow {
// EncryptedPreferenceSingleton.getInstance() is a suspending function, which is why we need
// the flow builder to provide a coroutine context.
- val encryptedPreferenceProvider = EncryptedPreferenceSingleton.getInstance(applicationContext)
+ val encryptedPreferenceProvider = EncryptedPreferenceSingleton.getInstance(it)
emitAll(EncryptedPreferenceKeys.PERSISTABLE_WALLET.observe(encryptedPreferenceProvider))
}
- private val lockoutMutex = Mutex()
- private val synchronizerLockoutId = MutableStateFlow(null)
-
- private sealed class InternalSynchronizerStatus {
- object NoWallet : InternalSynchronizerStatus()
- class Available(val synchronizer: Synchronizer) : InternalSynchronizerStatus()
- class Lockout(val id: UUID) : InternalSynchronizerStatus()
- }
-
- private val synchronizerOrLockoutId: Flow> = persistableWallet
- .combine(synchronizerLockoutId) { persistableWallet: PersistableWallet?, lockoutId: UUID? ->
- if (null != lockoutId) { // this one needs to come first
- flowOf(InternalSynchronizerStatus.Lockout(lockoutId))
- } else if (null == persistableWallet) {
- flowOf(InternalSynchronizerStatus.NoWallet)
- } else {
- callbackFlow {
- val closeableSynchronizer = synchronizerMutex.withLock {
- Synchronizer.new(
- context = context,
- zcashNetwork = persistableWallet.network,
- lightWalletEndpoint = LightWalletEndpoint.defaultForNetwork(persistableWallet.network),
- birthday = persistableWallet.birthday,
- seed = persistableWallet.seedPhrase.toByteArray()
- )
- }
-
- trySend(InternalSynchronizerStatus.Available(closeableSynchronizer))
- awaitClose {
- Twig.info { "Closing flow and synchronizer" }
- closeableSynchronizer.close()
- }
- }
- }
- }
-
- /**
- * Synchronizer for the Zcash SDK. Emits null until a wallet secret is persisted.
- *
- * Note that this synchronizer is closed as soon as it stops being collected. For UI use
- * cases, see [WalletViewModel].
- */
- @OptIn(ExperimentalCoroutinesApi::class)
- val synchronizer: StateFlow = synchronizerOrLockoutId
- .flatMapLatest { it }
- .map {
- when (it) {
- is InternalSynchronizerStatus.Available -> it.synchronizer
- is InternalSynchronizerStatus.Lockout -> null
- InternalSynchronizerStatus.NoWallet -> null
- }
- }
- .stateIn(
- walletScope,
- SharingStarted.WhileSubscribed(),
- null
- )
-
- /**
- * Rescans the blockchain.
- *
- * In order for a rescan to occur, the synchronizer must be loaded already
- * which would happen if the UI is collecting it.
- *
- * @return True if the rescan was performed and false if the rescan was not performed.
- */
- suspend fun rescanBlockchain(): Boolean {
- synchronizerMutex.withLock {
- synchronizer.value?.let {
- it.latestBirthdayHeight?.let { height ->
- it.rewindToNearestHeight(height, true)
- return true
- }
- }
- }
-
- return false
- }
-
- /**
- * Resets persisted data in the SDK, but preserves the wallet secret. This will cause the
- * synchronizer to emit a new instance.
- */
- @OptIn(FlowPreview::class)
- fun resetSdk() {
- walletScope.launch {
- lockoutMutex.withLock {
- val lockoutId = UUID.randomUUID()
- synchronizerLockoutId.value = lockoutId
-
- synchronizerOrLockoutId
- .flatMapConcat { it }
- .filterIsInstance()
- .filter { it.id == lockoutId }
- .onFirst {
- synchronizerMutex.withLock {
- val didDelete = Synchronizer.erase(
- appContext = applicationContext,
- network = ZcashNetwork.fromResources(applicationContext)
- )
- Twig.info { "SDK erase result: $didDelete" }
- }
- }
-
- synchronizerLockoutId.value = null
- }
- }
- }
-
- /**
- * Wipes the wallet. Will cause the app-wide synchronizer to be reset with a new instance.
- */
- @OptIn(FlowPreview::class)
- fun wipeEntireWallet() {
- walletScope.launch {
- lockoutMutex.withLock {
- val lockoutId = UUID.randomUUID()
- synchronizerLockoutId.value = lockoutId
-
- synchronizerOrLockoutId
- .flatMapConcat { it }
- .filterIsInstance()
- .filter { it.id == lockoutId }
- .onFirst {
- // Note that clearing the data here is non-atomic since multiple files must be modified
-
- EncryptedPreferenceSingleton.getInstance(applicationContext).also { provider ->
- EncryptedPreferenceKeys.PERSISTABLE_WALLET.putValue(provider, null)
- }
-
- StandardPreferenceSingleton.getInstance(applicationContext).also { provider ->
- StandardPreferenceKeys.IS_USER_BACKUP_COMPLETE.putValue(provider, false)
- }
-
- synchronizerMutex.withLock {
- val didDelete = Synchronizer.erase(
- appContext = applicationContext,
- network = ZcashNetwork.fromResources(applicationContext)
- )
- Twig.info { "SDK erase result: $didDelete" }
- }
-
- synchronizerLockoutId.value = null
- }
- }
- }
- }
+ WalletCoordinator(it, persistableWallet)
}
+
+fun WalletCoordinator.Companion.getInstance(context: Context) = lazy.getInstance(context)
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/LocaleExt.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/LocaleExt.kt
index fe72b547..68cb7a5c 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/LocaleExt.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/LocaleExt.kt
@@ -4,4 +4,4 @@ package co.electriccoin.zcash.ui.common
import androidx.compose.ui.text.intl.Locale
-fun Locale.toKotlinLocale() = cash.z.ecc.sdk.ext.ui.model.Locale(language, region, script)
+fun Locale.toKotlinLocale() = cash.z.ecc.android.sdk.model.Locale(language, region, script)
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/fixture/WalletSnapshotFixture.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/fixture/WalletSnapshotFixture.kt
index 6d0aefa9..2c43b4a1 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/fixture/WalletSnapshotFixture.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/fixture/WalletSnapshotFixture.kt
@@ -2,9 +2,9 @@ package co.electriccoin.zcash.ui.fixture
import cash.z.ecc.android.sdk.Synchronizer
import cash.z.ecc.android.sdk.block.CompactBlockProcessor
+import cash.z.ecc.android.sdk.model.PercentDecimal
import cash.z.ecc.android.sdk.model.WalletBalance
import cash.z.ecc.android.sdk.model.Zatoshi
-import cash.z.ecc.sdk.model.PercentDecimal
import co.electriccoin.zcash.ui.screen.home.model.WalletSnapshot
import co.electriccoin.zcash.ui.screen.home.viewmodel.SynchronizerError
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/preference/FiatCurrencyPreferenceDefault.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/preference/FiatCurrencyPreferenceDefault.kt
index 5a9c4ee2..0b08f8b0 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/preference/FiatCurrencyPreferenceDefault.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/preference/FiatCurrencyPreferenceDefault.kt
@@ -1,6 +1,6 @@
package co.electriccoin.zcash.ui.preference
-import cash.z.ecc.sdk.model.FiatCurrency
+import cash.z.ecc.android.sdk.model.FiatCurrency
import co.electriccoin.zcash.preference.api.PreferenceProvider
import co.electriccoin.zcash.preference.model.entry.Key
import co.electriccoin.zcash.preference.model.entry.PreferenceDefault
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/preference/PersistableWalletPreferenceDefault.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/preference/PersistableWalletPreferenceDefault.kt
index c574141e..bcee7827 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/preference/PersistableWalletPreferenceDefault.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/preference/PersistableWalletPreferenceDefault.kt
@@ -1,6 +1,6 @@
package co.electriccoin.zcash.ui.preference
-import cash.z.ecc.sdk.model.PersistableWallet
+import cash.z.ecc.android.sdk.model.PersistableWallet
import co.electriccoin.zcash.preference.api.PreferenceProvider
import co.electriccoin.zcash.preference.model.entry.Key
import co.electriccoin.zcash.preference.model.entry.PreferenceDefault
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/address/view/WalletAddressView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/address/view/WalletAddressView.kt
index 285e4051..3f205e91 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/address/view/WalletAddressView.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/address/view/WalletAddressView.kt
@@ -38,8 +38,8 @@ import androidx.compose.ui.graphics.painter.ColorPainter
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
-import cash.z.ecc.sdk.fixture.WalletAddressesFixture
-import cash.z.ecc.sdk.model.WalletAddresses
+import cash.z.ecc.android.sdk.fixture.WalletAddressesFixture
+import cash.z.ecc.android.sdk.model.WalletAddresses
import co.electriccoin.zcash.ui.R
import co.electriccoin.zcash.ui.design.MINIMAL_WEIGHT
import co.electriccoin.zcash.ui.design.component.Body
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/backup/AndroidBackup.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/backup/AndroidBackup.kt
index b12be771..bbd0ae03 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/backup/AndroidBackup.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/backup/AndroidBackup.kt
@@ -8,7 +8,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
-import cash.z.ecc.sdk.model.PersistableWallet
+import cash.z.ecc.android.sdk.model.PersistableWallet
import co.electriccoin.zcash.ui.MainActivity
import co.electriccoin.zcash.ui.R
import co.electriccoin.zcash.ui.screen.backup.ext.Saver
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/backup/view/BackupView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/backup/view/BackupView.kt
index 01b5a83f..e40e643f 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/backup/view/BackupView.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/backup/view/BackupView.kt
@@ -38,8 +38,8 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Devices
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import cash.z.ecc.android.sdk.model.PersistableWallet
import cash.z.ecc.sdk.fixture.PersistableWalletFixture
-import cash.z.ecc.sdk.model.PersistableWallet
import co.electriccoin.zcash.spackle.model.Index
import co.electriccoin.zcash.ui.R
import co.electriccoin.zcash.ui.common.SecureScreen
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/AndroidHome.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/AndroidHome.kt
index 3da8eba0..19dd4ff0 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/AndroidHome.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/AndroidHome.kt
@@ -14,7 +14,6 @@ import co.electriccoin.zcash.ui.MainActivity
import co.electriccoin.zcash.ui.screen.home.view.Home
import co.electriccoin.zcash.ui.screen.home.viewmodel.CheckUpdateViewModel
import co.electriccoin.zcash.ui.screen.home.viewmodel.WalletViewModel
-import co.electriccoin.zcash.ui.screen.onboarding.viewmodel.OnboardingViewModel
import co.electriccoin.zcash.ui.screen.update.AppUpdateCheckerImp
import co.electriccoin.zcash.ui.screen.update.model.UpdateState
@@ -81,15 +80,6 @@ internal fun WrapHome(
resetSdk = {
walletViewModel.resetSdk()
},
- wipeEntireWallet = {
- // Although this is debug only, it still might be nice to show a warning dialog
- // before performing this action
- walletViewModel.wipeEntireWallet()
-
- val onboardingViewModel by activity.viewModels()
- onboardingViewModel.onboardingState.goToBeginning()
- onboardingViewModel.isImporting.value = false
- },
updateAvailable = updateAvailable
)
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/model/WalletDisplayValues.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/model/WalletDisplayValues.kt
index d92bfeff..c0b766f9 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/model/WalletDisplayValues.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/model/WalletDisplayValues.kt
@@ -3,11 +3,11 @@ package co.electriccoin.zcash.ui.screen.home.model
import android.content.Context
import androidx.compose.ui.text.intl.Locale
import cash.z.ecc.android.sdk.Synchronizer
-import cash.z.ecc.sdk.ext.ui.model.FiatCurrencyConversionRateState
-import cash.z.ecc.sdk.ext.ui.model.MonetarySeparators
-import cash.z.ecc.sdk.ext.ui.model.toZecString
-import cash.z.ecc.sdk.ext.ui.toFiatCurrencyState
-import cash.z.ecc.sdk.model.PercentDecimal
+import cash.z.ecc.android.sdk.model.FiatCurrencyConversionRateState
+import cash.z.ecc.android.sdk.model.MonetarySeparators
+import cash.z.ecc.android.sdk.model.PercentDecimal
+import cash.z.ecc.android.sdk.model.toFiatCurrencyState
+import cash.z.ecc.android.sdk.model.toZecString
import co.electriccoin.zcash.ui.R
import co.electriccoin.zcash.ui.common.toKotlinLocale
import kotlin.math.roundToInt
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/model/WalletSnapshot.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/model/WalletSnapshot.kt
index 1ebb1436..eaa023cb 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/model/WalletSnapshot.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/model/WalletSnapshot.kt
@@ -3,9 +3,9 @@ package co.electriccoin.zcash.ui.screen.home.model
import cash.z.ecc.android.sdk.Synchronizer
import cash.z.ecc.android.sdk.block.CompactBlockProcessor
import cash.z.ecc.android.sdk.ext.ZcashSdk
+import cash.z.ecc.android.sdk.model.PercentDecimal
import cash.z.ecc.android.sdk.model.WalletBalance
import cash.z.ecc.android.sdk.model.Zatoshi
-import cash.z.ecc.sdk.model.PercentDecimal
import co.electriccoin.zcash.ui.screen.home.viewmodel.SynchronizerError
// TODO [#292]: Should be moved to SDK-EXT-UI module.
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/view/HomeView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/view/HomeView.kt
index 76977378..79a368a9 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/view/HomeView.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/view/HomeView.kt
@@ -42,8 +42,8 @@ import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
-import cash.z.ecc.sdk.ext.ui.model.FiatCurrencyConversionRateState
-import cash.z.ecc.sdk.model.PercentDecimal
+import cash.z.ecc.android.sdk.model.FiatCurrencyConversionRateState
+import cash.z.ecc.android.sdk.model.PercentDecimal
import co.electriccoin.zcash.crash.android.GlobalCrashReporter
import co.electriccoin.zcash.ui.R
import co.electriccoin.zcash.ui.design.MINIMAL_WEIGHT
@@ -73,7 +73,6 @@ fun ComposablePreview() {
goSend = {},
goRequest = {},
resetSdk = {},
- wipeEntireWallet = {},
isDebugMenuEnabled = false,
updateAvailable = false
)
@@ -92,12 +91,11 @@ fun Home(
goSend: () -> Unit,
goRequest: () -> Unit,
resetSdk: () -> Unit,
- wipeEntireWallet: () -> Unit,
isDebugMenuEnabled: Boolean,
updateAvailable: Boolean
) {
Scaffold(topBar = {
- HomeTopAppBar(isDebugMenuEnabled, resetSdk, wipeEntireWallet)
+ HomeTopAppBar(isDebugMenuEnabled, resetSdk)
}) { paddingValues ->
HomeMainContent(
paddingValues,
@@ -117,20 +115,21 @@ fun Home(
private fun HomeTopAppBar(
isDebugMenuEnabled: Boolean,
resetSdk: () -> Unit,
- wipeEntireWallet: () -> Unit
) {
TopAppBar(
title = { Text(text = stringResource(id = R.string.app_name)) },
actions = {
if (isDebugMenuEnabled) {
- DebugMenu(resetSdk, wipeEntireWallet)
+ DebugMenu(resetSdk)
}
}
)
}
@Composable
-private fun DebugMenu(resetSdk: () -> Unit, wipeEntireWallet: () -> Unit) {
+private fun DebugMenu(
+ resetSdk: () -> Unit
+) {
var expanded by rememberSaveable { mutableStateOf(false) }
IconButton(onClick = { expanded = true }) {
Icon(Icons.Default.MoreVert, contentDescription = null)
@@ -164,13 +163,6 @@ private fun DebugMenu(resetSdk: () -> Unit, wipeEntireWallet: () -> Unit) {
expanded = false
}
)
- DropdownMenuItem(
- text = { Text("Wipe entire wallet") },
- onClick = {
- wipeEntireWallet()
- expanded = false
- }
- )
}
}
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/viewmodel/WalletViewModel.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/viewmodel/WalletViewModel.kt
index 05c8df12..cae8453d 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/viewmodel/WalletViewModel.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/viewmodel/WalletViewModel.kt
@@ -6,19 +6,23 @@ import androidx.lifecycle.viewModelScope
import cash.z.ecc.android.bip39.Mnemonics
import cash.z.ecc.android.bip39.toSeed
import cash.z.ecc.android.sdk.Synchronizer
+import cash.z.ecc.android.sdk.WalletCoordinator
import cash.z.ecc.android.sdk.block.CompactBlockProcessor
import cash.z.ecc.android.sdk.model.Account
import cash.z.ecc.android.sdk.model.BlockHeight
+import cash.z.ecc.android.sdk.model.FiatCurrency
import cash.z.ecc.android.sdk.model.PendingTransaction
+import cash.z.ecc.android.sdk.model.PercentDecimal
+import cash.z.ecc.android.sdk.model.PersistableWallet
+import cash.z.ecc.android.sdk.model.WalletAddresses
import cash.z.ecc.android.sdk.model.WalletBalance
import cash.z.ecc.android.sdk.model.Zatoshi
+import cash.z.ecc.android.sdk.model.ZcashNetwork
import cash.z.ecc.android.sdk.model.isMined
import cash.z.ecc.android.sdk.model.isSubmitSuccess
import cash.z.ecc.android.sdk.tool.DerivationTool
-import cash.z.ecc.sdk.model.FiatCurrency
-import cash.z.ecc.sdk.model.PercentDecimal
-import cash.z.ecc.sdk.model.PersistableWallet
-import cash.z.ecc.sdk.model.WalletAddresses
+import cash.z.ecc.sdk.type.fromResources
+import co.electriccoin.zcash.global.getInstance
import co.electriccoin.zcash.spackle.Twig
import co.electriccoin.zcash.ui.common.ANDROID_STATE_FLOW_TIMEOUT
import co.electriccoin.zcash.ui.common.throttle
@@ -59,7 +63,7 @@ import kotlin.time.ExperimentalTime
// TODO [#292]: Should be moved to SDK-EXT-UI module.
// TODO [#292]: https://github.com/zcash/secant-android-wallet/issues/292
class WalletViewModel(application: Application) : AndroidViewModel(application) {
- private val walletCoordinator = co.electriccoin.zcash.global.WalletCoordinator.getInstance(application)
+ private val walletCoordinator = WalletCoordinator.getInstance(application)
/*
* Using the Mutex may be overkill, but it ensures that if multiple calls are accidentally made
@@ -184,7 +188,7 @@ class WalletViewModel(application: Application) : AndroidViewModel(application)
val application = getApplication()
viewModelScope.launch {
- val newWallet = PersistableWallet.new(application)
+ val newWallet = PersistableWallet.new(application, ZcashNetwork.fromResources(application))
persistExistingWallet(newWallet)
}
}
@@ -244,20 +248,6 @@ class WalletViewModel(application: Application) : AndroidViewModel(application)
fun resetSdk() {
walletCoordinator.resetSdk()
}
-
- /**
- * This asynchronously wipes the entire wallet state.
- *
- * This is destructive, as the seed phrase is deleted along with the SDK state.
- *
- * This could be used as part of testing, to quickly reset the app state.
- *
- * A more complete reset of app state can be performed in Android Settings, as this will not
- * clear application state beyond the SDK and wallet secret.
- */
- fun wipeEntireWallet() {
- walletCoordinator.wipeEntireWallet()
- }
}
/**
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/onboarding/AndroidOnboarding.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/onboarding/AndroidOnboarding.kt
index 0fb3b37c..e92187ab 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/onboarding/AndroidOnboarding.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/onboarding/AndroidOnboarding.kt
@@ -9,10 +9,10 @@ import androidx.activity.viewModels
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import cash.z.ecc.android.sdk.model.PersistableWallet
+import cash.z.ecc.android.sdk.model.SeedPhrase
import cash.z.ecc.android.sdk.model.ZcashNetwork
import cash.z.ecc.sdk.fixture.SeedPhraseFixture
-import cash.z.ecc.sdk.model.PersistableWallet
-import cash.z.ecc.sdk.model.SeedPhrase
import cash.z.ecc.sdk.type.fromResources
import co.electriccoin.zcash.spackle.EmulatorWtfUtil
import co.electriccoin.zcash.spackle.FirebaseTestLabUtil
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/profile/AndroidProfile.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/profile/AndroidProfile.kt
index e470870f..2311947f 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/profile/AndroidProfile.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/profile/AndroidProfile.kt
@@ -6,7 +6,7 @@ import androidx.activity.ComponentActivity
import androidx.activity.viewModels
import androidx.compose.runtime.Composable
import androidx.lifecycle.compose.collectAsStateWithLifecycle
-import cash.z.ecc.sdk.model.WalletAddresses
+import cash.z.ecc.android.sdk.model.WalletAddresses
import co.electriccoin.zcash.ui.MainActivity
import co.electriccoin.zcash.ui.screen.home.viewmodel.WalletViewModel
import co.electriccoin.zcash.ui.screen.profile.view.Profile
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/profile/view/ProfileView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/profile/view/ProfileView.kt
index acd0cc11..07a87ee3 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/profile/view/ProfileView.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/profile/view/ProfileView.kt
@@ -22,8 +22,8 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
-import cash.z.ecc.sdk.fixture.WalletAddressFixture
-import cash.z.ecc.sdk.model.WalletAddress
+import cash.z.ecc.android.sdk.fixture.WalletAddressFixture
+import cash.z.ecc.android.sdk.model.WalletAddress
import co.electriccoin.zcash.ui.R
import co.electriccoin.zcash.ui.common.BrightenScreen
import co.electriccoin.zcash.ui.common.DisableScreenTimeout
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/request/view/RequestView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/request/view/RequestView.kt
index ce768658..bbb00970 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/request/view/RequestView.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/request/view/RequestView.kt
@@ -26,13 +26,13 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.unit.dp
+import cash.z.ecc.android.sdk.fixture.WalletAddressFixture
+import cash.z.ecc.android.sdk.model.MonetarySeparators
+import cash.z.ecc.android.sdk.model.WalletAddress
import cash.z.ecc.android.sdk.model.Zatoshi
-import cash.z.ecc.sdk.ext.ui.ZecStringExt
-import cash.z.ecc.sdk.ext.ui.model.MonetarySeparators
-import cash.z.ecc.sdk.ext.ui.model.ZecString
-import cash.z.ecc.sdk.ext.ui.model.fromZecString
-import cash.z.ecc.sdk.fixture.WalletAddressFixture
-import cash.z.ecc.sdk.model.WalletAddress
+import cash.z.ecc.android.sdk.model.ZecString
+import cash.z.ecc.android.sdk.model.ZecStringExt
+import cash.z.ecc.android.sdk.model.fromZecString
import cash.z.ecc.sdk.model.ZecRequest
import cash.z.ecc.sdk.model.ZecRequestMessage
import co.electriccoin.zcash.ui.R
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/restore/model/ParseResult.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/restore/model/ParseResult.kt
index e5b79a4b..e0c6b142 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/restore/model/ParseResult.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/restore/model/ParseResult.kt
@@ -1,6 +1,6 @@
package co.electriccoin.zcash.ui.screen.restore.model
-import cash.z.ecc.sdk.model.SeedPhrase
+import cash.z.ecc.android.sdk.model.SeedPhrase
import co.electriccoin.zcash.ui.common.first
import java.util.Locale
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/seed/view/SeedView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/seed/view/SeedView.kt
index 165bfd3e..d1050caa 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/seed/view/SeedView.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/seed/view/SeedView.kt
@@ -17,8 +17,8 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
+import cash.z.ecc.android.sdk.model.PersistableWallet
import cash.z.ecc.sdk.fixture.PersistableWalletFixture
-import cash.z.ecc.sdk.model.PersistableWallet
import co.electriccoin.zcash.ui.R
import co.electriccoin.zcash.ui.common.SecureScreen
import co.electriccoin.zcash.ui.design.component.Body
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/send/ext/WalletAddressExt.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/send/ext/WalletAddressExt.kt
index b1b68a0f..20317cb5 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/send/ext/WalletAddressExt.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/send/ext/WalletAddressExt.kt
@@ -5,7 +5,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.ReadOnlyComposable
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalContext
-import cash.z.ecc.sdk.model.WalletAddress
+import cash.z.ecc.android.sdk.model.WalletAddress
import co.electriccoin.zcash.ui.R
/**
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/send/ext/ZecSendExt.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/send/ext/ZecSendExt.kt
index bc6ec4d9..18346518 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/send/ext/ZecSendExt.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/send/ext/ZecSendExt.kt
@@ -1,10 +1,10 @@
package co.electriccoin.zcash.ui.screen.send.ext
import androidx.compose.runtime.saveable.mapSaver
+import cash.z.ecc.android.sdk.model.Memo
+import cash.z.ecc.android.sdk.model.WalletAddress
import cash.z.ecc.android.sdk.model.Zatoshi
-import cash.z.ecc.sdk.model.Memo
-import cash.z.ecc.sdk.model.WalletAddress
-import cash.z.ecc.sdk.model.ZecSend
+import cash.z.ecc.android.sdk.model.ZecSend
import kotlinx.coroutines.runBlocking
private const val KEY_ADDRESS = "address" // $NON-NLS
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/send/view/SendView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/send/view/SendView.kt
index 367d6629..2549f942 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/send/view/SendView.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/send/view/SendView.kt
@@ -31,15 +31,15 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
+import cash.z.ecc.android.sdk.model.Memo
+import cash.z.ecc.android.sdk.model.MonetarySeparators
import cash.z.ecc.android.sdk.model.Zatoshi
-import cash.z.ecc.sdk.ext.ui.ZecSendExt
-import cash.z.ecc.sdk.ext.ui.ZecStringExt
-import cash.z.ecc.sdk.ext.ui.model.MonetarySeparators
-import cash.z.ecc.sdk.ext.ui.model.ZecString
-import cash.z.ecc.sdk.ext.ui.model.toZecString
+import cash.z.ecc.android.sdk.model.ZecSend
+import cash.z.ecc.android.sdk.model.ZecSendExt
+import cash.z.ecc.android.sdk.model.ZecString
+import cash.z.ecc.android.sdk.model.ZecStringExt
+import cash.z.ecc.android.sdk.model.toZecString
import cash.z.ecc.sdk.fixture.ZatoshiFixture
-import cash.z.ecc.sdk.model.Memo
-import cash.z.ecc.sdk.model.ZecSend
import co.electriccoin.zcash.ui.R
import co.electriccoin.zcash.ui.design.MINIMAL_WEIGHT
import co.electriccoin.zcash.ui.design.component.GradientSurface
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/settings/AndroidSettings.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/settings/AndroidSettings.kt
index 842a299d..168de900 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/settings/AndroidSettings.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/settings/AndroidSettings.kt
@@ -8,7 +8,6 @@ import androidx.compose.runtime.Composable
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import co.electriccoin.zcash.ui.MainActivity
import co.electriccoin.zcash.ui.screen.home.viewmodel.WalletViewModel
-import co.electriccoin.zcash.ui.screen.onboarding.viewmodel.OnboardingViewModel
import co.electriccoin.zcash.ui.screen.settings.view.Settings
import co.electriccoin.zcash.ui.screen.settings.viewmodel.SettingsViewModel
@@ -46,13 +45,6 @@ private fun WrapSettings(
onRescanWallet = {
walletViewModel.rescanBlockchain()
},
- onWipeWallet = {
- walletViewModel.wipeEntireWallet()
-
- val onboardingViewModel by activity.viewModels()
- onboardingViewModel.onboardingState.goToBeginning()
- onboardingViewModel.isImporting.value = false
- },
onAnalyticsSettingsChanged = {
settingsViewModel.setAnalyticsEnabled(it)
}
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/settings/view/SettingsView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/settings/view/SettingsView.kt
index cf82bcdf..459c96f7 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/settings/view/SettingsView.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/settings/view/SettingsView.kt
@@ -42,7 +42,6 @@ fun PreviewSettings() {
isAnalyticsEnabled = true,
onBack = {},
onBackupWallet = {},
- onWipeWallet = {},
onRescanWallet = {},
onAnalyticsSettingsChanged = {}
)
@@ -57,7 +56,6 @@ fun Settings(
isAnalyticsEnabled: Boolean,
onBack: () -> Unit,
onBackupWallet: () -> Unit,
- onWipeWallet: () -> Unit,
onRescanWallet: () -> Unit,
onAnalyticsSettingsChanged: (Boolean) -> Unit
) {
@@ -68,7 +66,6 @@ fun Settings(
paddingValues,
isAnalyticsEnabled,
onBackupWallet = onBackupWallet,
- onWipeWallet = onWipeWallet,
onRescanWallet = onRescanWallet,
onAnalyticsSettingsChanged = onAnalyticsSettingsChanged
)
@@ -99,7 +96,6 @@ private fun SettingsMainContent(
paddingValues: PaddingValues,
isAnalyticsEnabled: Boolean,
onBackupWallet: () -> Unit,
- @Suppress("UNUSED_PARAMETER") onWipeWallet: () -> Unit,
onRescanWallet: () -> Unit,
onAnalyticsSettingsChanged: (Boolean) -> Unit
) {
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/support/model/EnvironmentInfo.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/support/model/EnvironmentInfo.kt
index 3c5f1d9f..6aab7160 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/support/model/EnvironmentInfo.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/support/model/EnvironmentInfo.kt
@@ -1,7 +1,7 @@
package co.electriccoin.zcash.ui.screen.support.model
import android.content.Context
-import cash.z.ecc.sdk.ext.ui.model.MonetarySeparators
+import cash.z.ecc.android.sdk.model.MonetarySeparators
import co.electriccoin.zcash.global.StorageChecker
import java.util.Locale
diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/work/SyncWorker.kt b/ui-lib/src/main/java/co/electriccoin/zcash/work/SyncWorker.kt
index 5459a530..8051d2ed 100644
--- a/ui-lib/src/main/java/co/electriccoin/zcash/work/SyncWorker.kt
+++ b/ui-lib/src/main/java/co/electriccoin/zcash/work/SyncWorker.kt
@@ -9,7 +9,8 @@ import androidx.work.PeriodicWorkRequest
import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkerParameters
import cash.z.ecc.android.sdk.Synchronizer
-import co.electriccoin.zcash.global.WalletCoordinator
+import cash.z.ecc.android.sdk.WalletCoordinator
+import co.electriccoin.zcash.global.getInstance
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.combine
diff --git a/ui-screenshot-test/build.gradle.kts b/ui-screenshot-test/build.gradle.kts
index e1bdb350..72223aca 100644
--- a/ui-screenshot-test/build.gradle.kts
+++ b/ui-screenshot-test/build.gradle.kts
@@ -59,7 +59,6 @@ dependencies {
implementation(projects.testLib)
implementation(projects.spackleAndroidLib)
implementation(projects.sdkExtLib)
- implementation(projects.sdkExtUiLib)
implementation(libs.bundles.androidx.test)
implementation(libs.bundles.androidx.compose.core)
diff --git a/ui-screenshot-test/src/main/java/co/electroniccoin/zcash/ui/screenshot/ScreenshotTest.kt b/ui-screenshot-test/src/main/java/co/electroniccoin/zcash/ui/screenshot/ScreenshotTest.kt
index d671ead9..95d91fbe 100644
--- a/ui-screenshot-test/src/main/java/co/electroniccoin/zcash/ui/screenshot/ScreenshotTest.kt
+++ b/ui-screenshot-test/src/main/java/co/electroniccoin/zcash/ui/screenshot/ScreenshotTest.kt
@@ -26,9 +26,9 @@ import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.filters.LargeTest
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
-import cash.z.ecc.sdk.ext.ui.model.MonetarySeparators
+import cash.z.ecc.android.sdk.fixture.WalletAddressFixture
+import cash.z.ecc.android.sdk.model.MonetarySeparators
import cash.z.ecc.sdk.fixture.SeedPhraseFixture
-import cash.z.ecc.sdk.fixture.WalletAddressFixture
import co.electriccoin.zcash.spackle.FirebaseTestLabUtil
import co.electriccoin.zcash.test.UiTestPrerequisites
import co.electriccoin.zcash.ui.MainActivity