Skip to content

Commit

Permalink
Merge branch 'release/202212.1' of github.com:blockchain/wallet-andro…
Browse files Browse the repository at this point in the history
…id-private

� Conflicts:
�	addressVerification/build.gradle
�	addressVerification/src/main/java/com/blockchain/addressverification/ui/AddressVerificationModel.kt
�	addressVerification/src/main/java/com/blockchain/addressverification/ui/AddressVerificationScreen.kt
�	addressVerification/src/main/res/values/strings.xml
�	analytics/data/src/main/java/com/blockchain/analytics/data/AnalyticsContextProviderImpl.kt
�	app/src/main/java/com/blockchain/koin/KoinStarter.kt
�	app/src/main/java/com/blockchain/koin/modules/applicationModule.kt
�	app/src/main/java/com/blockchain/koin/modules/serviceModule.kt
�	app/src/main/java/piuk/blockchain/android/simplebuy/SimpleBuyActivity.kt
�	app/src/main/java/piuk/blockchain/android/simplebuy/SimpleBuyCheckoutFragment.kt
�	app/src/main/java/piuk/blockchain/android/ui/blockchaincard/BlockchainCardKycAddressVerificationFragment.kt
�	app/src/main/java/piuk/blockchain/android/ui/createwallet/CreateWalletActivity.kt
�	app/src/main/java/piuk/blockchain/android/ui/createwallet/CreateWalletScreen.kt
�	app/src/main/java/piuk/blockchain/android/ui/createwallet/CreateWalletViewModel.kt
�	app/src/main/java/piuk/blockchain/android/ui/dashboard/coinview/CoinViewInteractor.kt
�	app/src/main/java/piuk/blockchain/android/ui/dashboard/walletmode/WalletModeSelectionBottomSheet.kt
�	app/src/main/java/piuk/blockchain/android/ui/dataremediation/QuestionnaireScreen.kt
�	app/src/main/java/piuk/blockchain/android/ui/home/MainActivity.kt
�	app/src/main/java/piuk/blockchain/android/ui/home/koin.kt
�	app/src/main/java/piuk/blockchain/android/ui/kyc/autocomplete/PlacesClientProvider.kt
�	app/src/main/java/piuk/blockchain/android/ui/kyc/koin/kycUiModule.kt
�	app/src/main/java/piuk/blockchain/android/ui/kyc/navhost/KycNavHostPresenter.kt
�	app/src/main/java/piuk/blockchain/android/ui/kyc/reentry/TiersReentryDecision.kt
�	app/src/main/java/piuk/blockchain/android/ui/prices/presentation/PricesViewModel.kt
�	app/src/main/java/piuk/blockchain/android/util/AccessbillityTraitsRepository.kt
�	app/src/main/java/piuk/blockchain/android/util/StringUtils.kt
�	app/src/main/java/piuk/blockchain/android/walletmode/WalletModeTraitsRepository.kt
�	app/src/main/res/layout/fragment_kyc_autocomplete.xml
�	app/src/main/res/layout/fragment_kyc_home_address.xml
�	app/src/main/res/layout/fragment_password_update.xml
�	app/src/main/res/layout/modal_change_password.xml
�	app/src/test/java/piuk/blockchain/android/ui/createwallet/CreateWalletViewModelTest.kt
�	app/src/test/java/piuk/blockchain/android/ui/dashboard/coinview/CoinViewInteractorTest.kt
�	app/src/test/java/piuk/blockchain/android/ui/kyc/reentry/ReentryDecisionTest.kt
�	blockchain-component-library-catalog/src/main/res/layout/activity_controls.xml
�	blockchainCard/src/main/java/com/blockchain/blockchaincard/ui/composables/ordercard/OrderCardScreen.kt
�	buildSrc/src/main/java/Dependencies.kt
�	coincore/src/main/java/com/blockchain/coincore/loader/DynamicAssetLoader.kt
�	componentlib/src/main/java/com/blockchain/componentlib/basic/Image.kt
�	componentlib/src/main/java/com/blockchain/componentlib/basic/SimpleText.kt
�	componentlib/src/main/java/com/blockchain/componentlib/control/Checkbox.kt
�	core/src/main/java/com/blockchain/core/chains/erc20/Erc20DataManager.kt
�	core/src/main/java/com/blockchain/core/chains/erc20/data/store/L1BalanceStore.kt
�	core/src/main/java/com/blockchain/core/eligibility/mapper/NetworkToDomain.kt
�	defiwalletbackup/domain/build.gradle
�	defiwalletbackup/presentation/src/main/res/values/strings.xml
�	defiwalletbackup/presentation/src/test/java/com/blockchain/presentation/backup/BackupPhraseViewModelTest.kt
�	nfts/presentation/build.gradle
�	string-resources/src/main/res/values-pt/strings.xml
�	string-resources/src/main/res/values/strings.xml
�	wallet/src/main/java/info/blockchain/wallet/api/WalletApi.kt
�	wallet/src/main/java/info/blockchain/wallet/api/WalletExplorerEndpoints.kt
�	wallet/src/test/java/info/blockchain/wallet/WalletApiMockedResponseTest.java
�	wallet/src/test/java/info/blockchain/wallet/api/WalletApiTest.kt
  • Loading branch information
