Skip to content

Commit 156a38a

Browse files
committed
event handling #1
1 parent ffa7c25 commit 156a38a

File tree

8 files changed

+71
-19
lines changed

8 files changed

+71
-19
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.facebook.react.uimanager.events
2+
3+
import com.facebook.react.bridge.WritableMap
4+
5+
open class Event<T>(viewTag: Int) {
6+
7+
open fun getEventName(): String {
8+
TODO("Not yet implemented")
9+
}
10+
11+
open fun serializeEventData(): WritableMap {
12+
TODO("Not yet implemented")
13+
}
14+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.facebook.react.uimanager.events
2+
3+
interface EventDispatcher {
4+
fun dispatchEvent(event: Event<*>)
5+
}

stripe_android/android/src/main/kotlin/com/flutter/stripe/StripeAndroidPlugin.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ class StripeAndroidPlugin : FlutterPlugin, MethodCallHandler, ActivityAware {
2424
override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
2525
channel = MethodChannel(flutterPluginBinding.binaryMessenger, "flutter.stripe/payments")
2626
channel.setMethodCallHandler(this)
27-
flutterPluginBinding.platformViewRegistry.registerViewFactory("flutter.stripe/card_field", StripeSdkCardPlatformViewFactory())
27+
flutterPluginBinding
28+
.platformViewRegistry
29+
.registerViewFactory("flutter.stripe/card_field", StripeSdkCardPlatformViewFactory(channel))
2830
}
2931

3032
override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) {

stripe_android/android/src/main/kotlin/com/flutter/stripe/StripeSdkCardPlatformView.kt

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,38 @@ package com.flutter.stripe
22

33
import android.content.Context
44
import android.view.View
5+
import com.facebook.react.bridge.ReadableMap
6+
import com.facebook.react.uimanager.events.Event
7+
import com.facebook.react.uimanager.events.EventDispatcher
58
import com.reactnativestripesdk.StripeSdkCardView
9+
import io.flutter.plugin.common.MethodChannel
610
import io.flutter.plugin.platform.PlatformView
711

8-
class StripeSdkCardPlatformView(context: Context, id: Int, creationParams: Map<String?, Any?>?): PlatformView {
12+
class StripeSdkCardPlatformView(context: Context, private val channel: MethodChannel, id: Int, creationParams: Map<String?, Any?>?): PlatformView {
913

10-
private val cardView: StripeSdkCardView = StripeSdkCardView(context)
14+
private val cardView: StripeSdkCardView by lazy {
15+
val eventHandler = object: EventDispatcher {
16+
override fun dispatchEvent(event: Event<*>) {
17+
channel.invokeMethod(event.getEventName(), event.serializeEventData())
18+
}
19+
}
20+
StripeSdkCardView(context, eventHandler).apply {
21+
if (creationParams?.containsKey("cardStyle") == true) {
22+
setCardStyle(creationParams["cardStyle"] as ReadableMap)
23+
}
24+
if (creationParams?.containsKey("placeholder") == true) {
25+
setPlaceHolders(creationParams["placeholder"] as ReadableMap)
26+
}
27+
if (creationParams?.containsKey("postalCodeEnabled") == true) {
28+
setPostalCodeEnabled(creationParams["postalCodeEnabled"] as Boolean)
29+
}
30+
}
31+
}
1132

1233
override fun getView(): View = cardView
1334

1435
override fun dispose() {
36+
1537
}
1638

1739
}
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
package com.flutter.stripe
22

33
import android.content.Context
4-
import android.view.View
5-
import com.reactnativestripesdk.StripeSdkCardView
4+
import io.flutter.plugin.common.MethodChannel
65
import io.flutter.plugin.common.StandardMessageCodec
76
import io.flutter.plugin.platform.PlatformView
87
import io.flutter.plugin.platform.PlatformViewFactory
98

10-
class StripeSdkCardPlatformViewFactory: PlatformViewFactory(StandardMessageCodec.INSTANCE) {
9+
class StripeSdkCardPlatformViewFactory(private val channel: MethodChannel) : PlatformViewFactory(StandardMessageCodec.INSTANCE) {
10+
1111
override fun create(context: Context, viewId: Int, args: Any?): PlatformView {
12-
val creationParams = args as Map<String?, Any?>?
13-
return StripeSdkCardPlatformView(context, viewId, creationParams)
12+
val creationParams = args as? Map<String?, Any?>?
13+
return StripeSdkCardPlatformView(context, channel, viewId, creationParams)
1414
}
1515
}

stripe_android/android/src/main/kotlin/com/reactnativestripesdk/CardChangedEvent.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,19 @@ package com.reactnativestripesdk
22

33
import com.facebook.react.bridge.Arguments
44
import com.facebook.react.bridge.WritableMap
5+
import com.facebook.react.uimanager.events.Event
56

6-
internal class CardChangedEvent constructor(viewTag: Int, private val cardDetails: MutableMap<String, Any>, private val postalCodeEnabled: Boolean, private val complete: Boolean) {
7+
internal class CardChangedEvent constructor(viewTag: Int, private val cardDetails: MutableMap<String, Any>, private val postalCodeEnabled: Boolean, private val complete: Boolean): Event<CardChangedEvent>(viewTag) {
8+
9+
override fun getEventName(): String {
10+
return EVENT_NAME
11+
}
712

813
private fun getValOr(map: MutableMap<String, Any>, key: String, default: String? = null): String? {
914
return if ((map[key] as CharSequence).isNotEmpty()) map[key] as String? else default
1015
}
1116

12-
private fun serializeEventData(): WritableMap {
17+
override fun serializeEventData(): WritableMap {
1318
val eventData = Arguments.createMap()
1419
eventData.putString("number", cardDetails["number"].toString())
1520
val expMonth = getValOr(cardDetails, "expiryMonth", null)

stripe_android/android/src/main/kotlin/com/reactnativestripesdk/CardFocusEvent.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,15 @@
77
package com.reactnativestripesdk
88
import com.facebook.react.bridge.Arguments
99
import com.facebook.react.bridge.WritableMap
10+
import com.facebook.react.uimanager.events.Event
1011

11-
internal class CardFocusEvent constructor(viewTag: Int, private val focusField: String?) {
12+
internal class CardFocusEvent constructor(viewTag: Int, private val focusField: String?): Event<CardFocusEvent>(viewTag) {
1213

13-
private fun serializeEventData(): WritableMap {
14+
override fun getEventName(): String {
15+
return EVENT_NAME
16+
}
17+
18+
override fun serializeEventData(): WritableMap {
1419
val eventData = Arguments.createMap()
1520
eventData.putString("focusedField", focusField)
1621

stripe_android/android/src/main/kotlin/com/reactnativestripesdk/StripeSdkCardView.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,22 @@ import android.content.res.ColorStateList
55
import android.graphics.Color
66
import android.text.Editable
77
import android.text.TextWatcher
8-
import android.view.View
9-
import android.view.ViewGroup
108
import android.widget.FrameLayout
119
import com.facebook.react.bridge.ReadableMap
12-
import com.stripe.android.databinding.CardInputWidgetBinding
10+
import com.facebook.react.uimanager.events.EventDispatcher
1311
import com.google.android.material.shape.CornerFamily
1412
import com.google.android.material.shape.MaterialShapeDrawable
1513
import com.google.android.material.shape.ShapeAppearanceModel
14+
import com.stripe.android.databinding.CardInputWidgetBinding
1615
import com.stripe.android.view.CardInputListener
1716
import com.stripe.android.view.CardInputWidget
1817

19-
class StripeSdkCardView(context: Context) : FrameLayout(context) {
18+
class StripeSdkCardView(context: Context, private val mEventDispatcher: EventDispatcher) : FrameLayout(context) {
2019
private var mCardWidget: CardInputWidget
2120
private val cardDetails: MutableMap<String, Any> = mutableMapOf("number" to "", "cvc" to "", "expiryMonth" to "", "expiryYear" to "", "postalCode" to "")
2221

2322
init {
24-
mCardWidget = CardInputWidget(context);
23+
mCardWidget = CardInputWidget(context)
2524

2625
addView(mCardWidget)
2726
setListeners()
@@ -129,7 +128,7 @@ class StripeSdkCardView(context: Context) : FrameLayout(context) {
129128

130129
fun onCardChanged() {
131130
val complete = mCardWidget.cardParams != null
132-
//mEventDispatcher?.dispatchEvent(CardChangedEvent(id, cardDetails, mCardWidget.postalCodeEnabled, complete))
131+
mEventDispatcher?.dispatchEvent(CardChangedEvent(id, cardDetails, mCardWidget.postalCodeEnabled, complete))
133132
}
134133

135134
private fun setListeners() {
@@ -138,7 +137,7 @@ class StripeSdkCardView(context: Context) : FrameLayout(context) {
138137
override fun onExpirationComplete() {}
139138
override fun onCvcComplete() {}
140139
override fun onFocusChange(focusField: CardInputListener.FocusField) {
141-
//mEventDispatcher?.dispatchEvent( CardFocusEvent(id, focusField.name))
140+
mEventDispatcher?.dispatchEvent( CardFocusEvent(id, focusField.name))
142141
}
143142
})
144143

0 commit comments

Comments
 (0)