[#770] Hide request ZEC button
This commit is contained in:
parent
417fc4b8a5
commit
ec7eb3804e
|
@ -108,7 +108,11 @@ Debug builds allow for manual override of feature toggle entries, which can be s
|
||||||
|
|
||||||
To set a configuration value manually, run the following shell command replacing `$SOME_KEY` and `$SOME_VALUE` with the key-value pair you'd like to set. The change will take effect immediately.
|
To set a configuration value manually, run the following shell command replacing `$SOME_KEY` and `$SOME_VALUE` with the key-value pair you'd like to set. The change will take effect immediately.
|
||||||
|
|
||||||
`adb shell am broadcast -n co.electriccoin.zcash/co.electriccoin.zcash.configuration.internal.intent.IntentConfigurationReceiver --es key "$SOME_KEY" --es value "$NEW_VALUE"`
|
`adb shell am broadcast -n co.electriccoin.zcash.debug/co.electriccoin.zcash.configuration.internal.intent.IntentConfigurationReceiver --es key "$SOME_KEY" --es value "$NEW_VALUE"`
|
||||||
|
|
||||||
|
As a specific example, the "Request ZEC" button on the home screen is currently disabled because the underlying functionality is not available yet. The button can be shown by running the command:
|
||||||
|
|
||||||
|
`adb shell am broadcast -n co.electriccoin.zcash.debug/co.electriccoin.zcash.configuration.internal.intent.IntentConfigurationReceiver --es key "is_request_zec_enabled" --es value "true"`
|
||||||
|
|
||||||
# Shared Resources
|
# Shared Resources
|
||||||
There are some app-wide resources that share a common namespace, and these should be documented here to make it easy to ensure there are no collisions.
|
There are some app-wide resources that share a common namespace, and these should be documented here to make it easy to ensure there are no collisions.
|
||||||
|
|
|
@ -9,7 +9,8 @@ import java.util.concurrent.atomic.AtomicInteger
|
||||||
|
|
||||||
class HomeTestSetup(
|
class HomeTestSetup(
|
||||||
private val composeTestRule: ComposeContentTestRule,
|
private val composeTestRule: ComposeContentTestRule,
|
||||||
private val walletSnapshot: WalletSnapshot
|
private val walletSnapshot: WalletSnapshot,
|
||||||
|
private val isRequestZecButtonEnabled: Boolean,
|
||||||
) {
|
) {
|
||||||
private val onScanCount = AtomicInteger(0)
|
private val onScanCount = AtomicInteger(0)
|
||||||
private val onProfileCount = AtomicInteger(0)
|
private val onProfileCount = AtomicInteger(0)
|
||||||
|
@ -46,7 +47,8 @@ class HomeTestSetup(
|
||||||
Home(
|
Home(
|
||||||
walletSnapshot,
|
walletSnapshot,
|
||||||
isKeepScreenOnDuringSync = false,
|
isKeepScreenOnDuringSync = false,
|
||||||
emptyList(),
|
isRequestZecButtonEnabled = isRequestZecButtonEnabled,
|
||||||
|
transactionHistory = emptyList(),
|
||||||
goScan = {
|
goScan = {
|
||||||
onScanCount.incrementAndGet()
|
onScanCount.incrementAndGet()
|
||||||
},
|
},
|
||||||
|
|
|
@ -26,7 +26,8 @@ class HomeViewIntegrationTest : UiTestPrerequisites() {
|
||||||
|
|
||||||
private fun newTestSetup(walletSnapshot: WalletSnapshot) = HomeTestSetup(
|
private fun newTestSetup(walletSnapshot: WalletSnapshot) = HomeTestSetup(
|
||||||
composeTestRule,
|
composeTestRule,
|
||||||
walletSnapshot
|
walletSnapshot,
|
||||||
|
isRequestZecButtonEnabled = false
|
||||||
)
|
)
|
||||||
|
|
||||||
// This is just basic sanity check that we still have UI set up as expected after the state restore
|
// This is just basic sanity check that we still have UI set up as expected after the state restore
|
||||||
|
|
|
@ -49,6 +49,16 @@ class HomeViewTest : UiTestPrerequisites() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@MediumTest
|
||||||
|
fun hide_request_zec() {
|
||||||
|
newTestSetup(isRequestZecButtonEnabled = false)
|
||||||
|
|
||||||
|
composeTestRule.onNodeWithText(getStringResource(R.string.home_button_request)).also {
|
||||||
|
it.assertDoesNotExist()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@MediumTest
|
@MediumTest
|
||||||
fun click_scan_button() {
|
fun click_scan_button() {
|
||||||
|
@ -97,9 +107,10 @@ class HomeViewTest : UiTestPrerequisites() {
|
||||||
assertEquals(1, testSetup.getOnRequestCount())
|
assertEquals(1, testSetup.getOnRequestCount())
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun newTestSetup() = HomeTestSetup(
|
private fun newTestSetup(isRequestZecButtonEnabled: Boolean = true) = HomeTestSetup(
|
||||||
composeTestRule,
|
composeTestRule,
|
||||||
WalletSnapshotFixture.new()
|
WalletSnapshotFixture.new(),
|
||||||
|
isRequestZecButtonEnabled = isRequestZecButtonEnabled
|
||||||
).apply {
|
).apply {
|
||||||
setDefaultContent()
|
setDefaultContent()
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,5 +10,5 @@ object ConfigurationEntries {
|
||||||
* Disabled because we don't have the URI parser support in the SDK yet.
|
* Disabled because we don't have the URI parser support in the SDK yet.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
val IS_REQUEST_ZEC_ENABLED = BooleanConfigurationEntry(ConfigKey("is_update_check_enabled"), false)
|
val IS_REQUEST_ZEC_ENABLED = BooleanConfigurationEntry(ConfigKey("is_request_zec_enabled"), false)
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,8 @@ import co.electriccoin.zcash.spackle.EmulatorWtfUtil
|
||||||
import co.electriccoin.zcash.spackle.FirebaseTestLabUtil
|
import co.electriccoin.zcash.spackle.FirebaseTestLabUtil
|
||||||
import co.electriccoin.zcash.ui.BuildConfig
|
import co.electriccoin.zcash.ui.BuildConfig
|
||||||
import co.electriccoin.zcash.ui.MainActivity
|
import co.electriccoin.zcash.ui.MainActivity
|
||||||
|
import co.electriccoin.zcash.ui.configuration.ConfigurationEntries
|
||||||
|
import co.electriccoin.zcash.ui.configuration.RemoteConfig
|
||||||
import co.electriccoin.zcash.ui.screen.home.view.Home
|
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.CheckUpdateViewModel
|
||||||
import co.electriccoin.zcash.ui.screen.home.viewmodel.WalletViewModel
|
import co.electriccoin.zcash.ui.screen.home.viewmodel.WalletViewModel
|
||||||
|
@ -76,6 +78,7 @@ internal fun WrapHome(
|
||||||
Home(
|
Home(
|
||||||
walletSnapshot,
|
walletSnapshot,
|
||||||
isKeepScreenOnDuringSync = isKeepScreenOnWhileSyncing,
|
isKeepScreenOnDuringSync = isKeepScreenOnWhileSyncing,
|
||||||
|
isRequestZecButtonEnabled = ConfigurationEntries.IS_REQUEST_ZEC_ENABLED.getValue(RemoteConfig.current),
|
||||||
transactionSnapshot,
|
transactionSnapshot,
|
||||||
goScan = goScan,
|
goScan = goScan,
|
||||||
goRequest = goRequest,
|
goRequest = goRequest,
|
||||||
|
|
|
@ -70,6 +70,7 @@ fun ComposablePreview() {
|
||||||
Home(
|
Home(
|
||||||
WalletSnapshotFixture.new(),
|
WalletSnapshotFixture.new(),
|
||||||
isKeepScreenOnDuringSync = false,
|
isKeepScreenOnDuringSync = false,
|
||||||
|
isRequestZecButtonEnabled = false,
|
||||||
emptyList(),
|
emptyList(),
|
||||||
goScan = {},
|
goScan = {},
|
||||||
goProfile = {},
|
goProfile = {},
|
||||||
|
@ -89,6 +90,7 @@ fun ComposablePreview() {
|
||||||
fun Home(
|
fun Home(
|
||||||
walletSnapshot: WalletSnapshot,
|
walletSnapshot: WalletSnapshot,
|
||||||
isKeepScreenOnDuringSync: Boolean?,
|
isKeepScreenOnDuringSync: Boolean?,
|
||||||
|
isRequestZecButtonEnabled: Boolean,
|
||||||
transactionHistory: List<CommonTransaction>,
|
transactionHistory: List<CommonTransaction>,
|
||||||
goScan: () -> Unit,
|
goScan: () -> Unit,
|
||||||
goProfile: () -> Unit,
|
goProfile: () -> Unit,
|
||||||
|
@ -105,6 +107,7 @@ fun Home(
|
||||||
paddingValues,
|
paddingValues,
|
||||||
walletSnapshot,
|
walletSnapshot,
|
||||||
isKeepScreenOnDuringSync = isKeepScreenOnDuringSync,
|
isKeepScreenOnDuringSync = isKeepScreenOnDuringSync,
|
||||||
|
isRequestZecButtonEnabled = isRequestZecButtonEnabled,
|
||||||
transactionHistory,
|
transactionHistory,
|
||||||
goScan = goScan,
|
goScan = goScan,
|
||||||
goProfile = goProfile,
|
goProfile = goProfile,
|
||||||
|
@ -177,6 +180,7 @@ private fun HomeMainContent(
|
||||||
paddingValues: PaddingValues,
|
paddingValues: PaddingValues,
|
||||||
walletSnapshot: WalletSnapshot,
|
walletSnapshot: WalletSnapshot,
|
||||||
isKeepScreenOnDuringSync: Boolean?,
|
isKeepScreenOnDuringSync: Boolean?,
|
||||||
|
isRequestZecButtonEnabled: Boolean,
|
||||||
transactionHistory: List<CommonTransaction>,
|
transactionHistory: List<CommonTransaction>,
|
||||||
goScan: () -> Unit,
|
goScan: () -> Unit,
|
||||||
goProfile: () -> Unit,
|
goProfile: () -> Unit,
|
||||||
|
@ -215,7 +219,9 @@ private fun HomeMainContent(
|
||||||
|
|
||||||
PrimaryButton(onClick = goSend, text = stringResource(R.string.home_button_send))
|
PrimaryButton(onClick = goSend, text = stringResource(R.string.home_button_send))
|
||||||
|
|
||||||
|
if (isRequestZecButtonEnabled) {
|
||||||
TertiaryButton(onClick = goRequest, text = stringResource(R.string.home_button_request))
|
TertiaryButton(onClick = goRequest, text = stringResource(R.string.home_button_request))
|
||||||
|
}
|
||||||
|
|
||||||
History(transactionHistory)
|
History(transactionHistory)
|
||||||
|
|
||||||
|
|
|
@ -55,10 +55,12 @@ android {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(projects.uiLib)
|
implementation(projects.configurationApiLib)
|
||||||
implementation(projects.testLib)
|
implementation(projects.configurationImplAndroidLib)
|
||||||
implementation(projects.spackleAndroidLib)
|
|
||||||
implementation(projects.sdkExtLib)
|
implementation(projects.sdkExtLib)
|
||||||
|
implementation(projects.spackleAndroidLib)
|
||||||
|
implementation(projects.testLib)
|
||||||
|
implementation(projects.uiLib)
|
||||||
|
|
||||||
implementation(libs.bundles.androidx.test)
|
implementation(libs.bundles.androidx.test)
|
||||||
implementation(libs.bundles.androidx.compose.core)
|
implementation(libs.bundles.androidx.compose.core)
|
||||||
|
|
|
@ -29,16 +29,19 @@ import androidx.test.filters.SdkSuppress
|
||||||
import cash.z.ecc.android.sdk.fixture.WalletAddressFixture
|
import cash.z.ecc.android.sdk.fixture.WalletAddressFixture
|
||||||
import cash.z.ecc.android.sdk.model.MonetarySeparators
|
import cash.z.ecc.android.sdk.model.MonetarySeparators
|
||||||
import cash.z.ecc.sdk.fixture.SeedPhraseFixture
|
import cash.z.ecc.sdk.fixture.SeedPhraseFixture
|
||||||
|
import co.electriccoin.zcash.configuration.model.map.StringConfiguration
|
||||||
import co.electriccoin.zcash.spackle.FirebaseTestLabUtil
|
import co.electriccoin.zcash.spackle.FirebaseTestLabUtil
|
||||||
import co.electriccoin.zcash.test.UiTestPrerequisites
|
import co.electriccoin.zcash.test.UiTestPrerequisites
|
||||||
import co.electriccoin.zcash.ui.MainActivity
|
import co.electriccoin.zcash.ui.MainActivity
|
||||||
import co.electriccoin.zcash.ui.NavigationTargets
|
import co.electriccoin.zcash.ui.NavigationTargets
|
||||||
import co.electriccoin.zcash.ui.R
|
import co.electriccoin.zcash.ui.R
|
||||||
|
import co.electriccoin.zcash.ui.configuration.ConfigurationEntries
|
||||||
import co.electriccoin.zcash.ui.design.component.ConfigurationOverride
|
import co.electriccoin.zcash.ui.design.component.ConfigurationOverride
|
||||||
import co.electriccoin.zcash.ui.design.component.UiMode
|
import co.electriccoin.zcash.ui.design.component.UiMode
|
||||||
import co.electriccoin.zcash.ui.screen.backup.BackupTag
|
import co.electriccoin.zcash.ui.screen.backup.BackupTag
|
||||||
import co.electriccoin.zcash.ui.screen.home.viewmodel.SecretState
|
import co.electriccoin.zcash.ui.screen.home.viewmodel.SecretState
|
||||||
import co.electriccoin.zcash.ui.screen.restore.RestoreTag
|
import co.electriccoin.zcash.ui.screen.restore.RestoreTag
|
||||||
|
import kotlinx.collections.immutable.persistentMapOf
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
@ -76,6 +79,8 @@ class ScreenshotTest : UiTestPrerequisites() {
|
||||||
.captureToBitmap()
|
.captureToBitmap()
|
||||||
.writeToTestStorage("$screenshotName - $tag")
|
.writeToTestStorage("$screenshotName - $tag")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val emptyConfiguration = StringConfiguration(persistentMapOf(), null)
|
||||||
}
|
}
|
||||||
|
|
||||||
@get:Rule
|
@get:Rule
|
||||||
|
@ -300,15 +305,19 @@ class ScreenshotTest : UiTestPrerequisites() {
|
||||||
}
|
}
|
||||||
|
|
||||||
composeTestRule.waitUntil(DEFAULT_TIMEOUT_MILLISECONDS) { composeTestRule.activity.walletViewModel.secretState.value is SecretState.Ready }
|
composeTestRule.waitUntil(DEFAULT_TIMEOUT_MILLISECONDS) { composeTestRule.activity.walletViewModel.secretState.value is SecretState.Ready }
|
||||||
|
|
||||||
|
if (ConfigurationEntries.IS_REQUEST_ZEC_ENABLED.getValue(emptyConfiguration)) {
|
||||||
composeTestRule.onNode(hasText(resContext.getString(R.string.home_button_request))).also {
|
composeTestRule.onNode(hasText(resContext.getString(R.string.home_button_request))).also {
|
||||||
it.assertExists()
|
it.assertExists()
|
||||||
it.performClick()
|
it.performClick()
|
||||||
}
|
}
|
||||||
|
|
||||||
composeTestRule.waitUntil(DEFAULT_TIMEOUT_MILLISECONDS) { composeTestRule.activity.walletViewModel.walletSnapshot.value != null }
|
composeTestRule.waitUntil(DEFAULT_TIMEOUT_MILLISECONDS) { composeTestRule.activity.walletViewModel.walletSnapshot.value != null }
|
||||||
requestZecScreenshots(resContext, tag, composeTestRule)
|
requestZecScreenshots(resContext, tag, composeTestRule)
|
||||||
|
|
||||||
navigateTo(NavigationTargets.HOME)
|
navigateTo(NavigationTargets.HOME)
|
||||||
composeTestRule.waitUntil(DEFAULT_TIMEOUT_MILLISECONDS) { composeTestRule.activity.walletViewModel.secretState.value is SecretState.Ready }
|
composeTestRule.waitUntil(DEFAULT_TIMEOUT_MILLISECONDS) { composeTestRule.activity.walletViewModel.secretState.value is SecretState.Ready }
|
||||||
|
}
|
||||||
|
|
||||||
composeTestRule.onNode(hasText(resContext.getString(R.string.home_button_send))).also {
|
composeTestRule.onNode(hasText(resContext.getString(R.string.home_button_send))).also {
|
||||||
it.assertExists()
|
it.assertExists()
|
||||||
|
|
Loading…
Reference in New Issue