Skip to content

Commit e41917f

Browse files
authored
Fix NoResult Error (#312)
* Only attempt completion of auth challenge when auth state is available. * Fix issue where NoResult was being returned after Success. * Clean up additional view model conventions. * Remove unused import.
1 parent eaf6604 commit e41917f

File tree

4 files changed

+66
-54
lines changed

4 files changed

+66
-54
lines changed

Demo/src/main/java/com/paypal/android/ui/approveorder/ApproveOrderViewModel.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -235,20 +235,17 @@ class ApproveOrderViewModel @Inject constructor(
235235
OrderInfo(orderId, status, didAttemptThreeDSecureAuthentication)
236236
}
237237
approveOrderState = ActionState.Success(orderInfo)
238-
// discard authState
239-
authState = null
238+
discardAuthState()
240239
}
241240

242241
is CardFinishApproveOrderResult.Failure -> {
243242
approveOrderState = ActionState.Failure(approveOrderResult.error)
244-
// discard authState
245-
authState = null
243+
discardAuthState()
246244
}
247245

248246
CardFinishApproveOrderResult.Canceled -> {
249247
approveOrderState = ActionState.Failure(Exception("USER CANCELED"))
250-
// discard authState
251-
authState = null
248+
discardAuthState()
252249
}
253250

254251
CardFinishApproveOrderResult.NoResult -> {
@@ -258,4 +255,8 @@ class ApproveOrderViewModel @Inject constructor(
258255
}
259256
}
260257
}
258+
259+
private fun discardAuthState() {
260+
authState = null
261+
}
261262
}

Demo/src/main/java/com/paypal/android/ui/paypalweb/PayPalWebViewModel.kt

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -149,33 +149,38 @@ class PayPalWebViewModel @Inject constructor(
149149
}
150150
}
151151

152+
private fun checkIfPayPalAuthFinished(intent: Intent): PayPalWebCheckoutFinishStartResult? =
153+
authState?.let { paypalClient?.finishStart(intent, it) }
154+
152155
fun completeAuthChallenge(intent: Intent) {
153-
val result = authState?.let { paypalClient?.finishStart(intent, it) }
154-
when (result) {
155-
is PayPalWebCheckoutFinishStartResult.Success -> {
156-
payPalWebCheckoutState = ActionState.Success(result)
157-
// discard authState
158-
authState = null
159-
}
156+
checkIfPayPalAuthFinished(intent)?.let { payPalAuthResult ->
157+
when (payPalAuthResult) {
158+
is PayPalWebCheckoutFinishStartResult.Success -> {
159+
payPalWebCheckoutState = ActionState.Success(payPalAuthResult)
160+
discardAuthState()
161+
}
160162

161-
is PayPalWebCheckoutFinishStartResult.Canceled -> {
162-
val error = Exception("USER CANCELED")
163-
payPalWebCheckoutState = ActionState.Failure(error)
164-
// discard authState
165-
authState = null
166-
}
163+
is PayPalWebCheckoutFinishStartResult.Canceled -> {
164+
val error = Exception("USER CANCELED")
165+
payPalWebCheckoutState = ActionState.Failure(error)
166+
discardAuthState()
167+
}
167168

168-
is PayPalWebCheckoutFinishStartResult.Failure -> {
169-
Log.i(TAG, "Checkout Error: ${result.error.errorDescription}")
170-
payPalWebCheckoutState = ActionState.Failure(result.error)
171-
// discard authState
172-
authState = null
173-
}
169+
is PayPalWebCheckoutFinishStartResult.Failure -> {
170+
Log.i(TAG, "Checkout Error: ${payPalAuthResult.error.errorDescription}")
171+
payPalWebCheckoutState = ActionState.Failure(payPalAuthResult.error)
172+
discardAuthState()
173+
}
174174

175-
null, PayPalWebCheckoutFinishStartResult.NoResult -> {
176-
// no result; re-enable PayPal button so user can retry
177-
payPalWebCheckoutState = ActionState.Idle
175+
PayPalWebCheckoutFinishStartResult.NoResult -> {
176+
// no result; re-enable PayPal button so user can retry
177+
payPalWebCheckoutState = ActionState.Idle
178+
}
178179
}
179180
}
180181
}
182+
183+
private fun discardAuthState() {
184+
authState = null
185+
}
181186
}

Demo/src/main/java/com/paypal/android/ui/paypalwebvault/PayPalWebVaultViewModel.kt

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -124,31 +124,36 @@ class PayPalWebVaultViewModel @Inject constructor(
124124
}
125125
}
126126

