react-native-klarna-inapp-sdk 2.1.13 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +100 -270
- package/android/build.gradle +84 -106
- package/android/gradle.properties +7 -0
- package/android/src/main/AndroidManifest.xml +2 -1
- package/android/src/main/AndroidManifestNew.xml +4 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/KlarnaMobileSDKPackage.java +33 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/common/ArgumentsUtil.java +62 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/common/WebViewResizeObserver.java +100 -0
- package/android/src/main/java/com/klarna/{inapp/sdk → mobile/sdk/reactnative/payments}/KlarnaPaymentEvent.java +9 -19
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/payments/KlarnaPaymentViewManager.java +346 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/payments/PaymentViewWrapper.java +78 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/standalonewebview/KlarnaStandaloneWebViewEvent.java +67 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/standalonewebview/KlarnaStandaloneWebViewEventSender.java +139 -0
- package/android/src/main/java/com/klarna/mobile/sdk/reactnative/standalonewebview/KlarnaStandaloneWebViewManager.java +205 -0
- package/android/src/newarch/java/com/klarna/mobile/sdk/reactnative/spec/RNKlarnaPaymentViewSpec.java +32 -0
- package/android/src/newarch/java/com/klarna/mobile/sdk/reactnative/spec/RNKlarnaStandaloneWebViewSpec.java +33 -0
- package/android/src/oldarch/java/com/klarna/mobile/sdk/reactnative/spec/RNKlarnaPaymentViewSpec.java +25 -0
- package/android/src/oldarch/java/com/klarna/mobile/sdk/reactnative/spec/RNKlarnaStandaloneWebViewSpec.java +19 -0
- package/android/src/test/java/com/klarna/{inapp/sdk/KlarnaPaymentViewPackageTest.java → mobile/sdk/reactnative/KlarnaMobileSDKPackageTest.java} +9 -4
- package/android/src/test/java/com/klarna/{inapp/sdk → mobile/sdk/reactnative/payments}/KlarnaPaymentEventTest.java +17 -20
- package/android/src/test/java/com/klarna/{inapp/sdk → mobile/sdk/reactnative/payments}/KlarnaPaymentViewManagerTest.java +72 -29
- package/ios/{KlarnaInAppSDK.xcodeproj → RNKlarnaMobileSDK.xcodeproj}/project.pbxproj +147 -87
- package/ios/{KlarnaInAppSDK.xcodeproj/xcshareddata/xcschemes/KlarnaInAppSDK.xcscheme → RNKlarnaMobileSDK.xcodeproj/xcshareddata/xcschemes/RNKlarnaMobileSDK.xcscheme} +9 -9
- package/ios/{KlarnaInAppSDK.xcodeproj/xcshareddata/xcschemes/KlarnaInAppSDKTests.xcscheme → RNKlarnaMobileSDK.xcodeproj/xcshareddata/xcschemes/RNKlarnaMobileSDKTests.xcscheme} +3 -3
- package/ios/Sources/KlarnaPaymentViewManager.h +5 -0
- package/ios/Sources/{KlarnaPaymentView.m → KlarnaPaymentViewManager.mm} +10 -15
- package/ios/Sources/KlarnaStandaloneWebViewManager.h +5 -0
- package/ios/Sources/KlarnaStandaloneWebViewManager.mm +77 -0
- package/ios/Sources/view/newarch/KlarnaStandaloneWebViewWrapper.h +29 -0
- package/ios/Sources/view/newarch/KlarnaStandaloneWebViewWrapper.mm +265 -0
- package/ios/Sources/view/newarch/PaymentViewWrapper.h +33 -0
- package/ios/Sources/view/newarch/PaymentViewWrapper.mm +240 -0
- package/ios/Sources/view/oldarch/KlarnaStandaloneWebViewWrapper.h +42 -0
- package/ios/Sources/view/oldarch/KlarnaStandaloneWebViewWrapper.mm +195 -0
- package/ios/Sources/view/{PaymentViewWrapper.h → oldarch/PaymentViewWrapper.h} +9 -7
- package/ios/Sources/view/{PaymentViewWrapper.m → oldarch/PaymentViewWrapper.mm} +40 -27
- package/ios/Tests/PaymentViewWrapperTests.m +8 -10
- package/lib/commonjs/KlarnaPaymentView.js +192 -0
- package/lib/commonjs/KlarnaPaymentView.js.map +1 -0
- package/lib/commonjs/KlarnaStandaloneWebView.js +81 -0
- package/lib/commonjs/KlarnaStandaloneWebView.js.map +1 -0
- package/lib/commonjs/index.js +28 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/specs/KlarnaPaymentViewNativeComponent.js +16 -0
- package/lib/commonjs/specs/KlarnaPaymentViewNativeComponent.js.map +1 -0
- package/lib/commonjs/specs/KlarnaStandaloneWebViewNativeComponent.js +16 -0
- package/lib/commonjs/specs/KlarnaStandaloneWebViewNativeComponent.js.map +1 -0
- package/lib/module/KlarnaPaymentView.js +182 -0
- package/lib/module/KlarnaPaymentView.js.map +1 -0
- package/lib/module/KlarnaStandaloneWebView.js +71 -0
- package/lib/module/KlarnaStandaloneWebView.js.map +1 -0
- package/lib/module/index.js +3 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/specs/KlarnaPaymentViewNativeComponent.js +7 -0
- package/lib/module/specs/KlarnaPaymentViewNativeComponent.js.map +1 -0
- package/lib/module/specs/KlarnaStandaloneWebViewNativeComponent.js +7 -0
- package/lib/module/specs/KlarnaStandaloneWebViewNativeComponent.js.map +1 -0
- package/lib/typescript/KlarnaPaymentView.d.ts +51 -0
- package/lib/typescript/KlarnaPaymentView.d.ts.map +1 -0
- package/lib/typescript/KlarnaStandaloneWebView.d.ts +46 -0
- package/lib/typescript/KlarnaStandaloneWebView.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +3 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/specs/KlarnaPaymentViewNativeComponent.d.ts +49 -0
- package/lib/typescript/specs/KlarnaPaymentViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/specs/KlarnaStandaloneWebViewNativeComponent.d.ts +65 -0
- package/lib/typescript/specs/KlarnaStandaloneWebViewNativeComponent.d.ts.map +1 -0
- package/package.json +86 -14
- package/react-native-klarna-inapp-sdk.podspec +32 -13
- package/src/KlarnaPaymentView.tsx +323 -0
- package/src/KlarnaStandaloneWebView.tsx +217 -0
- package/src/index.tsx +2 -0
- package/src/specs/KlarnaPaymentViewNativeComponent.ts +99 -0
- package/src/specs/KlarnaStandaloneWebViewNativeComponent.ts +96 -0
- package/.gitattributes +0 -3
- package/.watchmanconfig +0 -1
- package/.yarnrc +0 -5
- package/CHANGELOG.md +0 -116
- package/android/README.md +0 -14
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +0 -6
- package/android/gradlew +0 -172
- package/android/gradlew.bat +0 -84
- package/android/src/main/java/com/klarna/inapp/sdk/HeightListener.java +0 -159
- package/android/src/main/java/com/klarna/inapp/sdk/KlarnaPaymentViewManager.java +0 -282
- package/android/src/main/java/com/klarna/inapp/sdk/KlarnaPaymentViewPackage.java +0 -25
- package/android/src/main/java/com/klarna/inapp/sdk/Mappable.java +0 -10
- package/android/src/main/java/com/klarna/inapp/sdk/MappableKlarnaPaymentsSDKError.java +0 -31
- package/android/src/main/java/com/klarna/inapp/sdk/PaymentViewWrapper.java +0 -131
- package/android/src/test/java/com/klarna/inapp/sdk/MappableKlarnaPaymentsSDKErrorTest.java +0 -45
- package/babel.config.js +0 -3
- package/integration-tests/build.gradle +0 -59
- package/integration-tests/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/integration-tests/gradle/wrapper/gradle-wrapper.properties +0 -6
- package/integration-tests/gradlew +0 -172
- package/integration-tests/gradlew.bat +0 -84
- package/integration-tests/settings.gradle +0 -2
- package/integration-tests/src/test/resources/junit-platform.properties +0 -4
- package/ios/KlarnaInAppSDK.xcworkspace/contents.xcworkspacedata +0 -10
- package/ios/KlarnaInAppSDK.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/ios/Podfile +0 -73
- package/ios/Sources/KlarnaPaymentView.h +0 -5
- package/scripts/bootstrap.js +0 -29
- package/src/index.js +0 -72
package/android/build.gradle
CHANGED
|
@@ -1,51 +1,100 @@
|
|
|
1
1
|
buildscript {
|
|
2
|
-
ext.
|
|
3
|
-
rootProject.ext.has(
|
|
2
|
+
ext.getExtOrFallback = { name, fallback ->
|
|
3
|
+
rootProject.ext.has(name) ? rootProject.ext.get(name) : fallback
|
|
4
4
|
}
|
|
5
|
+
|
|
6
|
+
ext.getExtOrDefault = { name ->
|
|
7
|
+
getExtOrFallback(name, project.properties["lib_" + name])
|
|
8
|
+
}
|
|
9
|
+
|
|
5
10
|
repositories {
|
|
6
11
|
google()
|
|
7
12
|
mavenCentral()
|
|
8
13
|
}
|
|
9
14
|
|
|
10
15
|
dependencies {
|
|
11
|
-
|
|
12
|
-
// https://github.com/facebook/react-native/blob/0.64-stable/template/android/build.gradle#L16
|
|
13
|
-
classpath("com.android.tools.build:gradle:${safeExtGet('gradlePluginVersion', '4.2.0')}")
|
|
16
|
+
classpath "com.android.tools.build:gradle:${getExtOrDefault('gradlePluginVersion')}"
|
|
14
17
|
}
|
|
15
18
|
}
|
|
16
19
|
|
|
20
|
+
def isNewArchitectureEnabled() {
|
|
21
|
+
return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true"
|
|
22
|
+
}
|
|
23
|
+
|
|
17
24
|
apply plugin: 'com.android.library'
|
|
18
|
-
apply plugin: '
|
|
25
|
+
apply plugin: 'kotlin-android'
|
|
26
|
+
|
|
27
|
+
def appProject = rootProject.allprojects.find { it.plugins.hasPlugin('com.android.application') }
|
|
28
|
+
|
|
29
|
+
if (isNewArchitectureEnabled()) {
|
|
30
|
+
apply plugin: "com.facebook.react"
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
def getExtOrDefault(name) {
|
|
34
|
+
return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties["lib_" + name]
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
def getExtOrIntegerDefault(name) {
|
|
38
|
+
return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["lib_" + name]).toInteger()
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
def supportsNamespace() {
|
|
42
|
+
def parsed = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')
|
|
43
|
+
def major = parsed[0].toInteger()
|
|
44
|
+
def minor = parsed[1].toInteger()
|
|
45
|
+
|
|
46
|
+
// Namespace support was added in 7.3.0
|
|
47
|
+
if (major == 7 && minor >= 3) {
|
|
48
|
+
return true
|
|
49
|
+
}
|
|
19
50
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
def DEFAULT_COMPILE_SDK_VERSION = 30
|
|
23
|
-
def DEFAULT_BUILD_TOOLS_VERSION = "30.0.2"
|
|
24
|
-
def DEFAULT_MIN_SDK_VERSION = 21
|
|
25
|
-
def DEFAULT_TARGET_SDK_VERSION = 30
|
|
51
|
+
return major >= 8
|
|
52
|
+
}
|
|
26
53
|
|
|
27
54
|
android {
|
|
28
|
-
|
|
29
|
-
|
|
55
|
+
if (supportsNamespace()) {
|
|
56
|
+
namespace "com.klarna.mobile.sdk.reactnative"
|
|
57
|
+
|
|
58
|
+
sourceSets {
|
|
59
|
+
main {
|
|
60
|
+
manifest.srcFile "src/main/AndroidManifestNew.xml"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
compileSdkVersion getExtOrIntegerDefault("compileSdkVersion")
|
|
30
65
|
|
|
31
66
|
defaultConfig {
|
|
32
|
-
minSdkVersion
|
|
33
|
-
targetSdkVersion
|
|
67
|
+
minSdkVersion getExtOrIntegerDefault("minSdkVersion")
|
|
68
|
+
targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
|
|
69
|
+
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
|
|
34
70
|
versionCode 1
|
|
35
71
|
versionName "1.0"
|
|
36
72
|
}
|
|
73
|
+
buildTypes {
|
|
74
|
+
release {
|
|
75
|
+
minifyEnabled false
|
|
76
|
+
}
|
|
77
|
+
}
|
|
37
78
|
lintOptions {
|
|
38
79
|
abortOnError false
|
|
80
|
+
disable "GradleCompatible"
|
|
81
|
+
}
|
|
82
|
+
compileOptions {
|
|
83
|
+
sourceCompatibility JavaVersion.VERSION_1_8
|
|
84
|
+
targetCompatibility JavaVersion.VERSION_1_8
|
|
85
|
+
}
|
|
86
|
+
sourceSets {
|
|
87
|
+
main {
|
|
88
|
+
if (isNewArchitectureEnabled()) {
|
|
89
|
+
java.srcDirs += ["src/newarch/java"]
|
|
90
|
+
} else {
|
|
91
|
+
java.srcDirs += ["src/oldarch/java"]
|
|
92
|
+
}
|
|
93
|
+
}
|
|
39
94
|
}
|
|
40
95
|
}
|
|
41
96
|
|
|
42
97
|
repositories {
|
|
43
|
-
maven {
|
|
44
|
-
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
|
|
45
|
-
// Matches recent template from React Native (0.59)
|
|
46
|
-
// https://github.com/facebook/react-native/blob/0.59-stable/template/android/build.gradle#L30
|
|
47
|
-
url "$projectDir/../node_modules/react-native/android"
|
|
48
|
-
}
|
|
49
98
|
mavenCentral()
|
|
50
99
|
google()
|
|
51
100
|
maven {
|
|
@@ -54,7 +103,11 @@ repositories {
|
|
|
54
103
|
}
|
|
55
104
|
|
|
56
105
|
dependencies {
|
|
57
|
-
|
|
106
|
+
// For < 0.71, this will be from the local maven repo
|
|
107
|
+
// For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin
|
|
108
|
+
//noinspection GradleDynamicVersion
|
|
109
|
+
implementation "com.facebook.react:react-native:${getExtOrFallback('reactnativeVersion', '+')}"
|
|
110
|
+
|
|
58
111
|
implementation 'com.klarna.mobile:sdk:2.6.8'
|
|
59
112
|
|
|
60
113
|
testImplementation "junit:junit:4.13"
|
|
@@ -69,87 +122,12 @@ dependencies {
|
|
|
69
122
|
testImplementation "org.powermock:powermock-classloading-xstream:2.0.7"
|
|
70
123
|
}
|
|
71
124
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
description packageJson.description
|
|
81
|
-
url packageJson.repository.baseUrl
|
|
82
|
-
|
|
83
|
-
licenses {
|
|
84
|
-
license {
|
|
85
|
-
name packageJson.license
|
|
86
|
-
url packageJson.repository.baseUrl + '/blob/master/' + packageJson.licenseFilename
|
|
87
|
-
distribution 'repo'
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
developers {
|
|
92
|
-
developer {
|
|
93
|
-
id packageJson.author.username
|
|
94
|
-
name packageJson.author.name
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
afterEvaluate { project ->
|
|
101
|
-
|
|
102
|
-
task androidJavadocs(type: Javadoc) {
|
|
103
|
-
source = android.sourceSets.main.java.srcDirs
|
|
104
|
-
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
|
|
105
|
-
android.libraryVariants.all { variant ->
|
|
106
|
-
if (variant.name == 'release') {
|
|
107
|
-
owner.classpath += variant.javaCompileProvider.get().classpath
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
|
|
113
|
-
archiveClassifier.set('javadoc')
|
|
114
|
-
from androidJavadocs.destinationDir
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
task androidSourcesJar(type: Jar) {
|
|
118
|
-
archiveClassifier = 'sources'
|
|
119
|
-
from android.sourceSets.main.java.srcDirs
|
|
120
|
-
include '**/*.java'
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
android.libraryVariants.all { variant ->
|
|
124
|
-
def name = variant.name.capitalize()
|
|
125
|
-
task "jar${name}"(type: Jar, dependsOn: variant.javaCompile) {
|
|
126
|
-
from variant.javaCompile.destinationDir
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
artifacts {
|
|
131
|
-
archives androidSourcesJar
|
|
132
|
-
archives androidJavadocsJar
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
publishing {
|
|
136
|
-
publications {
|
|
137
|
-
sdkDefaultRelease(MavenPublication) {
|
|
138
|
-
def packageJson = new groovy.json.JsonSlurper().parseText(file('../package.json').text)
|
|
139
|
-
groupId "com.klarna"
|
|
140
|
-
artifactId packageJson.name
|
|
141
|
-
version packageJson.version
|
|
142
|
-
description packageJson.description
|
|
143
|
-
|
|
144
|
-
artifact(androidSourcesJar)
|
|
145
|
-
artifact(androidJavadocsJar)
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
repositories {
|
|
150
|
-
maven {
|
|
151
|
-
url = uri("file://${projectDir}/../android/maven")
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
125
|
+
// removed from the docs but we can keep it
|
|
126
|
+
// https://reactnative.dev/docs/0.71/new-architecture-library-intro
|
|
127
|
+
if (isNewArchitectureEnabled()) {
|
|
128
|
+
react {
|
|
129
|
+
jsRootDir = file("../src/specs")
|
|
130
|
+
libraryName = "RNKlarnaMobileSDK"
|
|
131
|
+
codegenJavaPackageName = "com.klarna.mobile.sdk.reactnative"
|
|
132
|
+
}
|
|
155
133
|
}
|
|
@@ -15,3 +15,10 @@ org.gradle.jvmargs=-Xmx1536m
|
|
|
15
15
|
kotlin.code.style=official
|
|
16
16
|
android.useAndroidX=true
|
|
17
17
|
android.enableJetifier=true
|
|
18
|
+
|
|
19
|
+
lib_gradlePluginVersion=7.2.1
|
|
20
|
+
lib_kotlinVersion=1.7.0
|
|
21
|
+
lib_minSdkVersion=21
|
|
22
|
+
lib_targetSdkVersion=31
|
|
23
|
+
lib_compileSdkVersion=31
|
|
24
|
+
lib_ndkVersion=21.4.7075529
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
package com.klarna.mobile.sdk.reactnative;
|
|
2
|
+
|
|
3
|
+
import android.app.Application;
|
|
4
|
+
|
|
5
|
+
import androidx.annotation.NonNull;
|
|
6
|
+
|
|
7
|
+
import com.facebook.react.ReactPackage;
|
|
8
|
+
import com.facebook.react.bridge.NativeModule;
|
|
9
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
10
|
+
import com.facebook.react.uimanager.ViewManager;
|
|
11
|
+
import com.klarna.mobile.sdk.reactnative.payments.KlarnaPaymentViewManager;
|
|
12
|
+
import com.klarna.mobile.sdk.reactnative.standalonewebview.KlarnaStandaloneWebViewManager;
|
|
13
|
+
|
|
14
|
+
import java.util.Collections;
|
|
15
|
+
import java.util.List;
|
|
16
|
+
|
|
17
|
+
public class KlarnaMobileSDKPackage implements ReactPackage {
|
|
18
|
+
|
|
19
|
+
@NonNull
|
|
20
|
+
@Override
|
|
21
|
+
public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {
|
|
22
|
+
return Collections.emptyList();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@NonNull
|
|
26
|
+
@Override
|
|
27
|
+
public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {
|
|
28
|
+
return List.of(
|
|
29
|
+
new KlarnaPaymentViewManager(reactContext, (Application) reactContext.getApplicationContext()),
|
|
30
|
+
new KlarnaStandaloneWebViewManager(reactContext, (Application) reactContext.getApplicationContext())
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
package com.klarna.mobile.sdk.reactnative.common;
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Arguments;
|
|
4
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
5
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
6
|
+
import com.facebook.react.bridge.WritableArray;
|
|
7
|
+
import com.facebook.react.bridge.WritableMap;
|
|
8
|
+
|
|
9
|
+
import java.util.List;
|
|
10
|
+
import java.util.Map;
|
|
11
|
+
|
|
12
|
+
public class ArgumentsUtil {
|
|
13
|
+
|
|
14
|
+
public static WritableMap createMap(Map<String, Object> sourceMap) {
|
|
15
|
+
WritableMap map = Arguments.createMap();
|
|
16
|
+
for (Map.Entry<String, Object> entry : sourceMap.entrySet()) {
|
|
17
|
+
String key = entry.getKey();
|
|
18
|
+
Object value = entry.getValue();
|
|
19
|
+
if (value == null) {
|
|
20
|
+
map.putNull(key);
|
|
21
|
+
} else if (value instanceof Boolean) {
|
|
22
|
+
map.putBoolean(key, (Boolean) value);
|
|
23
|
+
} else if (value instanceof String) {
|
|
24
|
+
map.putString(key, (String) value);
|
|
25
|
+
} else if (value instanceof Integer) {
|
|
26
|
+
map.putInt(key, (Integer) value);
|
|
27
|
+
} else if (value instanceof Double) {
|
|
28
|
+
map.putDouble(key, (Double) value);
|
|
29
|
+
} else if (value instanceof ReadableArray) {
|
|
30
|
+
map.putArray(key, (ReadableArray) value);
|
|
31
|
+
} else if (value instanceof ReadableMap) {
|
|
32
|
+
map.putMap(key, (ReadableMap) value);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return map;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public static WritableArray createArray(List<?> sourceList) {
|
|
39
|
+
WritableArray array = Arguments.createArray();
|
|
40
|
+
if (sourceList != null && sourceList.size() > 0) {
|
|
41
|
+
for (int i = 0; i < sourceList.size(); i++) {
|
|
42
|
+
Object value = sourceList.get(i);
|
|
43
|
+
if (value == null) {
|
|
44
|
+
array.pushNull();
|
|
45
|
+
} else if (value instanceof Boolean) {
|
|
46
|
+
array.pushBoolean((Boolean) value);
|
|
47
|
+
} else if (value instanceof String) {
|
|
48
|
+
array.pushString((String) value);
|
|
49
|
+
} else if (value instanceof Integer) {
|
|
50
|
+
array.pushInt((Integer) value);
|
|
51
|
+
} else if (value instanceof Double) {
|
|
52
|
+
array.pushDouble((Double) value);
|
|
53
|
+
} else if (value instanceof ReadableArray) {
|
|
54
|
+
array.pushArray((ReadableArray) value);
|
|
55
|
+
} else if (value instanceof ReadableMap) {
|
|
56
|
+
array.pushMap((ReadableMap) value);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return array;
|
|
61
|
+
}
|
|
62
|
+
}
|
package/android/src/main/java/com/klarna/mobile/sdk/reactnative/common/WebViewResizeObserver.java
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
package com.klarna.mobile.sdk.reactnative.common;
|
|
2
|
+
|
|
3
|
+
import android.os.Build;
|
|
4
|
+
import android.webkit.JavascriptInterface;
|
|
5
|
+
import android.webkit.WebView;
|
|
6
|
+
|
|
7
|
+
import java.lang.ref.WeakReference;
|
|
8
|
+
|
|
9
|
+
public class WebViewResizeObserver {
|
|
10
|
+
/**
|
|
11
|
+
* The interface between the wrapper and listener class
|
|
12
|
+
* to send the updated height values
|
|
13
|
+
*/
|
|
14
|
+
public interface WebViewResizeObserverCallback {
|
|
15
|
+
void onResized(int value);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
private static final String JS_INTERFACE_NAME = "NativeResizeObserver";
|
|
19
|
+
private final WeakReference<WebViewResizeObserverCallback> callback;
|
|
20
|
+
|
|
21
|
+
public WebViewResizeObserver(WebViewResizeObserverCallback callback) {
|
|
22
|
+
this.callback = new WeakReference<>(callback);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public void addInterface(WebView webView) {
|
|
26
|
+
webView.addJavascriptInterface(this, JS_INTERFACE_NAME);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
public void injectListener(WebView webView) {
|
|
30
|
+
injectScript(webView, initScript());
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The javascript interface method that is called when there's a
|
|
35
|
+
* 'resize' event
|
|
36
|
+
*
|
|
37
|
+
* @param value The height value which is sent from the 'resize' listener
|
|
38
|
+
*/
|
|
39
|
+
@JavascriptInterface
|
|
40
|
+
public void onResized(int value) {
|
|
41
|
+
sendHeightValue(value);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Unwraps and null checks the callback object and sends
|
|
46
|
+
* the height value to wrapper through this callback
|
|
47
|
+
*
|
|
48
|
+
* @param value The updated height value to send to wrapper
|
|
49
|
+
*/
|
|
50
|
+
private void sendHeightValue(int value) {
|
|
51
|
+
WebViewResizeObserverCallback callbackInstance = callback.get();
|
|
52
|
+
if (callbackInstance != null) {
|
|
53
|
+
callbackInstance.onResized(value);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
private void injectScript(WebView webView, String script) {
|
|
58
|
+
String tryCatchScript = "try {\n" +
|
|
59
|
+
" " + script + "\n" +
|
|
60
|
+
"} catch (error) {\n" +
|
|
61
|
+
" console.error(\"inject failed\")\n" +
|
|
62
|
+
"}";
|
|
63
|
+
evaluateJSCompat(webView, tryCatchScript);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Evaluates a script inside a web view in a backward-compatible manner
|
|
68
|
+
*
|
|
69
|
+
* @param webView The web view to evaluate the script
|
|
70
|
+
* @param script The script to be evaluated
|
|
71
|
+
*/
|
|
72
|
+
private void evaluateJSCompat(WebView webView, String script) {
|
|
73
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
|
74
|
+
webView.evaluateJavascript(script, null);
|
|
75
|
+
} else {
|
|
76
|
+
webView.loadUrl("javascript:" + script);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
private String initScript() {
|
|
81
|
+
return "const container = document.querySelector('#payment-container');\n" +
|
|
82
|
+
"const resizeObserver = new ResizeObserver((entries) => {\n" +
|
|
83
|
+
" for (let entry of entries) {\n" +
|
|
84
|
+
" console.log('New dimensions found: ', entry);\n" +
|
|
85
|
+
" if (entry.contentRect) {\n" +
|
|
86
|
+
" const height = entry.contentRect.height;\n" +
|
|
87
|
+
" const listener = window.NativeResizeObserver;\n" +
|
|
88
|
+
" if (listener != null) {\n" +
|
|
89
|
+
" listener.onResized(height);\n" +
|
|
90
|
+
" }\n" +
|
|
91
|
+
" }\n" +
|
|
92
|
+
" }\n" +
|
|
93
|
+
" console.log('Container size changed');\n" +
|
|
94
|
+
"});\n" +
|
|
95
|
+
"if (container != null) {\n" +
|
|
96
|
+
" resizeObserver.observe(container);\n" +
|
|
97
|
+
"}\n" +
|
|
98
|
+
"console.log('Resize observer initialized');";
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package com.klarna.
|
|
1
|
+
package com.klarna.mobile.sdk.reactnative.payments;
|
|
2
2
|
|
|
3
3
|
import androidx.annotation.IdRes;
|
|
4
4
|
import androidx.annotation.NonNull;
|
|
@@ -7,14 +7,10 @@ import androidx.annotation.Nullable;
|
|
|
7
7
|
import com.facebook.react.bridge.Arguments;
|
|
8
8
|
import com.facebook.react.bridge.WritableMap;
|
|
9
9
|
import com.facebook.react.uimanager.events.Event;
|
|
10
|
-
import com.facebook.react.uimanager.events.RCTEventEmitter;
|
|
11
|
-
|
|
12
|
-
import java.util.HashMap;
|
|
13
|
-
import java.util.Map;
|
|
14
10
|
|
|
15
11
|
/**
|
|
16
12
|
* A `KlarnaPaymentEvent` builds the event that will be eventually sent via `on<event>`.
|
|
17
|
-
*
|
|
13
|
+
* <p>
|
|
18
14
|
* It consists of a flat JSON object with a single `name` parameter for the event name as well as
|
|
19
15
|
* other, optional parameters depending on the function that was called.
|
|
20
16
|
*/
|
|
@@ -27,14 +23,15 @@ public class KlarnaPaymentEvent extends Event<KlarnaPaymentEvent> {
|
|
|
27
23
|
public static final String EVENT_NAME_ON_REAUTHORIZE = "onReauthorized";
|
|
28
24
|
public static final String EVENT_NAME_ON_FINALIZE = "onFinalized";
|
|
29
25
|
public static final String EVENT_NAME_ON_ERROR = "onError";
|
|
26
|
+
public static final String EVENT_NAME_ON_RESIZED = "onResized";
|
|
30
27
|
|
|
31
28
|
@NonNull
|
|
32
29
|
private final String eventName;
|
|
33
30
|
|
|
34
31
|
@Nullable
|
|
35
|
-
private final
|
|
32
|
+
private final WritableMap additionalParams;
|
|
36
33
|
|
|
37
|
-
public KlarnaPaymentEvent(@IdRes int viewId, @NonNull String eventName, @Nullable
|
|
34
|
+
public KlarnaPaymentEvent(@IdRes int viewId, @NonNull String eventName, @Nullable WritableMap additionalParams) {
|
|
38
35
|
super(viewId);
|
|
39
36
|
this.eventName = eventName;
|
|
40
37
|
this.additionalParams = additionalParams;
|
|
@@ -45,19 +42,12 @@ public class KlarnaPaymentEvent extends Event<KlarnaPaymentEvent> {
|
|
|
45
42
|
return eventName;
|
|
46
43
|
}
|
|
47
44
|
|
|
48
|
-
|
|
49
|
-
* Composes and sends the event JSON object being sent up to JS.
|
|
50
|
-
* @param rctEventEmitter
|
|
51
|
-
*/
|
|
45
|
+
@Nullable
|
|
52
46
|
@Override
|
|
53
|
-
|
|
54
|
-
Map<String, Object> map = new HashMap<>();
|
|
55
|
-
|
|
47
|
+
protected WritableMap getEventData() {
|
|
56
48
|
if (additionalParams != null) {
|
|
57
|
-
|
|
49
|
+
return additionalParams;
|
|
58
50
|
}
|
|
59
|
-
|
|
60
|
-
WritableMap eventData = Arguments.makeNativeMap(map);
|
|
61
|
-
rctEventEmitter.receiveEvent(getViewTag(), getEventName(), eventData);
|
|
51
|
+
return Arguments.createMap();
|
|
62
52
|
}
|
|
63
53
|
}
|