Skip to content

[WOOMOB-302][Mobile Payments] Update Stripe's SDK to 3.10.2 #13918

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ import com.woocommerce.android.util.CoroutineDispatchers
import com.woocommerce.android.util.WooLog
import com.woocommerce.android.viewmodel.MultiLiveEvent.Event
import com.woocommerce.android.viewmodel.MultiLiveEvent.Event.ExitWithResult
import com.woocommerce.android.viewmodel.ResourceProvider
import com.woocommerce.android.viewmodel.ScopedViewModel
import com.woocommerce.android.viewmodel.SingleLiveEvent
import com.woocommerce.android.viewmodel.navArgs
Expand All @@ -96,6 +97,7 @@ class CardReaderConnectViewModel @Inject constructor(
private val cardReaderTrackingInfoKeeper: CardReaderTrackingInfoKeeper,
private val cardReaderOnboardingChecker: CardReaderOnboardingChecker,
private val learnMoreUrlProvider: LearnMoreUrlProvider,
private val resourceProvider: ResourceProvider,
) : ScopedViewModel(savedState) {
private val arguments: CardReaderConnectDialogFragmentArgs by savedState.navArgs()
private val tracker: PaymentsFlowTracker = when (arguments.cardReaderFlowParam) {
Expand Down Expand Up @@ -254,6 +256,14 @@ class CardReaderConnectViewModel @Inject constructor(
BuildConfig.DEBUG,
)
}
cardReaderManager.setupTapToPayUx(
CardReaderManager.TapToPayUxConfig(
primaryColor = R.color.color_primary,
successColor = R.color.woo_green_50,
errorColor = R.color.color_error,
isDarkMode = resourceProvider.isDarkMode(),
)
)
launch {
startScanningIfNotStarted()
}
Expand Down Expand Up @@ -367,7 +377,9 @@ class CardReaderConnectViewModel @Inject constructor(
viewState.value = provideScanningState()
} else {
when (arguments.cardReaderType) {
BUILT_IN -> connectToReader(availableReaders[0])
BUILT_IN -> {
connectToReader(availableReaders[0])
}
EXTERNAL -> viewState.value = when (availableReaders.size) {
1 -> buildSingleExternalReaderFoundState(availableReaders[0])
else -> buildMultipleExternalReadersFoundState(availableReaders)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
package com.woocommerce.android.viewmodel

import android.content.Context
import android.content.res.Configuration
import androidx.annotation.ArrayRes
import androidx.annotation.ColorRes
import androidx.annotation.DimenRes
import androidx.annotation.RawRes
import androidx.annotation.StringRes
import androidx.core.content.ContextCompat
import com.woocommerce.android.util.StringUtils
import java.io.InputStream
import javax.inject.Inject

class ResourceProvider @Inject constructor(private val context: Context) {
Expand All @@ -33,11 +32,6 @@ class ResourceProvider @Inject constructor(private val context: Context) {
return resources.getDimensionPixelSize(dimen)
}

fun openRawResource(@RawRes rawId: Int): InputStream {
val resources = context.resources
return resources.openRawResource(rawId)
}

fun getQuantityString(
quantity: Int,
@StringRes default: Int,
Expand All @@ -51,12 +45,6 @@ class ResourceProvider @Inject constructor(private val context: Context) {
one,
)

@StringRes
fun getStringResFromStringName(stringName: String): Int? {
val stringRes = context.resources.getIdentifier(stringName, "string", context.packageName)
return when (stringRes) {
0 -> null // String not found for given key, return null so it can be handled from calling function
else -> stringRes
}
}
fun isDarkMode() = context.resources.configuration.uiMode and
Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES
}
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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 = '3.10.2'
terl-lazysodium-android = '5.0.2@aar'
tinder-statemachine = '0.2.0'
volley = "1.1.1"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.woocommerce.android.cardreader

import androidx.annotation.ColorRes
import com.woocommerce.android.cardreader.connection.CardReader
import com.woocommerce.android.cardreader.connection.CardReaderDiscoveryEvents
import com.woocommerce.android.cardreader.connection.CardReaderStatus
Expand Down Expand Up @@ -42,6 +43,8 @@ interface CardReaderManager {
cardReaderTypesToDiscover: CardReaderTypesToDiscover,
): Flow<CardReaderDiscoveryEvents>

fun setupTapToPayUx(config: TapToPayUxConfig)

fun startConnectionToReader(cardReader: CardReader, locationId: String)
suspend fun disconnectReader(): Boolean

Expand All @@ -65,4 +68,11 @@ interface CardReaderManager {
LOW_BATTERY_SUCCEED_CONNECT,
RANDOM
}

data class TapToPayUxConfig(
@ColorRes val primaryColor: Int,
@ColorRes val successColor: Int,
@ColorRes val errorColor: Int,
val isDarkMode: Boolean,
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,10 @@ internal class CardReaderManagerImpl(
return connectionManager.discoverReaders(isSimulated, cardReaderTypesToDiscover)
}

override fun setupTapToPayUx(config: CardReaderManager.TapToPayUxConfig) {
connectionManager.setupTapToPayUx(config)
}

override fun startConnectionToReader(cardReader: CardReader, locationId: String) {
if (!terminal.isInitialized()) error("Terminal not initialized")
connectionManager.startConnectionToReader(cardReader, locationId)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import com.stripe.stripeterminal.external.models.ConnectionConfiguration.LocalMo
import com.stripe.stripeterminal.external.models.DeviceType
import com.stripe.stripeterminal.external.models.Reader
import com.stripe.stripeterminal.external.models.TerminalException
import com.woocommerce.android.cardreader.CardReaderManager
import com.woocommerce.android.cardreader.connection.CardReader
import com.woocommerce.android.cardreader.connection.CardReaderDiscoveryEvents
import com.woocommerce.android.cardreader.connection.CardReaderImpl
Expand Down Expand Up @@ -192,6 +193,10 @@ internal class ConnectionManager(
startStateResettingJobIfNeeded(status)
}

fun setupTapToPayUx(config: CardReaderManager.TapToPayUxConfig) {
terminal.setupTapToPayUx(config)
}

private fun connectToExternalReader(
cardReader: CardReaderImpl,
locationId: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ import com.stripe.stripeterminal.external.callable.RefundCallback
import com.stripe.stripeterminal.external.callable.TerminalListener
import com.stripe.stripeterminal.external.models.ConnectionConfiguration
import com.stripe.stripeterminal.external.models.DiscoveryConfiguration
import com.stripe.stripeterminal.external.models.LocalMobileUxConfiguration
import com.stripe.stripeterminal.external.models.LocalMobileUxConfiguration.Color
import com.stripe.stripeterminal.external.models.PaymentIntent
import com.stripe.stripeterminal.external.models.PaymentIntentParameters
import com.stripe.stripeterminal.external.models.Reader
Expand Down Expand Up @@ -113,7 +115,35 @@ internal class TerminalWrapper {
CardReaderManager.SimulatorUpdateFrequency.LOW_BATTERY_SUCCEED_CONNECT -> {
SimulateReaderUpdate.LOW_BATTERY_SUCCEED_CONNECT
}

CardReaderManager.SimulatorUpdateFrequency.RANDOM -> SimulateReaderUpdate.RANDOM
}
}

fun setupTapToPayUx(config: CardReaderManager.TapToPayUxConfig) {
val uxConfig = LocalMobileUxConfiguration.Builder()
.tapZone(
LocalMobileUxConfiguration.TapZone.Manual.Builder()
.indicator(LocalMobileUxConfiguration.TapZoneIndicator.DEFAULT)
.position(LocalMobileUxConfiguration.TapZonePosition.Default)
.build()
)
.colors(
LocalMobileUxConfiguration.ColorScheme.Builder()
.primary(Color.Resource(config.primaryColor))
.success(Color.Resource(config.successColor))
.error(Color.Resource(config.errorColor))
.build()
)
.darkMode(
if (config.isDarkMode) {
LocalMobileUxConfiguration.DarkMode.DARK
} else {
LocalMobileUxConfiguration.DarkMode.LIGHT
}
)
.build()

Terminal.getInstance().setLocalMobileUxConfiguration(uxConfig)
}
}
Loading