From 00ee94e1ced5943d58e022901b101bbc94da7588 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Thu, 24 Apr 2025 14:47:51 +0200 Subject: [PATCH 01/15] Point to Stripe 4 --- gradle/libs.versions.toml | 4 ++-- libs/cardreader/build.gradle | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8a65f6b9d20..ca0f888ca02 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -92,7 +92,7 @@ sentry = '4.10.0' squareup-javapoet = "1.7.0" squareup-leakcanary = '2.14' squareup-okhttp3 = "4.9.0" -stripe-terminal = '3.7.1' +stripe-terminal = '4.3.1' terl-lazysodium-android = '5.0.2@aar' tinder-statemachine = '0.2.0' volley = "1.1.1" @@ -255,7 +255,7 @@ squareup-javapoet = { module = "com.squareup:javapoet", version.ref = "squareup- squareup-leakcanary-android = { group = "com.squareup.leakcanary", name = "leakcanary-android", version.ref = "squareup-leakcanary" } squareup-okhttp3 = { module = "com.squareup.okhttp3:okhttp", version.ref = "squareup-okhttp3" } squareup-okhttp3-urlconnection = { module = "com.squareup.okhttp3:okhttp-urlconnection", version.ref = "squareup-okhttp3" } -stripe-terminal-localmobile = { group = "com.stripe", name = "stripeterminal-localmobile", version.ref = "stripe-terminal" } +stripe-terminal-taptopay = { group = "com.stripe", name = "stripeterminal-taptopay", version.ref = "stripe-terminal" } stripe-terminal-core = { group = "com.stripe", name = "stripeterminal-core", version.ref = "stripe-terminal" } terl-lazysodium-android = { module = "com.goterl:lazysodium-android", version.ref = "terl-lazysodium-android" } tinder-statemachine = { group = "com.tinder.statemachine", name = "statemachine", version.ref = "tinder-statemachine" } diff --git a/libs/cardreader/build.gradle b/libs/cardreader/build.gradle index 342f580cc6c..ad42c0e416c 100644 --- a/libs/cardreader/build.gradle +++ b/libs/cardreader/build.gradle @@ -28,7 +28,7 @@ android { } dependencies { - implementation(libs.stripe.terminal.localmobile) + implementation(libs.stripe.terminal.taptopay) implementation(libs.stripe.terminal.core) // Coroutines From ed46d955ef9ca35512fe548499b96384a4726b46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Thu, 24 Apr 2025 14:50:33 +0200 Subject: [PATCH 02/15] Update errors after breaking changes --- .../internal/connection/UpdateErrorMapper.kt | 11 ++++++----- .../internal/payments/PaymentErrorMapper.kt | 12 ++++++------ .../internal/payments/RefundErrorMapper.kt | 7 ++++--- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/UpdateErrorMapper.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/UpdateErrorMapper.kt index af5bb767e8f..ab62fee8c25 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/UpdateErrorMapper.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/UpdateErrorMapper.kt @@ -1,18 +1,19 @@ package com.woocommerce.android.cardreader.internal.connection +import com.stripe.stripeterminal.external.models.TerminalErrorCode import com.stripe.stripeterminal.external.models.TerminalException import com.woocommerce.android.cardreader.connection.event.SoftwareUpdateStatusErrorType internal class UpdateErrorMapper(private val batteryLevelProvider: () -> Float?) { - fun map(error: TerminalException.TerminalErrorCode): SoftwareUpdateStatusErrorType = + fun map(error: TerminalErrorCode): SoftwareUpdateStatusErrorType = when (error) { - TerminalException.TerminalErrorCode.READER_SOFTWARE_UPDATE_FAILED_BATTERY_LOW -> + TerminalErrorCode.READER_SOFTWARE_UPDATE_FAILED_BATTERY_LOW -> SoftwareUpdateStatusErrorType.BatteryLow(batteryLevelProvider.invoke()) - TerminalException.TerminalErrorCode.READER_SOFTWARE_UPDATE_FAILED_INTERRUPTED -> + TerminalErrorCode.READER_SOFTWARE_UPDATE_FAILED_INTERRUPTED -> SoftwareUpdateStatusErrorType.Interrupted - TerminalException.TerminalErrorCode.READER_SOFTWARE_UPDATE_FAILED_READER_ERROR -> + TerminalErrorCode.READER_SOFTWARE_UPDATE_FAILED_READER_ERROR -> SoftwareUpdateStatusErrorType.ReaderError - TerminalException.TerminalErrorCode.READER_SOFTWARE_UPDATE_FAILED_SERVER_ERROR -> + TerminalErrorCode.READER_SOFTWARE_UPDATE_FAILED_SERVER_ERROR -> SoftwareUpdateStatusErrorType.ServerError else -> SoftwareUpdateStatusErrorType.Failed } diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/payments/PaymentErrorMapper.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/payments/PaymentErrorMapper.kt index da54c0cfd4e..ac79baaf105 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/payments/PaymentErrorMapper.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/payments/PaymentErrorMapper.kt @@ -2,7 +2,7 @@ package com.woocommerce.android.cardreader.internal.payments import com.stripe.stripeterminal.external.models.PaymentIntent import com.stripe.stripeterminal.external.models.TerminalException -import com.stripe.stripeterminal.external.models.TerminalException.TerminalErrorCode +import com.stripe.stripeterminal.external.models.TerminalErrorCode import com.woocommerce.android.cardreader.CardReaderStore.CapturePaymentResponse import com.woocommerce.android.cardreader.CardReaderStore.CapturePaymentResponse.Error.NetworkError import com.woocommerce.android.cardreader.CardReaderStore.CapturePaymentResponse.Error.ServerError @@ -47,11 +47,11 @@ internal class PaymentErrorMapper { TerminalErrorCode.CARD_READ_TIMED_OUT -> CardReadTimeOut TerminalErrorCode.DECLINED_BY_STRIPE_API -> mapDeclinedByStripeApiError(exception) TerminalErrorCode.REQUEST_TIMED_OUT -> NoNetwork - TerminalErrorCode.LOCAL_MOBILE_NFC_DISABLED -> NfcDisabled - TerminalErrorCode.LOCAL_MOBILE_UNSUPPORTED_DEVICE, - TerminalErrorCode.LOCAL_MOBILE_DEVICE_TAMPERED, - TerminalErrorCode.LOCAL_MOBILE_UNSUPPORTED_ANDROID_VERSION -> DeviceIsNotSupported - TerminalErrorCode.LOCAL_MOBILE_LIBRARY_NOT_INCLUDED -> InvalidAppSetup + TerminalErrorCode.TAP_TO_PAY_NFC_DISABLED -> NfcDisabled + TerminalErrorCode.TAP_TO_PAY_UNSUPPORTED_DEVICE, + TerminalErrorCode.TAP_TO_PAY_DEVICE_TAMPERED, + TerminalErrorCode.TAP_TO_PAY_UNSUPPORTED_ANDROID_VERSION -> DeviceIsNotSupported + TerminalErrorCode.TAP_TO_PAY_LIBRARY_NOT_INCLUDED -> InvalidAppSetup TerminalErrorCode.CANCELED -> Canceled else -> Generic } diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/payments/RefundErrorMapper.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/payments/RefundErrorMapper.kt index d8a468ab10c..2eba9068029 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/payments/RefundErrorMapper.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/payments/RefundErrorMapper.kt @@ -1,5 +1,6 @@ package com.woocommerce.android.cardreader.internal.payments +import com.stripe.stripeterminal.external.models.TerminalErrorCode import com.stripe.stripeterminal.external.models.TerminalException import com.woocommerce.android.cardreader.payments.CardInteracRefundStatus.InteracRefundFailure import com.woocommerce.android.cardreader.payments.CardInteracRefundStatus.RefundStatusErrorType.Cancelled @@ -14,9 +15,9 @@ internal class RefundErrorMapper { exception: TerminalException ): InteracRefundFailure { val type = when (exception.errorCode) { - TerminalException.TerminalErrorCode.DECLINED_BY_STRIPE_API -> mapDeclinedByStripeApiError(exception) - TerminalException.TerminalErrorCode.STRIPE_API_CONNECTION_ERROR -> NoNetwork - TerminalException.TerminalErrorCode.CANCELED -> Cancelled + TerminalErrorCode.DECLINED_BY_STRIPE_API -> mapDeclinedByStripeApiError(exception) + TerminalErrorCode.STRIPE_API_CONNECTION_ERROR -> NoNetwork + TerminalErrorCode.CANCELED -> Cancelled else -> Generic } return InteracRefundFailure(type, exception.errorMessage, refundParams) From 0cb298860f5ebbcb519efe96c1f9b3550c126178 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Thu, 24 Apr 2025 15:17:06 +0200 Subject: [PATCH 03/15] Adapt to new connection API --- .../cardreader/CardReaderManagerFactory.kt | 3 ++ .../internal/connection/ConnectionManager.kt | 22 ++++++++----- .../connection/TapToPayReaderListenerImpl.kt | 32 +++++++++++++++++++ .../internal/wrappers/TerminalWrapper.kt | 10 +++--- 4 files changed, 53 insertions(+), 14 deletions(-) create mode 100644 libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/TapToPayReaderListenerImpl.kt diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/CardReaderManagerFactory.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/CardReaderManagerFactory.kt index ebc80fa35d8..0d1c1ba60f2 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/CardReaderManagerFactory.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/CardReaderManagerFactory.kt @@ -6,6 +6,7 @@ import com.woocommerce.android.cardreader.internal.CardReaderManagerImpl import com.woocommerce.android.cardreader.internal.TokenProvider import com.woocommerce.android.cardreader.internal.connection.BluetoothReaderListenerImpl import com.woocommerce.android.cardreader.internal.connection.ConnectionManager +import com.woocommerce.android.cardreader.internal.connection.TapToPayReaderListenerImpl import com.woocommerce.android.cardreader.internal.connection.TerminalListenerImpl import com.woocommerce.android.cardreader.internal.connection.UpdateErrorMapper import com.woocommerce.android.cardreader.internal.connection.actions.DiscoverReadersAction @@ -39,6 +40,7 @@ object CardReaderManagerFactory { AdditionalInfoMapper(), UpdateErrorMapper(batteryLevelProvider) ) + val tapToPayReaderListener = TapToPayReaderListenerImpl(logWrapper) val terminalListener = TerminalListenerImpl(logWrapper) val cardReaderConfigFactory = CardReaderConfigFactory() val paymentUtils = PaymentUtils(logWrapper) @@ -74,6 +76,7 @@ object CardReaderManagerFactory { ConnectionManager( terminal, bluetoothReaderListener, + tapToPayReaderListener, DiscoverReadersAction(terminal, logWrapper), terminalListener, application, diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/ConnectionManager.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/ConnectionManager.kt index 5cb456679ad..17031b914e6 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/ConnectionManager.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/ConnectionManager.kt @@ -6,10 +6,12 @@ import android.content.pm.PackageManager import android.os.Build import com.stripe.stripeterminal.external.callable.Callback import com.stripe.stripeterminal.external.callable.ReaderCallback +import com.stripe.stripeterminal.external.callable.TapToPayReaderListener import com.stripe.stripeterminal.external.models.ConnectionConfiguration.BluetoothConnectionConfiguration -import com.stripe.stripeterminal.external.models.ConnectionConfiguration.LocalMobileConnectionConfiguration +import com.stripe.stripeterminal.external.models.ConnectionConfiguration.TapToPayConnectionConfiguration import com.stripe.stripeterminal.external.models.DeviceType import com.stripe.stripeterminal.external.models.Reader +import com.stripe.stripeterminal.external.models.TerminalErrorCode import com.stripe.stripeterminal.external.models.TerminalException import com.woocommerce.android.cardreader.connection.CardReader import com.woocommerce.android.cardreader.connection.CardReaderDiscoveryEvents @@ -38,6 +40,7 @@ private const val ARTIFICIAL_STATUS_UPDATE_DELAY_IN_MILLIS = 500L internal class ConnectionManager( private val terminal: TerminalWrapper, private val bluetoothReaderListener: BluetoothReaderListenerImpl, + private val tapToPayReaderListener: TapToPayReaderListenerImpl, private val discoverReadersAction: DiscoverReadersAction, private val terminalListenerImpl: TerminalListenerImpl, private val application: Application, @@ -140,7 +143,7 @@ internal class ConnectionManager( } when (it.cardReader.deviceType) { - DeviceType.COTS_DEVICE -> connectToBuiltInReader(cardReader, locationId, readerCallback) + DeviceType.TAP_TO_PAY_DEVICE -> connectToBuiltInReader(cardReader, locationId, readerCallback) else -> connectToExternalReader(cardReader, locationId, readerCallback) } } @@ -199,9 +202,8 @@ internal class ConnectionManager( ) { terminal.connectToReader( cardReader.cardReader, - BluetoothConnectionConfiguration(locationId), - readerCallback, - bluetoothReaderListener, + BluetoothConnectionConfiguration(locationId, true, bluetoothReaderListener), + readerCallback ) } @@ -212,14 +214,18 @@ internal class ConnectionManager( ) { terminal.connectToMobile( cardReader.cardReader, - LocalMobileConnectionConfiguration(locationId), + TapToPayConnectionConfiguration( + locationId, + autoReconnectOnUnexpectedDisconnect = true, + tapToPayReaderListener + ), readerCallback ) } - private fun TerminalException.TerminalErrorCode.toErrorCode(): CardReaderStatus.NotConnected.ErrorCode = + private fun TerminalErrorCode.toErrorCode(): CardReaderStatus.NotConnected.ErrorCode = when (this) { - TerminalException.TerminalErrorCode.READER_BATTERY_CRITICALLY_LOW -> + TerminalErrorCode.READER_BATTERY_CRITICALLY_LOW -> CardReaderStatus.NotConnected.ErrorCode.BATTERY_CRITICALLY_LOW else -> CardReaderStatus.NotConnected.ErrorCode.OTHER diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/TapToPayReaderListenerImpl.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/TapToPayReaderListenerImpl.kt new file mode 100644 index 00000000000..50210e8866d --- /dev/null +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/TapToPayReaderListenerImpl.kt @@ -0,0 +1,32 @@ +package com.woocommerce.android.cardreader.internal.connection + +import com.stripe.stripeterminal.external.callable.TapToPayReaderListener +import com.stripe.stripeterminal.external.models.DisconnectReason +import com.stripe.stripeterminal.external.models.Reader +import com.stripe.stripeterminal.external.callable.Cancelable +import com.woocommerce.android.cardreader.LogWrapper +import com.woocommerce.android.cardreader.internal.LOG_TAG + +class TapToPayReaderListenerImpl( + private val logWrapper: LogWrapper +) : TapToPayReaderListener { + override fun onDisconnect(reason: DisconnectReason) { + logWrapper.d(LOG_TAG, "onUnexpectedReaderDisconnect") + } + + override fun onReaderReconnectFailed(reader: Reader) { + logWrapper.d(LOG_TAG, "onReaderReconnectFailed") + } + + override fun onReaderReconnectStarted( + reader: Reader, + cancelReconnect: Cancelable, + reason: DisconnectReason + ) { + logWrapper.d(LOG_TAG, "onReaderReconnectStarted") + } + + override fun onReaderReconnectSucceeded(reader: Reader) { + logWrapper.d(LOG_TAG, "onReaderReconnectSucceeded") + } +} diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/wrappers/TerminalWrapper.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/wrappers/TerminalWrapper.kt index 96c138f7a70..087d9dd96ae 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/wrappers/TerminalWrapper.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/wrappers/TerminalWrapper.kt @@ -9,7 +9,6 @@ import com.stripe.stripeterminal.external.callable.ConnectionTokenProvider import com.stripe.stripeterminal.external.callable.DiscoveryListener import com.stripe.stripeterminal.external.callable.PaymentIntentCallback import com.stripe.stripeterminal.external.callable.ReaderCallback -import com.stripe.stripeterminal.external.callable.ReaderListener import com.stripe.stripeterminal.external.callable.RefundCallback import com.stripe.stripeterminal.external.callable.TerminalListener import com.stripe.stripeterminal.external.models.ConnectionConfiguration @@ -56,15 +55,14 @@ internal class TerminalWrapper { fun connectToReader( reader: Reader, configuration: ConnectionConfiguration.BluetoothConnectionConfiguration, - callback: ReaderCallback, - listener: ReaderListener - ) = Terminal.getInstance().connectBluetoothReader(reader, configuration, listener, callback) + callback: ReaderCallback + ) = Terminal.getInstance().connectReader(reader, configuration, callback) fun connectToMobile( reader: Reader, - configuration: ConnectionConfiguration.LocalMobileConnectionConfiguration, + configuration: ConnectionConfiguration.TapToPayConnectionConfiguration, callback: ReaderCallback - ) = Terminal.getInstance().connectLocalMobileReader(reader, configuration, callback) + ) = Terminal.getInstance().connectReader(reader, configuration, callback) fun disconnectReader(callback: Callback) = Terminal.getInstance().disconnectReader(callback) From 9ccb8d35754df4d1a851b373606ca8cd033fb5be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Thu, 24 Apr 2025 15:21:14 +0200 Subject: [PATCH 04/15] Adapt after renaming breaking changes --- .../internal/connection/actions/DiscoverReadersAction.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/actions/DiscoverReadersAction.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/actions/DiscoverReadersAction.kt index a1efa823727..6ba25cada2d 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/actions/DiscoverReadersAction.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/actions/DiscoverReadersAction.kt @@ -34,7 +34,7 @@ internal class DiscoverReadersAction( value = "android.permission.ACCESS_FINE_LOCATION", ) fun discoverBuildInReaders(isSimulated: Boolean): Flow = - discoverReaders(DiscoveryConfiguration.LocalMobileDiscoveryConfiguration(isSimulated)) + discoverReaders(DiscoveryConfiguration.TapToPayDiscoveryConfiguration(isSimulated)) @RequiresPermission( allOf = [ From f635d44e8cb01f3930ce5bc39074a289e67905b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Thu, 24 Apr 2025 15:22:17 +0200 Subject: [PATCH 05/15] Adapt after moving function away from TerminalListener to individual reader listeners --- .../internal/connection/BluetoothReaderListenerImpl.kt | 9 +++++++-- .../internal/connection/TerminalListenerImpl.kt | 9 ++++----- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/BluetoothReaderListenerImpl.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/BluetoothReaderListenerImpl.kt index 9d5819ce1bc..9332ddd64b6 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/BluetoothReaderListenerImpl.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/BluetoothReaderListenerImpl.kt @@ -1,8 +1,9 @@ package com.woocommerce.android.cardreader.internal.connection import com.stripe.stripeterminal.external.callable.Cancelable -import com.stripe.stripeterminal.external.callable.ReaderListener +import com.stripe.stripeterminal.external.callable.MobileReaderListener import com.stripe.stripeterminal.external.models.BatteryStatus +import com.stripe.stripeterminal.external.models.DisconnectReason import com.stripe.stripeterminal.external.models.ReaderDisplayMessage import com.stripe.stripeterminal.external.models.ReaderEvent import com.stripe.stripeterminal.external.models.ReaderInputOptions @@ -27,7 +28,7 @@ internal class BluetoothReaderListenerImpl( private val logWrapper: LogWrapper, private val additionalInfoMapper: AdditionalInfoMapper, private val updateErrorMapper: UpdateErrorMapper, -) : ReaderListener { +) : MobileReaderListener { private val _updateStatusEvents = MutableStateFlow(SoftwareUpdateStatus.Unknown) val updateStatusEvents = _updateStatusEvents.asStateFlow() @@ -104,6 +105,10 @@ internal class BluetoothReaderListenerImpl( _displayMessagesEvents.value = BluetoothCardReaderMessages.CardReaderInputMessage(options.toString()) } + override fun onDisconnect(reason: DisconnectReason) { + logWrapper.d(LOG_TAG, "onUnexpectedReaderDisconnect") + } + fun resetConnectionState() { _updateStatusEvents.value = SoftwareUpdateStatus.Unknown _updateAvailabilityEvents.value = SoftwareUpdateAvailability.NotAvailable diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/TerminalListenerImpl.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/TerminalListenerImpl.kt index b1d4c2cbfa6..6744bd432c2 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/TerminalListenerImpl.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/TerminalListenerImpl.kt @@ -20,13 +20,12 @@ internal class TerminalListenerImpl( _readerStatus.value = newStatus } - override fun onUnexpectedReaderDisconnect(reader: Reader) { - _readerStatus.value = CardReaderStatus.NotConnected() - logWrapper.d(LOG_TAG, "onUnexpectedReaderDisconnect") - } - override fun onConnectionStatusChange(status: ConnectionStatus) { logWrapper.d(LOG_TAG, "onConnectionStatusChange: ${status.name}") + + if (status == ConnectionStatus.NOT_CONNECTED) { + _readerStatus.value = CardReaderStatus.NotConnected() + } } override fun onPaymentStatusChange(status: PaymentStatus) { From 1f0b7c52a88dee7e96106d79872853b40d3054a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Thu, 24 Apr 2025 16:36:16 +0200 Subject: [PATCH 06/15] Handle the fact that now the processPayment from Stripe Terminal returns a Cancelable. --- .../payments/actions/ProcessPaymentAction.kt | 17 +++++++++++++++-- .../internal/wrappers/TerminalWrapper.kt | 2 +- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/payments/actions/ProcessPaymentAction.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/payments/actions/ProcessPaymentAction.kt index c042652c406..4bbcb5e3405 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/payments/actions/ProcessPaymentAction.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/payments/actions/ProcessPaymentAction.kt @@ -1,5 +1,6 @@ package com.woocommerce.android.cardreader.internal.payments.actions +import com.stripe.stripeterminal.external.callable.Callback import com.stripe.stripeterminal.external.callable.PaymentIntentCallback import com.stripe.stripeterminal.external.models.PaymentIntent import com.stripe.stripeterminal.external.models.TerminalException @@ -21,7 +22,7 @@ internal class ProcessPaymentAction(private val terminal: TerminalWrapper, priva fun processPayment(paymentIntent: PaymentIntent): Flow { return callbackFlow { - terminal.processPayment( + val cancelable = terminal.processPayment( paymentIntent, object : PaymentIntentCallback { override fun onSuccess(paymentIntent: PaymentIntent) { @@ -41,7 +42,19 @@ internal class ProcessPaymentAction(private val terminal: TerminalWrapper, priva } } ) - awaitClose() + awaitClose { + if (!cancelable.isCompleted) cancelable.cancel(noop) + } } } } + +private val noop = object : Callback { + override fun onFailure(e: TerminalException) { + // noop + } + + override fun onSuccess() { + // noop + } +} diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/wrappers/TerminalWrapper.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/wrappers/TerminalWrapper.kt index 087d9dd96ae..429e8cb35c5 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/wrappers/TerminalWrapper.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/wrappers/TerminalWrapper.kt @@ -77,7 +77,7 @@ internal class TerminalWrapper { callback: PaymentIntentCallback ): Cancelable = Terminal.getInstance().collectPaymentMethod(paymentIntent, callback) - fun processPayment(paymentIntent: PaymentIntent, callback: PaymentIntentCallback) = + fun processPayment(paymentIntent: PaymentIntent, callback: PaymentIntentCallback): Cancelable = Terminal.getInstance().confirmPaymentIntent(paymentIntent, callback) fun cancelPayment(paymentIntent: PaymentIntent, callback: PaymentIntentCallback) = From 08e9dcc6a86a480d3db988cd654d077ecd58b45c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Thu, 24 Apr 2025 17:03:23 +0200 Subject: [PATCH 07/15] Rename Cots to TapToPay to follow Stripe nomenclature --- .../payments/cardreader/connect/CardReaderConnectViewModel.kt | 4 ++-- .../manuals/CardReaderManualsSupportedReadersMapper.kt | 4 ++-- .../android/cardreader/config/CardReaderConfigForCanada.kt | 2 +- .../android/cardreader/config/CardReaderConfigForGB.kt | 2 +- .../android/cardreader/config/CardReaderConfigForUSA.kt | 2 +- .../android/cardreader/connection/CardReaderType.kt | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/connect/CardReaderConnectViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/connect/CardReaderConnectViewModel.kt index 91e063f6863..b4cdcd9840d 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/connect/CardReaderConnectViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/connect/CardReaderConnectViewModel.kt @@ -17,7 +17,7 @@ import com.woocommerce.android.cardreader.connection.CardReaderDiscoveryEvents.S import com.woocommerce.android.cardreader.connection.CardReaderStatus import com.woocommerce.android.cardreader.connection.CardReaderTypesToDiscover.SpecificReaders.BuiltInReaders import com.woocommerce.android.cardreader.connection.CardReaderTypesToDiscover.SpecificReaders.ExternalReaders -import com.woocommerce.android.cardreader.connection.ReaderType.BuildInReader.CotsDevice +import com.woocommerce.android.cardreader.connection.ReaderType.BuildInReader.TapToPayDevice import com.woocommerce.android.cardreader.connection.ReaderType.ExternalReader.Chipper2X import com.woocommerce.android.cardreader.connection.ReaderType.ExternalReader.StripeM2 import com.woocommerce.android.cardreader.connection.ReaderType.ExternalReader.WisePade3 @@ -578,7 +578,7 @@ class CardReaderConnectViewModel @Inject constructor( private fun buildReadersToDiscover() = when (arguments.cardReaderType) { - BUILT_IN -> BuiltInReaders(listOf(CotsDevice)) + BUILT_IN -> BuiltInReaders(listOf(TapToPayDevice)) EXTERNAL -> ExternalReaders( listOf( Chipper2X, diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/manuals/CardReaderManualsSupportedReadersMapper.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/manuals/CardReaderManualsSupportedReadersMapper.kt index afda4db6e45..8bc13d0a785 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/manuals/CardReaderManualsSupportedReadersMapper.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/manuals/CardReaderManualsSupportedReadersMapper.kt @@ -4,7 +4,7 @@ import com.woocommerce.android.R.drawable import com.woocommerce.android.R.string import com.woocommerce.android.cardreader.config.CardReaderConfigForSupportedCountry import com.woocommerce.android.cardreader.connection.ReaderType -import com.woocommerce.android.cardreader.connection.ReaderType.BuildInReader.CotsDevice +import com.woocommerce.android.cardreader.connection.ReaderType.BuildInReader.TapToPayDevice import com.woocommerce.android.cardreader.connection.ReaderType.ExternalReader.Chipper2X import com.woocommerce.android.cardreader.connection.ReaderType.ExternalReader.StripeM2 import com.woocommerce.android.cardreader.connection.ReaderType.ExternalReader.WisePade3 @@ -34,7 +34,7 @@ class CardReaderManualsSupportedReadersMapper @Inject constructor() { label = string.card_reader_wisepad_3_manual_card_reader, onManualClicked = clickListeners[it]!! ) - CotsDevice -> null // This is built-in reader, we don't need to show it in the list + TapToPayDevice -> null // This is built-in reader, we don't need to show it in the list else -> error("$it doesn't have a manual") } } diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/config/CardReaderConfigForCanada.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/config/CardReaderConfigForCanada.kt index 9737f483b8f..29e6cc16979 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/config/CardReaderConfigForCanada.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/config/CardReaderConfigForCanada.kt @@ -11,7 +11,7 @@ object CardReaderConfigForCanada : CardReaderConfigForSupportedCountry( countryCode = "CA", supportedReaders = listOf( ReaderType.ExternalReader.WisePade3, - ReaderType.BuildInReader.CotsDevice, + ReaderType.BuildInReader.TapToPayDevice, ), paymentMethodTypes = listOf( PaymentMethodType.CARD_PRESENT, diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/config/CardReaderConfigForGB.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/config/CardReaderConfigForGB.kt index d258fbcb0f6..034c38911d7 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/config/CardReaderConfigForGB.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/config/CardReaderConfigForGB.kt @@ -11,7 +11,7 @@ object CardReaderConfigForGB : CardReaderConfigForSupportedCountry( countryCode = "GB", supportedReaders = listOf( ReaderType.ExternalReader.WisePade3, - ReaderType.BuildInReader.CotsDevice, + ReaderType.BuildInReader.TapToPayDevice, ), paymentMethodTypes = listOf(PaymentMethodType.CARD_PRESENT), supportedExtensions = listOf( diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/config/CardReaderConfigForUSA.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/config/CardReaderConfigForUSA.kt index c84274db1cd..f9f26467cb8 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/config/CardReaderConfigForUSA.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/config/CardReaderConfigForUSA.kt @@ -12,7 +12,7 @@ object CardReaderConfigForUSA : CardReaderConfigForSupportedCountry( supportedReaders = listOf( ReaderType.ExternalReader.Chipper2X, ReaderType.ExternalReader.StripeM2, - ReaderType.BuildInReader.CotsDevice, + ReaderType.BuildInReader.TapToPayDevice, ), paymentMethodTypes = listOf(PaymentMethodType.CARD_PRESENT), supportedExtensions = listOf( diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/connection/CardReaderType.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/connection/CardReaderType.kt index a0a8e9baeca..23be2ae724c 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/connection/CardReaderType.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/connection/CardReaderType.kt @@ -13,7 +13,7 @@ sealed class ReaderType(val name: String) { } sealed class BuildInReader(buildInReaderName: String) : ReaderType(buildInReaderName) { - object CotsDevice : BuildInReader("COTS_DEVICE") + object TapToPayDevice : BuildInReader("TAP_TO_PAY_DEVICE") } object Unknown : ReaderType("UNKNOWN") @@ -26,7 +26,7 @@ sealed class ReaderType(val name: String) { "VERIFONE_P400" -> ExternalReader.VerifoneP400 "WISEPAD_3" -> ExternalReader.WisePade3 "WISEPOS_E" -> ExternalReader.WisePadeE - "COTS_DEVICE" -> BuildInReader.CotsDevice + "COTS_DEVICE" -> BuildInReader.TapToPayDevice else -> Unknown } From d85302a47cd52be9e8d5053c8ab422f62b159f1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Thu, 24 Apr 2025 17:03:37 +0200 Subject: [PATCH 08/15] Adapt Unit tests --- .../BluetoothReaderListenerImplTest.kt | 5 ++-- .../connection/ConnectionManagerTest.kt | 25 +++++++++++-------- .../connection/TerminalListenerImplTest.kt | 4 +-- .../connection/UpdateErrorMapperTest.kt | 11 ++++---- .../actions/DiscoverReadersActionTest.kt | 2 +- .../payments/PaymentErrorMapperTest.kt | 14 +++++------ .../payments/RefundErrorMapperTest.kt | 15 +++++------ .../actions/ProcessPaymentActionTest.kt | 6 +++++ 8 files changed, 47 insertions(+), 35 deletions(-) diff --git a/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/BluetoothReaderListenerImplTest.kt b/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/BluetoothReaderListenerImplTest.kt index d19382e0477..c59573ec9b8 100644 --- a/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/BluetoothReaderListenerImplTest.kt +++ b/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/BluetoothReaderListenerImplTest.kt @@ -2,6 +2,7 @@ package com.woocommerce.android.cardreader.internal.connection import com.stripe.stripeterminal.external.models.ReaderDisplayMessage import com.stripe.stripeterminal.external.models.ReaderInputOptions +import com.stripe.stripeterminal.external.models.TerminalErrorCode import com.stripe.stripeterminal.external.models.TerminalException import com.woocommerce.android.cardreader.LogWrapper import com.woocommerce.android.cardreader.connection.event.BatteryStatus.CRITICAL @@ -35,9 +36,9 @@ class BluetoothReaderListenerImplTest { val errorType: SoftwareUpdateStatusErrorType = SoftwareUpdateStatusErrorType.Failed val exception = mock { on { message }.thenReturn(expectedMessage) - on { errorCode }.thenReturn(TerminalException.TerminalErrorCode.READER_SOFTWARE_UPDATE_FAILED) + on { errorCode }.thenReturn(TerminalErrorCode.READER_SOFTWARE_UPDATE_FAILED) } - whenever(updateErrorMapper.map(TerminalException.TerminalErrorCode.READER_SOFTWARE_UPDATE_FAILED)) + whenever(updateErrorMapper.map(TerminalErrorCode.READER_SOFTWARE_UPDATE_FAILED)) .thenReturn(errorType) // WHEN diff --git a/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/ConnectionManagerTest.kt b/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/ConnectionManagerTest.kt index cdb34edc8c5..b42df8cd02b 100644 --- a/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/ConnectionManagerTest.kt +++ b/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/ConnectionManagerTest.kt @@ -5,6 +5,7 @@ import com.stripe.stripeterminal.external.callable.Callback import com.stripe.stripeterminal.external.callable.ReaderCallback import com.stripe.stripeterminal.external.models.DeviceType import com.stripe.stripeterminal.external.models.Reader +import com.stripe.stripeterminal.external.models.TerminalErrorCode import com.stripe.stripeterminal.external.models.TerminalException import com.woocommerce.android.cardreader.connection.CardReaderDiscoveryEvents import com.woocommerce.android.cardreader.connection.CardReaderDiscoveryEvents.ReadersFound @@ -40,6 +41,7 @@ class ConnectionManagerTest : CardReaderBaseUnitTest() { private val terminalWrapper: TerminalWrapper = mock() private val bluetoothReaderListener: BluetoothReaderListenerImpl = mock() + private val tapToPayReaderListenerImpl: TapToPayReaderListenerImpl = mock() private val discoverReadersAction: DiscoverReadersAction = mock() private val terminalListenerImpl: TerminalListenerImpl = mock { on { readerStatus }.thenReturn(MutableStateFlow(CardReaderStatus.NotConnected())) @@ -62,6 +64,7 @@ class ConnectionManagerTest : CardReaderBaseUnitTest() { connectionManager = ConnectionManager( terminalWrapper, bluetoothReaderListener, + tapToPayReaderListenerImpl, discoverReadersAction, terminalListenerImpl, application, @@ -130,7 +133,7 @@ class ConnectionManagerTest : CardReaderBaseUnitTest() { ) val discoveredBuiltInReaders = listOf( mock { - on { deviceType }.thenReturn(DeviceType.COTS_DEVICE) + on { deviceType }.thenReturn(DeviceType.TAP_TO_PAY_DEVICE) } ) whenever(discoverReadersAction.discoverExternalReaders(anyBoolean())) @@ -144,7 +147,7 @@ class ConnectionManagerTest : CardReaderBaseUnitTest() { ).toList() assertThat((result[0] as ReadersFound).list[0].type).isEqualTo( - ReaderType.BuildInReader.CotsDevice.name + ReaderType.BuildInReader.TapToPayDevice.name ) assertThat((result[0] as ReadersFound).list.size).isEqualTo(1) @@ -194,7 +197,7 @@ class ConnectionManagerTest : CardReaderBaseUnitTest() { testBlocking { val discoveredReaders = listOf( mock { - on { deviceType }.thenReturn(DeviceType.COTS_DEVICE) + on { deviceType }.thenReturn(DeviceType.TAP_TO_PAY_DEVICE) } ) whenever(discoverReadersAction.discoverBuildInReaders(anyBoolean())) @@ -203,12 +206,12 @@ class ConnectionManagerTest : CardReaderBaseUnitTest() { val result = connectionManager.discoverReaders( true, CardReaderTypesToDiscover.SpecificReaders.BuiltInReaders( - listOf(ReaderType.BuildInReader.CotsDevice) + listOf(ReaderType.BuildInReader.TapToPayDevice) ) ).toList() assertThat((result.first() as ReadersFound).list[0].type).isEqualTo( - ReaderType.BuildInReader.CotsDevice.name + ReaderType.BuildInReader.TapToPayDevice.name ) assertThat((result.first() as ReadersFound).list.size).isEqualTo(1) } @@ -243,7 +246,7 @@ class ConnectionManagerTest : CardReaderBaseUnitTest() { val cardReader: CardReaderImpl = mock { on { cardReader }.thenReturn(reader) } - whenever(terminalWrapper.connectToReader(any(), any(), any(), any())).thenAnswer { + whenever(terminalWrapper.connectToReader(any(), any(), any())).thenAnswer { (it.arguments[2] as ReaderCallback).onSuccess(mock()) } @@ -262,12 +265,12 @@ class ConnectionManagerTest : CardReaderBaseUnitTest() { on { cardReader }.thenReturn(reader) } val message = "error_message" - val errorCode = TerminalException.TerminalErrorCode.READER_SOFTWARE_UPDATE_FAILED_READER_ERROR + val errorCode = TerminalErrorCode.READER_SOFTWARE_UPDATE_FAILED_READER_ERROR val exception: TerminalException = mock { on { errorMessage }.thenReturn(message) on { this.errorCode }.thenReturn(errorCode) } - whenever(terminalWrapper.connectToReader(any(), any(), any(), any())).thenAnswer { + whenever(terminalWrapper.connectToReader(any(), any(), any())).thenAnswer { (it.arguments[2] as ReaderCallback).onFailure(exception) } @@ -291,12 +294,12 @@ class ConnectionManagerTest : CardReaderBaseUnitTest() { on { cardReader }.thenReturn(reader) } val message = "error_message" - val errorCode = TerminalException.TerminalErrorCode.READER_BATTERY_CRITICALLY_LOW + val errorCode = TerminalErrorCode.READER_BATTERY_CRITICALLY_LOW val exception: TerminalException = mock { on { errorMessage }.thenReturn(message) on { this.errorCode }.thenReturn(errorCode) } - whenever(terminalWrapper.connectToReader(any(), any(), any(), any())).thenAnswer { + whenever(terminalWrapper.connectToReader(any(), any(), any())).thenAnswer { (it.arguments[2] as ReaderCallback).onFailure(exception) } @@ -319,7 +322,7 @@ class ConnectionManagerTest : CardReaderBaseUnitTest() { val cardReader: CardReaderImpl = mock { on { cardReader }.thenReturn(reader) } - whenever(terminalWrapper.connectToReader(any(), any(), any(), any())).thenAnswer { + whenever(terminalWrapper.connectToReader(any(), any(), any())).thenAnswer { (it.arguments[2] as ReaderCallback).onSuccess(cardReader.cardReader) } diff --git a/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/TerminalListenerImplTest.kt b/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/TerminalListenerImplTest.kt index 4b601de5560..5753445d84d 100644 --- a/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/TerminalListenerImplTest.kt +++ b/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/TerminalListenerImplTest.kt @@ -13,8 +13,8 @@ class TerminalListenerImplTest { private val listener = TerminalListenerImpl(logWrapper) @Test - fun `when reader unexpectedly disconnected, then not connected status emitted`() { - listener.onUnexpectedReaderDisconnect(mock()) + fun `when reader disconnects, then not connected status emitted`() { + listener.onConnectionStatusChange(ConnectionStatus.NOT_CONNECTED) assertThat(listener.readerStatus.value).isEqualTo(CardReaderStatus.NotConnected()) } diff --git a/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/UpdateErrorMapperTest.kt b/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/UpdateErrorMapperTest.kt index 1ab831a6daf..309ade88f85 100644 --- a/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/UpdateErrorMapperTest.kt +++ b/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/UpdateErrorMapperTest.kt @@ -1,5 +1,6 @@ package com.woocommerce.android.cardreader.internal.connection +import com.stripe.stripeterminal.external.models.TerminalErrorCode import com.stripe.stripeterminal.external.models.TerminalException import com.woocommerce.android.cardreader.connection.event.SoftwareUpdateStatusErrorType import org.junit.Assert.assertEquals @@ -14,7 +15,7 @@ class UpdateErrorMapperTest { @Test fun `given bluetooth error, when mapping, then failed returns`() { // GIVEN - val error = TerminalException.TerminalErrorCode.BLUETOOTH_ERROR + val error = TerminalErrorCode.BLUETOOTH_ERROR // WHEN val result = mapper.map(error) @@ -26,7 +27,7 @@ class UpdateErrorMapperTest { @Test fun `given reader error, when mapping, then reader error returns`() { // GIVEN - val error = TerminalException.TerminalErrorCode.READER_SOFTWARE_UPDATE_FAILED_READER_ERROR + val error = TerminalErrorCode.READER_SOFTWARE_UPDATE_FAILED_READER_ERROR // WHEN val result = mapper.map(error) @@ -38,7 +39,7 @@ class UpdateErrorMapperTest { @Test fun `given server error, when mapping, then server error returns`() { // GIVEN - val error = TerminalException.TerminalErrorCode.READER_SOFTWARE_UPDATE_FAILED_SERVER_ERROR + val error = TerminalErrorCode.READER_SOFTWARE_UPDATE_FAILED_SERVER_ERROR // WHEN val result = mapper.map(error) @@ -52,7 +53,7 @@ class UpdateErrorMapperTest { // GIVEN val batteryLevel = 0.3f whenever(batteryLevelProvider.invoke()).thenReturn(batteryLevel) - val error = TerminalException.TerminalErrorCode.READER_SOFTWARE_UPDATE_FAILED_BATTERY_LOW + val error = TerminalErrorCode.READER_SOFTWARE_UPDATE_FAILED_BATTERY_LOW // WHEN val result = mapper.map(error) @@ -64,7 +65,7 @@ class UpdateErrorMapperTest { @Test fun `given interrupted error, when mapping, then interrupted error returns`() { // GIVEN - val error = TerminalException.TerminalErrorCode.READER_SOFTWARE_UPDATE_FAILED_INTERRUPTED + val error = TerminalErrorCode.READER_SOFTWARE_UPDATE_FAILED_INTERRUPTED // WHEN val result = mapper.map(error) diff --git a/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/actions/DiscoverReadersActionTest.kt b/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/actions/DiscoverReadersActionTest.kt index 62e3c370fda..49ad16a592c 100644 --- a/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/actions/DiscoverReadersActionTest.kt +++ b/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/actions/DiscoverReadersActionTest.kt @@ -230,7 +230,7 @@ class DiscoverReadersActionTest : CardReaderBaseUnitTest() { any() ) assertThat(configCaptor.firstValue).isEqualTo( - DiscoveryConfiguration.LocalMobileDiscoveryConfiguration( + DiscoveryConfiguration.TapToPayDiscoveryConfiguration( true ) ) diff --git a/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/payments/PaymentErrorMapperTest.kt b/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/payments/PaymentErrorMapperTest.kt index a45959026c7..9404e25d93a 100644 --- a/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/payments/PaymentErrorMapperTest.kt +++ b/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/payments/PaymentErrorMapperTest.kt @@ -2,8 +2,8 @@ package com.woocommerce.android.cardreader.internal.payments import com.stripe.stripeterminal.external.models.PaymentIntent import com.stripe.stripeterminal.external.models.TerminalException -import com.stripe.stripeterminal.external.models.TerminalException.TerminalErrorCode -import com.stripe.stripeterminal.external.models.TerminalException.TerminalErrorCode.DECLINED_BY_READER +import com.stripe.stripeterminal.external.models.TerminalErrorCode +import com.stripe.stripeterminal.external.models.TerminalErrorCode.DECLINED_BY_READER import com.woocommerce.android.cardreader.CardReaderStore.CapturePaymentResponse import com.woocommerce.android.cardreader.internal.CardReaderBaseUnitTest import com.woocommerce.android.cardreader.payments.CardPaymentStatus.CardPaymentStatusErrorType.BuiltInReader @@ -562,7 +562,7 @@ class PaymentErrorMapperTest : CardReaderBaseUnitTest() { @Test fun `given local_mobile_nfc_disabled, when terminal exception thrown, then nfc disabled type returned`() { - whenever(terminalException.errorCode).thenReturn(TerminalErrorCode.LOCAL_MOBILE_NFC_DISABLED) + whenever(terminalException.errorCode).thenReturn(TerminalErrorCode.TAP_TO_PAY_NFC_DISABLED) val result = mapper.mapTerminalError(mock(), terminalException) @@ -571,7 +571,7 @@ class PaymentErrorMapperTest : CardReaderBaseUnitTest() { @Test fun `given local_mobile_library_not_included, when terminal exception thrown, then invalid app setup returned`() { - whenever(terminalException.errorCode).thenReturn(TerminalErrorCode.LOCAL_MOBILE_LIBRARY_NOT_INCLUDED) + whenever(terminalException.errorCode).thenReturn(TerminalErrorCode.TAP_TO_PAY_LIBRARY_NOT_INCLUDED) val result = mapper.mapTerminalError(mock(), terminalException) @@ -580,7 +580,7 @@ class PaymentErrorMapperTest : CardReaderBaseUnitTest() { @Test fun `given local_mobile_unsupported_device, when terminal exception thrown, then device unsupported returned`() { - whenever(terminalException.errorCode).thenReturn(TerminalErrorCode.LOCAL_MOBILE_UNSUPPORTED_DEVICE) + whenever(terminalException.errorCode).thenReturn(TerminalErrorCode.TAP_TO_PAY_UNSUPPORTED_DEVICE) val result = mapper.mapTerminalError(mock(), terminalException) @@ -589,7 +589,7 @@ class PaymentErrorMapperTest : CardReaderBaseUnitTest() { @Test fun `given local_mobile_unsupported_android_version, when terminal exception thrown, then device unsupported`() { - whenever(terminalException.errorCode).thenReturn(TerminalErrorCode.LOCAL_MOBILE_UNSUPPORTED_ANDROID_VERSION) + whenever(terminalException.errorCode).thenReturn(TerminalErrorCode.TAP_TO_PAY_UNSUPPORTED_ANDROID_VERSION) val result = mapper.mapTerminalError(mock(), terminalException) @@ -598,7 +598,7 @@ class PaymentErrorMapperTest : CardReaderBaseUnitTest() { @Test fun `given local_mobile_device_tampered, when terminal exception thrown, then device unsupported returned`() { - whenever(terminalException.errorCode).thenReturn(TerminalErrorCode.LOCAL_MOBILE_DEVICE_TAMPERED) + whenever(terminalException.errorCode).thenReturn(TerminalErrorCode.TAP_TO_PAY_DEVICE_TAMPERED) val result = mapper.mapTerminalError(mock(), terminalException) diff --git a/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/payments/RefundErrorMapperTest.kt b/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/payments/RefundErrorMapperTest.kt index 916d7ff061a..9866aebb6e6 100644 --- a/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/payments/RefundErrorMapperTest.kt +++ b/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/payments/RefundErrorMapperTest.kt @@ -1,5 +1,6 @@ package com.woocommerce.android.cardreader.internal.payments +import com.stripe.stripeterminal.external.models.TerminalErrorCode import com.stripe.stripeterminal.external.models.TerminalException import com.woocommerce.android.cardreader.payments.CardInteracRefundStatus.RefundStatusErrorType.Cancelled import com.woocommerce.android.cardreader.payments.CardInteracRefundStatus.RefundStatusErrorType.DeclinedByBackendError @@ -22,7 +23,7 @@ class RefundErrorMapperTest { private val refundParameters: RefundParams = mock() private val terminalException = mock().also { - whenever(it.errorCode).thenReturn(TerminalException.TerminalErrorCode.DECLINED_BY_READER) + whenever(it.errorCode).thenReturn(TerminalErrorCode.DECLINED_BY_READER) whenever(it.errorMessage).thenReturn("Dummy error message") } @@ -33,7 +34,7 @@ class RefundErrorMapperTest { @Test fun `when Terminal exception thrown, then refund params is used`() { - whenever(terminalException.errorCode).thenReturn(TerminalException.TerminalErrorCode.DECLINED_BY_STRIPE_API) + whenever(terminalException.errorCode).thenReturn(TerminalErrorCode.DECLINED_BY_STRIPE_API) val refundParams = RefundParams( chargeId = "", amount = BigDecimal.TEN, @@ -46,7 +47,7 @@ class RefundErrorMapperTest { @Test fun `when PAYMENT_DECLINED_BY_STRIPE_API Terminal exception thrown, then PAYMENT_DECLINED type returned`() { - whenever(terminalException.errorCode).thenReturn(TerminalException.TerminalErrorCode.DECLINED_BY_STRIPE_API) + whenever(terminalException.errorCode).thenReturn(TerminalErrorCode.DECLINED_BY_STRIPE_API) val result = mapper.mapTerminalError(refundParameters, terminalException) @@ -66,7 +67,7 @@ class RefundErrorMapperTest { @Test fun `when STRIPE_API_CONNECTION_ERROR Terminal exception thrown, then NO_NETWORK type returned`() { whenever(terminalException.errorCode).thenReturn( - TerminalException.TerminalErrorCode.STRIPE_API_CONNECTION_ERROR + TerminalErrorCode.STRIPE_API_CONNECTION_ERROR ) val result = mapper.mapTerminalError(refundParameters, terminalException) @@ -77,7 +78,7 @@ class RefundErrorMapperTest { @Test fun `when CANCELLED Terminal exception thrown, then CANCELLED type returned`() { whenever(terminalException.errorCode).thenReturn( - TerminalException.TerminalErrorCode.CANCELED + TerminalErrorCode.CANCELED ) val result = mapper.mapTerminalError(refundParameters, terminalException) @@ -87,7 +88,7 @@ class RefundErrorMapperTest { @Test fun `when PAYMENT_DECLINED Terminal exception throw with null code, then unknown type returned`() { - whenever(terminalException.errorCode).thenReturn(TerminalException.TerminalErrorCode.DECLINED_BY_STRIPE_API) + whenever(terminalException.errorCode).thenReturn(TerminalErrorCode.DECLINED_BY_STRIPE_API) whenever(terminalException.apiError).thenReturn(mock()) val result = mapper.mapTerminalError(refundParameters, terminalException) @@ -517,7 +518,7 @@ class RefundErrorMapperTest { } private fun setupStripeApiCardDeclined(declineCode: String?) { - whenever(terminalException.errorCode).thenReturn(TerminalException.TerminalErrorCode.DECLINED_BY_STRIPE_API) + whenever(terminalException.errorCode).thenReturn(TerminalErrorCode.DECLINED_BY_STRIPE_API) whenever(terminalException.apiError).thenReturn(mock()) whenever(terminalException.apiError?.declineCode).thenReturn(declineCode) } diff --git a/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/payments/actions/ProcessPaymentActionTest.kt b/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/payments/actions/ProcessPaymentActionTest.kt index 744dc7c2934..df91895467f 100644 --- a/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/payments/actions/ProcessPaymentActionTest.kt +++ b/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/payments/actions/ProcessPaymentActionTest.kt @@ -1,5 +1,6 @@ package com.woocommerce.android.cardreader.internal.payments.actions +import com.stripe.stripeterminal.external.callable.Cancelable import com.stripe.stripeterminal.external.callable.PaymentIntentCallback import com.stripe.stripeterminal.external.models.PaymentIntent import com.woocommerce.android.cardreader.internal.CardReaderBaseUnitTest @@ -29,6 +30,7 @@ internal class ProcessPaymentActionTest : CardReaderBaseUnitTest() { fun `when processing payment succeeds, then Success is emitted`() = testBlocking { whenever(terminal.processPayment(any(), any())).thenAnswer { (it.arguments[1] as PaymentIntentCallback).onSuccess(mock()) + mock() } val result = action.processPayment(mock()).first() @@ -40,6 +42,7 @@ internal class ProcessPaymentActionTest : CardReaderBaseUnitTest() { fun `when processing payment fails, then Failure is emitted`() = testBlocking { whenever(terminal.processPayment(any(), any())).thenAnswer { (it.arguments[1] as PaymentIntentCallback).onFailure(mock()) + mock() } val result = action.processPayment(mock()).first() @@ -52,6 +55,7 @@ internal class ProcessPaymentActionTest : CardReaderBaseUnitTest() { val updatedPaymentIntent = mock() whenever(terminal.processPayment(any(), any())).thenAnswer { (it.arguments[1] as PaymentIntentCallback).onSuccess(updatedPaymentIntent) + mock() } val result = action.processPayment(mock()).first() @@ -63,6 +67,7 @@ internal class ProcessPaymentActionTest : CardReaderBaseUnitTest() { fun `when processing payment succeeds, then flow is terminated`() = testBlocking { whenever(terminal.processPayment(any(), any())).thenAnswer { (it.arguments[1] as PaymentIntentCallback).onSuccess(mock()) + mock() } val result = action.processPayment(mock()).toList() @@ -74,6 +79,7 @@ internal class ProcessPaymentActionTest : CardReaderBaseUnitTest() { fun `when processing payment fails, then flow is terminated`() = testBlocking { whenever(terminal.processPayment(any(), any())).thenAnswer { (it.arguments[1] as PaymentIntentCallback).onFailure(mock()) + mock() } val result = action.processPayment(mock()).toList() From abe45c83ed28becb35f6ed78b3137285677fbe16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Thu, 24 Apr 2025 17:16:07 +0200 Subject: [PATCH 09/15] Run detekt --- .../android/cardreader/internal/connection/ConnectionManager.kt | 1 - .../internal/connection/TapToPayReaderListenerImpl.kt | 2 +- .../cardreader/internal/connection/TerminalListenerImpl.kt | 1 - .../android/cardreader/internal/connection/UpdateErrorMapper.kt | 1 - .../android/cardreader/internal/payments/PaymentErrorMapper.kt | 2 +- .../cardreader/internal/connection/UpdateErrorMapperTest.kt | 1 - .../cardreader/internal/payments/PaymentErrorMapperTest.kt | 2 +- 7 files changed, 3 insertions(+), 7 deletions(-) diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/ConnectionManager.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/ConnectionManager.kt index 17031b914e6..cd117134c2b 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/ConnectionManager.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/ConnectionManager.kt @@ -6,7 +6,6 @@ import android.content.pm.PackageManager import android.os.Build import com.stripe.stripeterminal.external.callable.Callback import com.stripe.stripeterminal.external.callable.ReaderCallback -import com.stripe.stripeterminal.external.callable.TapToPayReaderListener import com.stripe.stripeterminal.external.models.ConnectionConfiguration.BluetoothConnectionConfiguration import com.stripe.stripeterminal.external.models.ConnectionConfiguration.TapToPayConnectionConfiguration import com.stripe.stripeterminal.external.models.DeviceType diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/TapToPayReaderListenerImpl.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/TapToPayReaderListenerImpl.kt index 50210e8866d..103454b5f94 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/TapToPayReaderListenerImpl.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/TapToPayReaderListenerImpl.kt @@ -1,9 +1,9 @@ package com.woocommerce.android.cardreader.internal.connection +import com.stripe.stripeterminal.external.callable.Cancelable import com.stripe.stripeterminal.external.callable.TapToPayReaderListener import com.stripe.stripeterminal.external.models.DisconnectReason import com.stripe.stripeterminal.external.models.Reader -import com.stripe.stripeterminal.external.callable.Cancelable import com.woocommerce.android.cardreader.LogWrapper import com.woocommerce.android.cardreader.internal.LOG_TAG diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/TerminalListenerImpl.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/TerminalListenerImpl.kt index 6744bd432c2..57139c8ad1b 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/TerminalListenerImpl.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/TerminalListenerImpl.kt @@ -3,7 +3,6 @@ package com.woocommerce.android.cardreader.internal.connection import com.stripe.stripeterminal.external.callable.TerminalListener import com.stripe.stripeterminal.external.models.ConnectionStatus import com.stripe.stripeterminal.external.models.PaymentStatus -import com.stripe.stripeterminal.external.models.Reader import com.woocommerce.android.cardreader.LogWrapper import com.woocommerce.android.cardreader.connection.CardReaderStatus import com.woocommerce.android.cardreader.internal.LOG_TAG diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/UpdateErrorMapper.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/UpdateErrorMapper.kt index ab62fee8c25..0ba4b76b825 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/UpdateErrorMapper.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/UpdateErrorMapper.kt @@ -1,7 +1,6 @@ package com.woocommerce.android.cardreader.internal.connection import com.stripe.stripeterminal.external.models.TerminalErrorCode -import com.stripe.stripeterminal.external.models.TerminalException import com.woocommerce.android.cardreader.connection.event.SoftwareUpdateStatusErrorType internal class UpdateErrorMapper(private val batteryLevelProvider: () -> Float?) { diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/payments/PaymentErrorMapper.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/payments/PaymentErrorMapper.kt index ac79baaf105..4b6bd13590f 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/payments/PaymentErrorMapper.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/payments/PaymentErrorMapper.kt @@ -1,8 +1,8 @@ package com.woocommerce.android.cardreader.internal.payments import com.stripe.stripeterminal.external.models.PaymentIntent -import com.stripe.stripeterminal.external.models.TerminalException import com.stripe.stripeterminal.external.models.TerminalErrorCode +import com.stripe.stripeterminal.external.models.TerminalException import com.woocommerce.android.cardreader.CardReaderStore.CapturePaymentResponse import com.woocommerce.android.cardreader.CardReaderStore.CapturePaymentResponse.Error.NetworkError import com.woocommerce.android.cardreader.CardReaderStore.CapturePaymentResponse.Error.ServerError diff --git a/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/UpdateErrorMapperTest.kt b/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/UpdateErrorMapperTest.kt index 309ade88f85..83c66ce2d51 100644 --- a/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/UpdateErrorMapperTest.kt +++ b/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/connection/UpdateErrorMapperTest.kt @@ -1,7 +1,6 @@ package com.woocommerce.android.cardreader.internal.connection import com.stripe.stripeterminal.external.models.TerminalErrorCode -import com.stripe.stripeterminal.external.models.TerminalException import com.woocommerce.android.cardreader.connection.event.SoftwareUpdateStatusErrorType import org.junit.Assert.assertEquals import org.junit.Test diff --git a/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/payments/PaymentErrorMapperTest.kt b/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/payments/PaymentErrorMapperTest.kt index 9404e25d93a..37abdef2b3e 100644 --- a/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/payments/PaymentErrorMapperTest.kt +++ b/libs/cardreader/src/test/java/com/woocommerce/android/cardreader/internal/payments/PaymentErrorMapperTest.kt @@ -1,9 +1,9 @@ package com.woocommerce.android.cardreader.internal.payments import com.stripe.stripeterminal.external.models.PaymentIntent -import com.stripe.stripeterminal.external.models.TerminalException import com.stripe.stripeterminal.external.models.TerminalErrorCode import com.stripe.stripeterminal.external.models.TerminalErrorCode.DECLINED_BY_READER +import com.stripe.stripeterminal.external.models.TerminalException import com.woocommerce.android.cardreader.CardReaderStore.CapturePaymentResponse import com.woocommerce.android.cardreader.internal.CardReaderBaseUnitTest import com.woocommerce.android.cardreader.payments.CardPaymentStatus.CardPaymentStatusErrorType.BuiltInReader From 4701f39fc1324fffe87d5d042cdec850a2012e95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Fri, 25 Apr 2025 11:37:10 +0200 Subject: [PATCH 10/15] Fix missing tests --- .../cardreader/connect/CardReaderConnectViewModelTest.kt | 2 +- .../cardreader/detail/CardReaderDetailViewModelTest.kt | 4 ++-- .../statuschecker/CardReaderStatusCheckerViewModelTest.kt | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/cardreader/connect/CardReaderConnectViewModelTest.kt b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/cardreader/connect/CardReaderConnectViewModelTest.kt index f79fa04de66..62f03bc63c0 100644 --- a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/cardreader/connect/CardReaderConnectViewModelTest.kt +++ b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/cardreader/connect/CardReaderConnectViewModelTest.kt @@ -1534,7 +1534,7 @@ class CardReaderConnectViewModelTest : BaseUnitTest() { verify(cardReaderManager).discoverReaders(anyBoolean(), captor.capture()) assertThat(captor.firstValue).isEqualTo( CardReaderTypesToDiscover.SpecificReaders.BuiltInReaders( - listOf(ReaderType.BuildInReader.CotsDevice) + listOf(ReaderType.BuildInReader.TapToPayDevice) ) ) } diff --git a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/cardreader/detail/CardReaderDetailViewModelTest.kt b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/cardreader/detail/CardReaderDetailViewModelTest.kt index ad60c32081e..ae04d3e00d0 100644 --- a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/cardreader/detail/CardReaderDetailViewModelTest.kt +++ b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/cardreader/detail/CardReaderDetailViewModelTest.kt @@ -107,7 +107,7 @@ class CardReaderDetailViewModelTest : BaseUnitTest() { testBlocking { // GIVEN initConnectedState( - readerType = ReaderType.BuildInReader.CotsDevice + readerType = ReaderType.BuildInReader.TapToPayDevice ) // WHEN @@ -123,7 +123,7 @@ class CardReaderDetailViewModelTest : BaseUnitTest() { testBlocking { // GIVEN initConnectedState( - readerType = ReaderType.BuildInReader.CotsDevice + readerType = ReaderType.BuildInReader.TapToPayDevice ) // WHEN diff --git a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/cardreader/statuschecker/CardReaderStatusCheckerViewModelTest.kt b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/cardreader/statuschecker/CardReaderStatusCheckerViewModelTest.kt index 722934d20f2..a688f0caf08 100644 --- a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/cardreader/statuschecker/CardReaderStatusCheckerViewModelTest.kt +++ b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/cardreader/statuschecker/CardReaderStatusCheckerViewModelTest.kt @@ -207,7 +207,7 @@ class CardReaderStatusCheckerViewModelTest : BaseUnitTest() { val orderId = 1L val param = CardReaderFlowParam.PaymentOrRefund.Payment(orderId = orderId, paymentType = ORDER) val connectedReader: CardReader = mock { - on { type }.thenReturn(ReaderType.BuildInReader.CotsDevice.name) + on { type }.thenReturn(ReaderType.BuildInReader.TapToPayDevice.name) } whenever(appPrefsWrapper.isCardReaderWelcomeDialogShown()).thenReturn(true) whenever(cardReaderManager.readerStatus).thenReturn( @@ -306,7 +306,7 @@ class CardReaderStatusCheckerViewModelTest : BaseUnitTest() { val orderId = 1L val param = CardReaderFlowParam.PaymentOrRefund.Payment(orderId = orderId, paymentType = ORDER) val connectedReader: CardReader = mock { - on { type }.thenReturn(ReaderType.BuildInReader.CotsDevice.name) + on { type }.thenReturn(ReaderType.BuildInReader.TapToPayDevice.name) } whenever(cardReaderManager.readerStatus).thenReturn( MutableStateFlow( From 677907e94b8c13ad377a23cd7062da0183029f15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Fri, 25 Apr 2025 12:35:12 +0200 Subject: [PATCH 11/15] Keep renaming cots to tap to pay to align with Stripe --- .../statuschecker/CardReaderStatusCheckerViewModelTest.kt | 2 +- .../woocommerce/android/cardreader/connection/CardReaderType.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/cardreader/statuschecker/CardReaderStatusCheckerViewModelTest.kt b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/cardreader/statuschecker/CardReaderStatusCheckerViewModelTest.kt index a688f0caf08..2df528dda14 100644 --- a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/cardreader/statuschecker/CardReaderStatusCheckerViewModelTest.kt +++ b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/cardreader/statuschecker/CardReaderStatusCheckerViewModelTest.kt @@ -300,7 +300,7 @@ class CardReaderStatusCheckerViewModelTest : BaseUnitTest() { } @Test - fun `given payment flow and connected COTS reader, when vm init, then navigates to payment with built in`() = + fun `given payment flow and connected Tap To Pay reader, when vm init, then navigates to payment with built in`() = testBlocking { // GIVEN val orderId = 1L diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/connection/CardReaderType.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/connection/CardReaderType.kt index 23be2ae724c..fe3ac8fd2b1 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/connection/CardReaderType.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/connection/CardReaderType.kt @@ -26,7 +26,7 @@ sealed class ReaderType(val name: String) { "VERIFONE_P400" -> ExternalReader.VerifoneP400 "WISEPAD_3" -> ExternalReader.WisePade3 "WISEPOS_E" -> ExternalReader.WisePadeE - "COTS_DEVICE" -> BuildInReader.TapToPayDevice + "TAP_TO_PAY_DEVICE" -> BuildInReader.TapToPayDevice else -> Unknown } From d6c714b382f9b857b3a772c90a06c0047fcf9c4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Fri, 25 Apr 2025 13:39:42 +0200 Subject: [PATCH 12/15] Adjust process handling with new naming --- .../src/main/kotlin/com/woocommerce/android/WooCommerce.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/WooCommerce.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/WooCommerce.kt index f7226a6e3aa..82dbb9f09f5 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/WooCommerce.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/WooCommerce.kt @@ -28,7 +28,7 @@ open class WooCommerce : Application(), HasAndroidInjector, Configuration.Provid // Stripe Tap to Pay library starts it's own process. That causes the crash: // > Caused by: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process - // > com.woocommerce.android:stripelocalmobile Make sure to call FirebaseApp.initializeApp(Context) first. + // > com.woocommerce.android:stripetaptopay Make sure to call FirebaseApp.initializeApp(Context) first. // In this case we don't want to initialize any Firebase (or any at all) features of the app in their process. if (getCurrentProcessName() == "${BuildConfig.APPLICATION_ID}:$TAP_TO_PAY_STRIPE_PROCESS_NAME_SUFFIX") return @@ -55,6 +55,6 @@ open class WooCommerce : Application(), HasAndroidInjector, Configuration.Provid override fun androidInjector(): AndroidInjector = androidInjector companion object { - private const val TAP_TO_PAY_STRIPE_PROCESS_NAME_SUFFIX = "stripelocalmobile" + private const val TAP_TO_PAY_STRIPE_PROCESS_NAME_SUFFIX = "stripetaptopay" } } From 94c0390d39a851668b5b55110187ac9794f8f590 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Fri, 25 Apr 2025 13:42:30 +0200 Subject: [PATCH 13/15] Adjust log to function naming --- .../internal/connection/BluetoothReaderListenerImpl.kt | 2 +- .../internal/connection/TapToPayReaderListenerImpl.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/BluetoothReaderListenerImpl.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/BluetoothReaderListenerImpl.kt index 9332ddd64b6..bb3aaf874fc 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/BluetoothReaderListenerImpl.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/BluetoothReaderListenerImpl.kt @@ -106,7 +106,7 @@ internal class BluetoothReaderListenerImpl( } override fun onDisconnect(reason: DisconnectReason) { - logWrapper.d(LOG_TAG, "onUnexpectedReaderDisconnect") + logWrapper.d(LOG_TAG, "onDisconnect") } fun resetConnectionState() { diff --git a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/TapToPayReaderListenerImpl.kt b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/TapToPayReaderListenerImpl.kt index 103454b5f94..b5d08f4d613 100644 --- a/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/TapToPayReaderListenerImpl.kt +++ b/libs/cardreader/src/main/java/com/woocommerce/android/cardreader/internal/connection/TapToPayReaderListenerImpl.kt @@ -11,7 +11,7 @@ class TapToPayReaderListenerImpl( private val logWrapper: LogWrapper ) : TapToPayReaderListener { override fun onDisconnect(reason: DisconnectReason) { - logWrapper.d(LOG_TAG, "onUnexpectedReaderDisconnect") + logWrapper.d(LOG_TAG, "onDisconnect") } override fun onReaderReconnectFailed(reader: Reader) { From d1039c42864fb42f756c12847accaac6fbab0bfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Fri, 25 Apr 2025 15:21:46 +0200 Subject: [PATCH 14/15] Fix tests --- .../payment/controller/CardReaderPaymentControllerTest.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/cardreader/payment/controller/CardReaderPaymentControllerTest.kt b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/cardreader/payment/controller/CardReaderPaymentControllerTest.kt index 47272676dff..cabdb93c95c 100644 --- a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/cardreader/payment/controller/CardReaderPaymentControllerTest.kt +++ b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/cardreader/payment/controller/CardReaderPaymentControllerTest.kt @@ -2394,7 +2394,7 @@ class CardReaderPaymentControllerTest : BaseUnitTest() { fun `given built in payment failed state and connected BI, when user presses back, then disconnect from reader invoked`() = testBlocking { val cardReader: CardReader = mock { - on { type }.thenReturn("COTS_DEVICE") + on { type }.thenReturn("TAP_TO_PAY_DEVICE") } whenever(cardReaderManager.readerStatus).thenReturn( MutableStateFlow(CardReaderStatus.Connected(cardReader)) @@ -3492,7 +3492,7 @@ class CardReaderPaymentControllerTest : BaseUnitTest() { testBlocking { setupControllerForInteracRefund() val cardReader: CardReader = mock { - on { type }.thenReturn("COTS_DEVICE") + on { type }.thenReturn("TAP_TO_PAY_DEVICE") } whenever(cardReaderManager.readerStatus).thenReturn( MutableStateFlow(CardReaderStatus.Connected(cardReader)) From 52fe95fcdca6367b986a0260a5a117210e943ea9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Fri, 25 Apr 2025 15:22:18 +0200 Subject: [PATCH 15/15] Rename also in Mock --- .../com/woocommerce/android/di/MockCardReaderManagerModule.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/di/MockCardReaderManagerModule.kt b/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/di/MockCardReaderManagerModule.kt index ae9a6b199af..3190295e9a4 100644 --- a/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/di/MockCardReaderManagerModule.kt +++ b/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/di/MockCardReaderManagerModule.kt @@ -42,7 +42,7 @@ class MockCardReaderManagerModule { override val id: String get() = "ADEE123" override val type: String - get() = "COTS_DEVICE" + get() = "TAP_TO_PAY_DEVICE" override val currentBatteryLevel: Float get() = 1f override val firmwareVersion: String