dtverdota-bc committed Dec 20, 2022
2 parents 88e7598 + b5f2a3f commit 5f57913
Show file tree
Hide file tree
Showing 2,313 changed files with 73,128 additions and 40,092 deletions.
24 changes: 1 addition & 23 deletions addressVerification/build.gradle
Expand Up @@ -3,12 +3,6 @@ apply plugin: 'kotlinx-serialization'
apply plugin: 'kotlin-parcelize'

android {
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
java {
Expand All @@ -31,33 +25,17 @@ dependencies {
implementation project(':common:network')
implementation project(':common:interface')
implementation project(':common:domain')
implementation project(':common-mp:utils')
implementation project(':common-mp:utils:domain')
implementation project(':blockchainApi')
implementation project(':store:core')

implementation Libraries.timber
implementation Libraries.retrofit
implementation Libraries.retrofitKotlinJsonConverter
implementation Libraries.okHttp
implementation Libraries.kotlinJson
implementation Libraries.composeMaterial
implementation Libraries.composePreview
implementation Libraries.composeActivity
implementation Libraries.composeNavigation
implementation Libraries.composeRx
implementation Libraries.design
implementation Libraries.appCompat
implementation Libraries.androidXAnnotations
implementation Libraries.accompanistNavigationMaterial
implementation Libraries.accompanistSwipeRefresh

// TODO(aromano): TEMP while Google doesn't fix https://issuetracker.google.com/issues/227767363
debugImplementation "androidx.customview:customview:1.2.0-alpha01"
debugImplementation "androidx.customview:customview-poolingcontainer:1.0.0-alpha01"

// test
testImplementation Libraries.junit
testImplementation Libraries.kotlinTest
testImplementation Libraries.mockk
testImplementation Libraries.kotlinCoroutinesTest
}
Expand Up @@ -9,20 +9,18 @@ import com.blockchain.data.DataResource
import com.blockchain.data.FreshnessStrategy
import com.blockchain.domain.common.model.CountryIso
import com.blockchain.domain.common.model.StateIso
import com.blockchain.nabu.Authenticator
import com.blockchain.nabu.api.getuser.domain.UserService
import com.blockchain.nabu.models.responses.nabu.NabuUser
import com.blockchain.outcome.Outcome
import com.blockchain.outcome.flatMap
import com.blockchain.outcome.map
import com.blockchain.store.firstOutcome
import com.blockchain.utils.awaitOutcome
import com.blockchain.utils.rxSingleOutcome
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.map
import piuk.blockchain.androidcore.utils.extensions.awaitOutcome
import piuk.blockchain.androidcore.utils.extensions.rxSingleOutcome

class AddressVerificationRepository(
private val authenticator: Authenticator,
private val api: AddressVerificationApiService,
private val userService: UserService,
) : AddressVerificationService {
Expand All @@ -46,25 +44,20 @@ class AddressVerificationRepository(
stateIso: StateIso?,
containerId: String?
): Outcome<Exception, List<AutocompleteAddress>> =
authenticator.authenticate { token ->
rxSingleOutcome {
api.getAutocompleteAddresses(
authToken = token.authHeader,
searchQuery = searchQuery,
countryIso = countryIso,
stateIso = stateIso,
containerId = containerId
).map {
it.toDomain()
}
rxSingleOutcome {
api.getAutocompleteAddresses(
searchQuery = searchQuery,
countryIso = countryIso,
stateIso = stateIso,
containerId = containerId
).map {
it.toDomain()
}
}.awaitOutcome()

override suspend fun getCompleteAddress(id: String): Outcome<Exception, CompleteAddress> =
authenticator.authenticate { token ->
rxSingleOutcome {
api.getCompleteAddress(authToken = token.authHeader, id = id)
.map { it.toDomain() }
}
rxSingleOutcome {
api.getCompleteAddress(id = id)
.map { it.toDomain() }
}.awaitOutcome()
}
Expand Up @@ -11,7 +11,6 @@ val addressVerificationModule = module {
scope(payloadScopeQualifier) {
factory<AddressVerificationService> {
AddressVerificationRepository(
authenticator = get(),
api = get(),
userService = get(),
)
Expand Down
Expand Up @@ -14,6 +14,7 @@ import com.blockchain.commonarch.presentation.mvi_v2.NavigationRouter
import com.blockchain.commonarch.presentation.mvi_v2.bindViewModel
import com.blockchain.componentlib.alert.BlockchainSnackbar
import com.blockchain.componentlib.alert.SnackbarType
import com.blockchain.componentlib.theme.AppTheme
import com.blockchain.componentlib.viewextensions.hideKeyboard
import com.blockchain.domain.common.model.CountryIso
import com.blockchain.domain.common.model.StateIso
Expand Down Expand Up @@ -69,7 +70,9 @@ class AddressVerificationFragment :

return ComposeView(requireContext()).apply {
setContent {
AddressVerificationScreen(viewState = viewModel.viewState, onIntent = viewModel::onIntent)
AppTheme {
AddressVerificationScreen(viewState = viewModel.viewState, onIntent = viewModel::onIntent)
}
}
}
}
Expand Down
Expand Up @@ -76,6 +76,7 @@ class AddressVerificationModel(
prefilledAddress.firstLine,
TextRange(prefilledAddress.firstLine.length)
),
mainLineInput = prefilledAddress.firstLine,
secondLineInput = prefilledAddress.secondLine.orEmpty(),
cityInput = prefilledAddress.city,
postCodeInput = prefilledAddress.postCode,
Expand Down Expand Up @@ -154,7 +155,12 @@ class AddressVerificationModel(
container = newContainer
)
}
if (intent.newInput.text.length < MIN_QUERY_LENGTH) {

if (intent.newInput.text.isEmpty()) {
updateState {
it.copy(results = emptyList())
}
} else if (intent.newInput.text.length < MIN_QUERY_LENGTH) {
updateState {
it.copy(areResultsHidden = true, isSearchLoading = false, showManualOverride = false)
}
Expand Down Expand Up @@ -236,7 +242,9 @@ class AddressVerificationModel(
}
AddressVerificationIntent.BackClicked -> {
if (modelState.step == AddressVerificationStep.DETAILS) {
updateState { it.copy(step = AddressVerificationStep.SEARCH) }
val searchInput = modelState.searchInput
updateState { it.copy(step = AddressVerificationStep.SEARCH, searchInput = TextFieldValue("")) }
onIntent(AddressVerificationIntent.SearchInputChanged(searchInput))
} else {
navigate(Navigation.Back)
}
Expand Down
Expand Up @@ -55,7 +55,7 @@ fun AddressVerificationScreen(

Column(
modifier = Modifier
.padding(AppTheme.dimensions.paddingLarge)
.padding(AppTheme.dimensions.standardSpacing)
.fillMaxWidth()
) {
when (state.step) {
Expand All @@ -76,7 +76,7 @@ private fun ColumnScope.SearchStep(
OutlinedTextInput(
modifier = Modifier
.fillMaxWidth()
.padding(bottom = AppTheme.dimensions.paddingMedium),
.padding(bottom = AppTheme.dimensions.smallSpacing),
value = state.searchInput,
label = stringResource(R.string.address_verification_home_address),
onValueChange = {
Expand All @@ -98,65 +98,65 @@ private fun ColumnScope.SearchStep(
}
}

val suggestions = state.results
if (state.showManualOverride) {
Column {
Column {
if (state.showManualOverride) {
SimpleText(
modifier = Modifier
.fillMaxWidth()
.clickable {
onIntent(AddressVerificationIntent.ManualOverrideClicked)
}
.padding(vertical = AppTheme.dimensions.paddingSmall),
.padding(vertical = AppTheme.dimensions.tinySpacing),
text = stringResource(R.string.address_verification_my_address_is_not_here),
style = ComposeTypographies.Body2,
color = ComposeColors.Primary,
gravity = ComposeGravities.Start
)
}

val listState = rememberLazyListState()
val suggestions = state.results

val listState = rememberLazyListState()

LaunchedEffect(suggestions) {
listState.scrollToItem(0)
}

LazyColumn(
modifier = Modifier.padding(vertical = AppTheme.dimensions.paddingSmall),
state = listState,
) {
itemsIndexed(
items = suggestions,
itemContent = { index, suggestion ->
Box(
modifier = Modifier.clickable {
onIntent(AddressVerificationIntent.ResultClicked(suggestion))
}
) {
AutoCompleteItem(
isContainer = suggestion.type != AutocompleteAddressType.ADDRESS,
containedAddressesCount = suggestion.containedAddressesCount,
isLoading = state.loadingAddressDetails == suggestion,
title = suggestion.title,
titleHighlightRange = suggestion.titleHighlightRanges,
description = suggestion.description,
descriptionHighlightRange = suggestion.descriptionHighlightRanges
)
LaunchedEffect(suggestions) {
listState.scrollToItem(0)
}

LazyColumn(
modifier = Modifier.padding(vertical = AppTheme.dimensions.tinySpacing),
state = listState,
) {
itemsIndexed(
items = suggestions,
itemContent = { index, suggestion ->
Box(
modifier = Modifier.clickable {
onIntent(AddressVerificationIntent.ResultClicked(suggestion))
}
if (index < suggestions.lastIndex)
HorizontalDivider(modifier = Modifier.fillMaxWidth())
) {
AutoCompleteItem(
isContainer = suggestion.type != AutocompleteAddressType.ADDRESS,
containedAddressesCount = suggestion.containedAddressesCount,
isLoading = state.loadingAddressDetails == suggestion,
title = suggestion.title,
titleHighlightRange = suggestion.titleHighlightRanges,
description = suggestion.description,
descriptionHighlightRange = suggestion.descriptionHighlightRanges
)
}
)
}

if (suggestions.isEmpty()) {
SimpleText(
modifier = Modifier.fillMaxWidth(),
text = stringResource(R.string.common_no_results_found),
style = ComposeTypographies.Paragraph1,
color = ComposeColors.Title,
gravity = ComposeGravities.Centre,
)
}
if (index < suggestions.lastIndex)
HorizontalDivider(modifier = Modifier.fillMaxWidth())
}
)
}

if (suggestions.isEmpty() && state.searchInput.text.isNotEmpty() && !state.isSearchLoading) {
SimpleText(
modifier = Modifier.fillMaxWidth(),
text = stringResource(R.string.common_no_results_found),
style = ComposeTypographies.Paragraph1,
color = ComposeColors.Title,
gravity = ComposeGravities.Centre,
)
}
}
}
Expand All @@ -170,7 +170,7 @@ private fun ColumnScope.DetailsStep(
OutlinedTextInput(
modifier = Modifier
.fillMaxWidth()
.padding(bottom = AppTheme.dimensions.paddingMedium),
.padding(bottom = AppTheme.dimensions.smallSpacing),
value = state.mainLineInput,
label = stringResource(R.string.address_verification_home_address),
onValueChange = {
Expand All @@ -189,7 +189,7 @@ private fun ColumnScope.DetailsStep(
OutlinedTextInput(
modifier = Modifier
.fillMaxWidth()
.padding(bottom = AppTheme.dimensions.paddingMedium),
.padding(bottom = AppTheme.dimensions.smallSpacing),
value = state.secondLineInput,
label = stringResource(R.string.address_verification_apt_suite),
onValueChange = {
Expand All @@ -202,7 +202,7 @@ private fun ColumnScope.DetailsStep(
OutlinedTextInput(
modifier = Modifier
.fillMaxWidth()
.padding(bottom = AppTheme.dimensions.paddingMedium),
.padding(bottom = AppTheme.dimensions.smallSpacing),
value = state.cityInput,
label = stringResource(R.string.address_verification_city),
onValueChange = {
Expand All @@ -213,13 +213,13 @@ private fun ColumnScope.DetailsStep(
)

Row(
horizontalArrangement = Arrangement.spacedBy(AppTheme.dimensions.paddingMedium)
horizontalArrangement = Arrangement.spacedBy(AppTheme.dimensions.smallSpacing)
) {
if (state.isShowingStateInput) {
OutlinedTextInput(
modifier = Modifier
.weight(1f)
.padding(bottom = AppTheme.dimensions.paddingMedium),
.padding(bottom = AppTheme.dimensions.smallSpacing),
value = state.stateInput,
label = stringResource(R.string.address_verification_state),
onValueChange = {},
Expand All @@ -237,7 +237,7 @@ private fun ColumnScope.DetailsStep(
OutlinedTextInput(
modifier = Modifier
.weight(1f)
.padding(bottom = AppTheme.dimensions.paddingMedium),
.padding(bottom = AppTheme.dimensions.smallSpacing),
value = state.postCodeInput,
label = postcodeLabel,
onValueChange = {
Expand Down Expand Up @@ -293,7 +293,7 @@ fun AutoCompleteItem(
}

Row(
modifier = Modifier.padding(vertical = AppTheme.dimensions.paddingMedium),
modifier = Modifier.padding(vertical = AppTheme.dimensions.smallSpacing),
verticalAlignment = Alignment.CenterVertically
) {
Column(modifier = Modifier.weight(1f)) {
Expand Down Expand Up @@ -324,22 +324,22 @@ fun AutoCompleteItem(

if (isContainer) {
SimpleText(
modifier = Modifier.padding(start = AppTheme.dimensions.xPaddingSmall),
modifier = Modifier.padding(start = AppTheme.dimensions.smallestSpacing),
text = stringResource(R.string.address_verification_addresses_count, containedAddressesCount ?: 0),
style = ComposeTypographies.Paragraph1,
color = ComposeColors.Body,
gravity = ComposeGravities.End
)
Image(
modifier = Modifier.padding(start = AppTheme.dimensions.paddingMedium),
modifier = Modifier.padding(start = AppTheme.dimensions.smallSpacing),
imageResource = ImageResource.Local(R.drawable.ic_arrow_right)
)
} else {
// Always put the loading in the screen and change the alpha so the space is reserved
// and the text doesn't jump around
CircularProgressBar(
Modifier
.padding(start = AppTheme.dimensions.paddingMedium)
.padding(start = AppTheme.dimensions.smallSpacing)
.size(24.dp)
.alpha(if (isLoading) 1f else 0f)
)
Expand Down

0 comments on commit 5f57913

Please sign in to comment.