127+
private fun checkIfPayPalAuthFinished(intent: Intent): PayPalWebCheckoutFinishVaultResult? =
128+
authState?.let { paypalClient?.finishVault(intent, it) }
129+
127130
fun completeAuthChallenge(intent: Intent) {
128-
val result = authState?.let { paypalClient?.finishVault(intent, it) }
129-
when (result) {
130-
is PayPalWebCheckoutFinishVaultResult.Success -> {
131-
vaultPayPalState = ActionState.Success(result)
132-
// discard authState
133-
authState = null
134-
}
131+
checkIfPayPalAuthFinished(intent)?.let { result ->
132+
when (result) {
133+
is PayPalWebCheckoutFinishVaultResult.Success -> {
134+
vaultPayPalState = ActionState.Success(result)
135+
discardAuthState()
136+
}
135137

136-
is PayPalWebCheckoutFinishVaultResult.Failure -> {
137-
vaultPayPalState = ActionState.Failure(result.error)
138-
// discard authState
139-
authState = null
140-
}
138+
is PayPalWebCheckoutFinishVaultResult.Failure -> {
139+
vaultPayPalState = ActionState.Failure(result.error)
140+
discardAuthState()
141+
}
141142

142-
PayPalWebCheckoutFinishVaultResult.Canceled -> {
143-
vaultPayPalState = ActionState.Failure(Exception("USER CANCELED"))
144-
// discard authState
145-
authState = null
146-
}
143+
PayPalWebCheckoutFinishVaultResult.Canceled -> {
144+
vaultPayPalState = ActionState.Failure(Exception("USER CANCELED"))
145+
discardAuthState()
146+
}
147147

148-
null, PayPalWebCheckoutFinishVaultResult.NoResult -> {
149-
// no result; re-enable PayPal button so user can retry
150-
vaultPayPalState = ActionState.Idle
148+
PayPalWebCheckoutFinishVaultResult.NoResult -> {
149+
// no result; re-enable PayPal button so user can retry
150+
vaultPayPalState = ActionState.Idle
151+
}
151152
}
152153
}
153154
}
155+
156+
private fun discardAuthState() {
157+
authState = null
158+
}
154159
}

Demo/src/main/java/com/paypal/android/ui/vaultcard/VaultCardViewModel.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -207,20 +207,17 @@ class VaultCardViewModel @Inject constructor(
207207
)
208208
}
209209
updateSetupTokenState = ActionState.Success(setupTokenInfo)
210-
// discard authState
211-
authState = null
210+
discardAuthState()
212211
}
213212

214213
CardFinishVaultResult.Canceled -> {
215214
updateSetupTokenState = ActionState.Failure(Exception("USER CANCELED"))
216-
// discard authState
217-
authState = null
215+
discardAuthState()
218216
}
219217

220218
is CardFinishVaultResult.Failure -> {
221219
updateSetupTokenState = ActionState.Failure(vaultResult.error)
222-
// discard authState
223-
authState = null
220+
discardAuthState()
224221
}
225222

226223
CardFinishVaultResult.NoResult -> {
@@ -230,4 +227,8 @@ class VaultCardViewModel @Inject constructor(
230227
}
231228
}
232229
}
230+
231+
private fun discardAuthState() {
232+
authState = null
233+
}
233234
}

0 commit comments

Comments
 (0)