nimbbl-mobile-react-native-sdk 1.0.0-alpha.5
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/LICENSE +21 -0
- package/README.md +569 -0
- package/android/build.gradle +86 -0
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +6 -0
- package/android/gradle.properties +4 -0
- package/android/gradlew +185 -0
- package/android/gradlew.bat +89 -0
- package/android/settings.gradle +1 -0
- package/android/src/main/AndroidManifest.xml +19 -0
- package/android/src/main/java/com/nimbbl/reactnative/NimbblCheckoutActivity.kt +224 -0
- package/android/src/main/java/com/nimbbl/reactnative/NimbblReactNativeSDKModule.kt +428 -0
- package/android/src/main/java/com/nimbbl/reactnative/NimbblReactNativeSDKPackage.kt +16 -0
- package/android/src/main/java/com/nimbbl/reactnative/TestActivity.kt +28 -0
- package/index.tsx +8 -0
- package/ios/NimbblReactNativeSDK.m +20 -0
- package/ios/NimbblReactNativeSDK.podspec +38 -0
- package/ios/NimbblReactNativeSDK.swift +199 -0
- package/lib/NimbblSDK.d.ts +108 -0
- package/lib/NimbblSDK.d.ts.map +1 -0
- package/lib/NimbblSDK.js +256 -0
- package/lib/NimbblSDK.js.map +1 -0
- package/lib/__tests__/__mocks__/react-native.d.ts +26 -0
- package/lib/__tests__/__mocks__/react-native.d.ts.map +1 -0
- package/lib/__tests__/__mocks__/react-native.js +23 -0
- package/lib/__tests__/__mocks__/react-native.js.map +1 -0
- package/lib/__tests__/setup.d.ts +1 -0
- package/lib/__tests__/setup.d.ts.map +1 -0
- package/lib/__tests__/setup.js +4 -0
- package/lib/__tests__/setup.js.map +1 -0
- package/lib/constants.d.ts +35 -0
- package/lib/constants.d.ts.map +1 -0
- package/lib/constants.js +44 -0
- package/lib/constants.js.map +1 -0
- package/lib/index.d.ts +14 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +32 -0
- package/lib/index.js.map +1 -0
- package/lib/types.d.ts +100 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +8 -0
- package/lib/types.js.map +1 -0
- package/nimbbl-mobile-react-native-sdk.podspec +27 -0
- package/package.json +90 -0
package/android/gradlew
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
#!/usr/bin/env sh
|
|
2
|
+
|
|
3
|
+
#
|
|
4
|
+
# Copyright 2015 the original author or authors.
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
##############################################################################
|
|
20
|
+
##
|
|
21
|
+
## Gradle start up script for UN*X
|
|
22
|
+
##
|
|
23
|
+
##############################################################################
|
|
24
|
+
|
|
25
|
+
# Attempt to set APP_HOME
|
|
26
|
+
# Resolve links: $0 may be a link
|
|
27
|
+
PRG="$0"
|
|
28
|
+
# Need this for relative symlinks.
|
|
29
|
+
while [ -h "$PRG" ] ; do
|
|
30
|
+
ls=`ls -ld "$PRG"`
|
|
31
|
+
link=`expr "$ls" : '.*-> \(.*\)$'`
|
|
32
|
+
if expr "$link" : '/.*' > /dev/null; then
|
|
33
|
+
PRG="$link"
|
|
34
|
+
else
|
|
35
|
+
PRG=`dirname "$PRG"`"/$link"
|
|
36
|
+
fi
|
|
37
|
+
done
|
|
38
|
+
SAVED="`pwd`"
|
|
39
|
+
cd "`dirname \"$PRG\"`/" >/dev/null
|
|
40
|
+
APP_HOME="`pwd -P`"
|
|
41
|
+
cd "$SAVED" >/dev/null
|
|
42
|
+
|
|
43
|
+
APP_NAME="Gradle"
|
|
44
|
+
APP_BASE_NAME=`basename "$0"`
|
|
45
|
+
|
|
46
|
+
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
|
47
|
+
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
|
48
|
+
|
|
49
|
+
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
|
50
|
+
MAX_FD="maximum"
|
|
51
|
+
|
|
52
|
+
warn () {
|
|
53
|
+
echo "$*"
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
die () {
|
|
57
|
+
echo
|
|
58
|
+
echo "$*"
|
|
59
|
+
echo
|
|
60
|
+
exit 1
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
# OS specific support (must be 'true' or 'false').
|
|
64
|
+
cygwin=false
|
|
65
|
+
msys=false
|
|
66
|
+
darwin=false
|
|
67
|
+
nonstop=false
|
|
68
|
+
case "`uname`" in
|
|
69
|
+
CYGWIN* )
|
|
70
|
+
cygwin=true
|
|
71
|
+
;;
|
|
72
|
+
Darwin* )
|
|
73
|
+
darwin=true
|
|
74
|
+
;;
|
|
75
|
+
MINGW* )
|
|
76
|
+
msys=true
|
|
77
|
+
;;
|
|
78
|
+
NONSTOP* )
|
|
79
|
+
nonstop=true
|
|
80
|
+
;;
|
|
81
|
+
esac
|
|
82
|
+
|
|
83
|
+
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
# Determine the Java command to use to start the JVM.
|
|
87
|
+
if [ -n "$JAVA_HOME" ] ; then
|
|
88
|
+
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
|
89
|
+
# IBM's JDK on AIX uses strange locations for the executables
|
|
90
|
+
JAVACMD="$JAVA_HOME/jre/sh/java"
|
|
91
|
+
else
|
|
92
|
+
JAVACMD="$JAVA_HOME/bin/java"
|
|
93
|
+
fi
|
|
94
|
+
if [ ! -x "$JAVACMD" ] ; then
|
|
95
|
+
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
|
96
|
+
|
|
97
|
+
Please set the JAVA_HOME variable in your environment to match the
|
|
98
|
+
location of your Java installation."
|
|
99
|
+
fi
|
|
100
|
+
else
|
|
101
|
+
JAVACMD="java"
|
|
102
|
+
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
|
103
|
+
|
|
104
|
+
Please set the JAVA_HOME variable in your environment to match the
|
|
105
|
+
location of your Java installation."
|
|
106
|
+
fi
|
|
107
|
+
|
|
108
|
+
# Increase the maximum file descriptors if we can.
|
|
109
|
+
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
|
110
|
+
MAX_FD_LIMIT=`ulimit -H -n`
|
|
111
|
+
if [ $? -eq 0 ] ; then
|
|
112
|
+
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
|
113
|
+
MAX_FD="$MAX_FD_LIMIT"
|
|
114
|
+
fi
|
|
115
|
+
ulimit -n $MAX_FD
|
|
116
|
+
if [ $? -ne 0 ] ; then
|
|
117
|
+
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
|
118
|
+
fi
|
|
119
|
+
else
|
|
120
|
+
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
|
121
|
+
fi
|
|
122
|
+
fi
|
|
123
|
+
|
|
124
|
+
# For Darwin, add options to specify how the application appears in the dock
|
|
125
|
+
if $darwin; then
|
|
126
|
+
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
|
127
|
+
fi
|
|
128
|
+
|
|
129
|
+
# For Cygwin or MSYS, switch paths to Windows format before running java
|
|
130
|
+
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
|
131
|
+
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
|
132
|
+
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
|
133
|
+
|
|
134
|
+
JAVACMD=`cygpath --unix "$JAVACMD"`
|
|
135
|
+
|
|
136
|
+
# We build the pattern for arguments to be converted via cygpath
|
|
137
|
+
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
|
138
|
+
SEP=""
|
|
139
|
+
for dir in $ROOTDIRSRAW ; do
|
|
140
|
+
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
|
141
|
+
SEP="|"
|
|
142
|
+
done
|
|
143
|
+
OURCYGPATTERN="(^($ROOTDIRS))"
|
|
144
|
+
# Add a user-defined pattern to the cygpath arguments
|
|
145
|
+
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
|
146
|
+
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
|
147
|
+
fi
|
|
148
|
+
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
|
149
|
+
i=0
|
|
150
|
+
for arg in "$@" ; do
|
|
151
|
+
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
|
152
|
+
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
|
153
|
+
|
|
154
|
+
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
|
155
|
+
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
|
156
|
+
else
|
|
157
|
+
eval `echo args$i`="\"$arg\""
|
|
158
|
+
fi
|
|
159
|
+
i=`expr $i + 1`
|
|
160
|
+
done
|
|
161
|
+
case $i in
|
|
162
|
+
0) set -- ;;
|
|
163
|
+
1) set -- "$args0" ;;
|
|
164
|
+
2) set -- "$args0" "$args1" ;;
|
|
165
|
+
3) set -- "$args0" "$args1" "$args2" ;;
|
|
166
|
+
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
|
167
|
+
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
|
168
|
+
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
|
169
|
+
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
|
170
|
+
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
|
171
|
+
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
|
172
|
+
esac
|
|
173
|
+
fi
|
|
174
|
+
|
|
175
|
+
# Escape application args
|
|
176
|
+
save () {
|
|
177
|
+
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
|
178
|
+
echo " "
|
|
179
|
+
}
|
|
180
|
+
APP_ARGS=`save "$@"`
|
|
181
|
+
|
|
182
|
+
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
|
183
|
+
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
|
184
|
+
|
|
185
|
+
exec "$JAVACMD" "$@"
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
@rem
|
|
2
|
+
@rem Copyright 2015 the original author or authors.
|
|
3
|
+
@rem
|
|
4
|
+
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
@rem you may not use this file except in compliance with the License.
|
|
6
|
+
@rem You may obtain a copy of the License at
|
|
7
|
+
@rem
|
|
8
|
+
@rem https://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
@rem
|
|
10
|
+
@rem Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
@rem See the License for the specific language governing permissions and
|
|
14
|
+
@rem limitations under the License.
|
|
15
|
+
@rem
|
|
16
|
+
|
|
17
|
+
@if "%DEBUG%" == "" @echo off
|
|
18
|
+
@rem ##########################################################################
|
|
19
|
+
@rem
|
|
20
|
+
@rem Gradle startup script for Windows
|
|
21
|
+
@rem
|
|
22
|
+
@rem ##########################################################################
|
|
23
|
+
|
|
24
|
+
@rem Set local scope for the variables with windows NT shell
|
|
25
|
+
if "%OS%"=="Windows_NT" setlocal
|
|
26
|
+
|
|
27
|
+
set DIRNAME=%~dp0
|
|
28
|
+
if "%DIRNAME%" == "" set DIRNAME=.
|
|
29
|
+
set APP_BASE_NAME=%~n0
|
|
30
|
+
set APP_HOME=%DIRNAME%
|
|
31
|
+
|
|
32
|
+
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
|
33
|
+
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
|
34
|
+
|
|
35
|
+
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
|
36
|
+
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
|
37
|
+
|
|
38
|
+
@rem Find java.exe
|
|
39
|
+
if defined JAVA_HOME goto findJavaFromJavaHome
|
|
40
|
+
|
|
41
|
+
set JAVA_EXE=java.exe
|
|
42
|
+
%JAVA_EXE% -version >NUL 2>&1
|
|
43
|
+
if "%ERRORLEVEL%" == "0" goto execute
|
|
44
|
+
|
|
45
|
+
echo.
|
|
46
|
+
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
|
47
|
+
echo.
|
|
48
|
+
echo Please set the JAVA_HOME variable in your environment to match the
|
|
49
|
+
echo location of your Java installation.
|
|
50
|
+
|
|
51
|
+
goto fail
|
|
52
|
+
|
|
53
|
+
:findJavaFromJavaHome
|
|
54
|
+
set JAVA_HOME=%JAVA_HOME:"=%
|
|
55
|
+
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
|
56
|
+
|
|
57
|
+
if exist "%JAVA_EXE%" goto execute
|
|
58
|
+
|
|
59
|
+
echo.
|
|
60
|
+
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
|
61
|
+
echo.
|
|
62
|
+
echo Please set the JAVA_HOME variable in your environment to match the
|
|
63
|
+
echo location of your Java installation.
|
|
64
|
+
|
|
65
|
+
goto fail
|
|
66
|
+
|
|
67
|
+
:execute
|
|
68
|
+
@rem Setup the command line
|
|
69
|
+
|
|
70
|
+
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
@rem Execute Gradle
|
|
74
|
+
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
|
75
|
+
|
|
76
|
+
:end
|
|
77
|
+
@rem End local scope for the variables with windows NT shell
|
|
78
|
+
if "%ERRORLEVEL%"=="0" goto mainEnd
|
|
79
|
+
|
|
80
|
+
:fail
|
|
81
|
+
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
|
82
|
+
rem the _cmd.exe /c_ return code!
|
|
83
|
+
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
|
84
|
+
exit /b 1
|
|
85
|
+
|
|
86
|
+
:mainEnd
|
|
87
|
+
if "%OS%"=="Windows_NT" endlocal
|
|
88
|
+
|
|
89
|
+
:omega
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
rootProject.name = 'nimbbl-react-native-sdk'
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
|
3
|
+
|
|
4
|
+
<uses-permission android:name="android.permission.INTERNET" />
|
|
5
|
+
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
|
6
|
+
|
|
7
|
+
<application>
|
|
8
|
+
<!-- Module specific configurations can be added here -->
|
|
9
|
+
<activity
|
|
10
|
+
android:name=".NimbblCheckoutActivity"
|
|
11
|
+
android:exported="false"
|
|
12
|
+
android:theme="@android:style/Theme.DeviceDefault.Light.NoActionBar" />
|
|
13
|
+
<activity
|
|
14
|
+
android:name=".TestActivity"
|
|
15
|
+
android:exported="false"
|
|
16
|
+
android:theme="@android:style/Theme.DeviceDefault.Light.NoActionBar" />
|
|
17
|
+
</application>
|
|
18
|
+
|
|
19
|
+
</manifest>
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
package com.nimbbl.reactnative
|
|
2
|
+
|
|
3
|
+
import android.app.Activity
|
|
4
|
+
import android.content.Intent
|
|
5
|
+
import android.os.Bundle
|
|
6
|
+
import android.util.Log
|
|
7
|
+
import android.widget.TextView
|
|
8
|
+
import android.view.ViewGroup
|
|
9
|
+
import android.widget.LinearLayout
|
|
10
|
+
import android.graphics.Color
|
|
11
|
+
import tech.nimbbl.webviewsdk.core.NimbblCheckoutSDK
|
|
12
|
+
import tech.nimbbl.webviewsdk.models.NimbblCheckoutOptions
|
|
13
|
+
import tech.nimbbl.webviewsdk.models.interfaces.NimbblCheckoutPaymentListener
|
|
14
|
+
import com.facebook.react.bridge.Arguments
|
|
15
|
+
import com.facebook.react.modules.core.DeviceEventManagerModule
|
|
16
|
+
|
|
17
|
+
class NimbblCheckoutActivity : Activity(), NimbblCheckoutPaymentListener {
|
|
18
|
+
|
|
19
|
+
companion object {
|
|
20
|
+
private const val TAG = "NimbblCheckoutActivity"
|
|
21
|
+
const val EXTRA_ORDER_TOKEN = "order_token"
|
|
22
|
+
const val EXTRA_PAYMENT_MODE_CODE = "payment_mode_code"
|
|
23
|
+
const val EXTRA_BANK_CODE = "bank_code"
|
|
24
|
+
const val EXTRA_WALLET_CODE = "wallet_code"
|
|
25
|
+
const val EXTRA_PAYMENT_FLOW = "payment_flow"
|
|
26
|
+
|
|
27
|
+
fun startCheckout(
|
|
28
|
+
activity: Activity,
|
|
29
|
+
orderToken: String,
|
|
30
|
+
paymentModeCode: String = "",
|
|
31
|
+
bankCode: String = "",
|
|
32
|
+
walletCode: String = "",
|
|
33
|
+
paymentFlow: String = ""
|
|
34
|
+
) {
|
|
35
|
+
Log.d(TAG, "startCheckout method called with orderToken: $orderToken")
|
|
36
|
+
println("startCheckout method called with orderToken: $orderToken")
|
|
37
|
+
|
|
38
|
+
val intent = Intent(activity, NimbblCheckoutActivity::class.java).apply {
|
|
39
|
+
putExtra(EXTRA_ORDER_TOKEN, orderToken)
|
|
40
|
+
putExtra(EXTRA_PAYMENT_MODE_CODE, paymentModeCode)
|
|
41
|
+
putExtra(EXTRA_BANK_CODE, bankCode)
|
|
42
|
+
putExtra(EXTRA_WALLET_CODE, walletCode)
|
|
43
|
+
putExtra(EXTRA_PAYMENT_FLOW, paymentFlow)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
Log.d(TAG, "Intent created, starting activity...")
|
|
47
|
+
println("Intent created, starting activity...")
|
|
48
|
+
activity.startActivity(intent)
|
|
49
|
+
Log.d(TAG, "Activity startActivity() called")
|
|
50
|
+
println("Activity startActivity() called")
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
override fun onCreate(savedInstanceState: Bundle?) {
|
|
55
|
+
super.onCreate(savedInstanceState)
|
|
56
|
+
|
|
57
|
+
Log.d(TAG, "NimbblCheckoutActivity created")
|
|
58
|
+
println("NimbblCheckoutActivity onCreate called")
|
|
59
|
+
|
|
60
|
+
// Create a simple UI to show the activity is launching
|
|
61
|
+
val layout = LinearLayout(this).apply {
|
|
62
|
+
orientation = LinearLayout.VERTICAL
|
|
63
|
+
layoutParams = ViewGroup.LayoutParams(
|
|
64
|
+
ViewGroup.LayoutParams.MATCH_PARENT,
|
|
65
|
+
ViewGroup.LayoutParams.MATCH_PARENT
|
|
66
|
+
)
|
|
67
|
+
setBackgroundColor(Color.WHITE)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
val textView = TextView(this).apply {
|
|
71
|
+
text = "NimbblCheckoutActivity is loading...\nOrder Token: ${intent.getStringExtra(EXTRA_ORDER_TOKEN)}"
|
|
72
|
+
textSize = 16f
|
|
73
|
+
setTextColor(Color.BLACK)
|
|
74
|
+
setPadding(50, 100, 50, 50)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
layout.addView(textView)
|
|
78
|
+
setContentView(layout)
|
|
79
|
+
|
|
80
|
+
Log.d(TAG, "Simple UI set up")
|
|
81
|
+
println("Simple UI set up")
|
|
82
|
+
|
|
83
|
+
try {
|
|
84
|
+
// Get the checkout options from intent
|
|
85
|
+
val orderToken = intent.getStringExtra(EXTRA_ORDER_TOKEN)
|
|
86
|
+
val paymentModeCode = intent.getStringExtra(EXTRA_PAYMENT_MODE_CODE) ?: ""
|
|
87
|
+
val bankCode = intent.getStringExtra(EXTRA_BANK_CODE) ?: ""
|
|
88
|
+
val walletCode = intent.getStringExtra(EXTRA_WALLET_CODE) ?: ""
|
|
89
|
+
val paymentFlow = intent.getStringExtra(EXTRA_PAYMENT_FLOW) ?: ""
|
|
90
|
+
|
|
91
|
+
Log.d(TAG, "Received order token: $orderToken")
|
|
92
|
+
Log.d(TAG, "Received payment mode code: $paymentModeCode")
|
|
93
|
+
Log.d(TAG, "Received bank code: $bankCode")
|
|
94
|
+
Log.d(TAG, "Received wallet code: $walletCode")
|
|
95
|
+
Log.d(TAG, "Received payment flow: $paymentFlow")
|
|
96
|
+
|
|
97
|
+
if (orderToken.isNullOrEmpty()) {
|
|
98
|
+
Log.e(TAG, "Order token is required")
|
|
99
|
+
finish()
|
|
100
|
+
return
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
Log.d(TAG, "Starting checkout with order token: $orderToken")
|
|
104
|
+
println("Starting checkout with order token: $orderToken")
|
|
105
|
+
|
|
106
|
+
// Use direct method calls instead of reflection
|
|
107
|
+
Log.d(TAG, "Using direct Android SDK calls...")
|
|
108
|
+
println("Using direct Android SDK calls...")
|
|
109
|
+
|
|
110
|
+
try {
|
|
111
|
+
// Create checkout options first (matching native sample app pattern)
|
|
112
|
+
val checkoutOptions = NimbblCheckoutOptions.Builder()
|
|
113
|
+
.setOrderToken(orderToken)
|
|
114
|
+
.setPaymentModeCode(paymentModeCode)
|
|
115
|
+
.setBankCode(bankCode)
|
|
116
|
+
.setPaymentFlow(paymentFlow)
|
|
117
|
+
.setWalletCode(walletCode)
|
|
118
|
+
.build()
|
|
119
|
+
|
|
120
|
+
Log.d(TAG, "Checkout options created successfully")
|
|
121
|
+
println("Checkout options created successfully")
|
|
122
|
+
|
|
123
|
+
// Initialize SDK and call checkout (matching native sample app pattern)
|
|
124
|
+
Log.d(TAG, "About to init SDK and call checkout...")
|
|
125
|
+
println("About to init SDK and call checkout...")
|
|
126
|
+
|
|
127
|
+
NimbblCheckoutSDK.instance?.init(this)
|
|
128
|
+
NimbblCheckoutSDK.instance?.checkout(checkoutOptions)
|
|
129
|
+
|
|
130
|
+
Log.d(TAG, "NimbblCheckoutSDK init and checkout called successfully")
|
|
131
|
+
println("NimbblCheckoutSDK init and checkout called successfully")
|
|
132
|
+
|
|
133
|
+
Log.d(TAG, "Webview should appear now...")
|
|
134
|
+
println("Webview should appear now...")
|
|
135
|
+
|
|
136
|
+
} catch (e: Exception) {
|
|
137
|
+
Log.e(TAG, "Error calling Android SDK: ${e.message}", e)
|
|
138
|
+
println("Error calling Android SDK: ${e.message}")
|
|
139
|
+
e.printStackTrace()
|
|
140
|
+
finish()
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
} catch (e: Exception) {
|
|
144
|
+
Log.e(TAG, "Error in onCreate: ${e.message}", e)
|
|
145
|
+
println("Error in onCreate: ${e.message}")
|
|
146
|
+
e.printStackTrace()
|
|
147
|
+
finish()
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
override fun onPaymentSuccess(data: MutableMap<String, Any>) {
|
|
154
|
+
// Set result for the calling activity (NimbblReactNativeSDKModule)
|
|
155
|
+
val intent = Intent().apply {
|
|
156
|
+
putExtra("status", "success")
|
|
157
|
+
putExtra("order_id", data["order_id"]?.toString() ?: "")
|
|
158
|
+
putExtra("payment_id", data["payment_id"]?.toString() ?: "")
|
|
159
|
+
putExtra("response", data.toString())
|
|
160
|
+
}
|
|
161
|
+
setResult(Activity.RESULT_OK, intent)
|
|
162
|
+
|
|
163
|
+
finish()
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
override fun onPaymentFailed(data: String) {
|
|
167
|
+
// Set result for the calling activity (NimbblReactNativeSDKModule)
|
|
168
|
+
val intent = Intent().apply {
|
|
169
|
+
putExtra("status", "failed")
|
|
170
|
+
putExtra("response", data)
|
|
171
|
+
}
|
|
172
|
+
setResult(Activity.RESULT_CANCELED, intent)
|
|
173
|
+
|
|
174
|
+
finish()
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
override fun onBackPressed() {
|
|
178
|
+
Log.d(TAG, "Back pressed - blocked to prevent accidental cancellation")
|
|
179
|
+
println("Back pressed - blocked to prevent accidental cancellation")
|
|
180
|
+
|
|
181
|
+
// Block the back button completely
|
|
182
|
+
// The WebView should handle its own back navigation internally
|
|
183
|
+
// Only success and failure events should be sent to the sample app
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
override fun onPause() {
|
|
187
|
+
super.onPause()
|
|
188
|
+
Log.d(TAG, "onPause called - cleaning up resources")
|
|
189
|
+
println("onPause called - cleaning up resources")
|
|
190
|
+
|
|
191
|
+
// Clean up any resources that might be causing leaks
|
|
192
|
+
try {
|
|
193
|
+
// The NimbblCheckoutSDK should handle its own cleanup
|
|
194
|
+
// but we can add additional cleanup here if needed
|
|
195
|
+
} catch (e: Exception) {
|
|
196
|
+
Log.e(TAG, "Error during onPause cleanup", e)
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
override fun onDestroy() {
|
|
201
|
+
super.onDestroy()
|
|
202
|
+
Log.d(TAG, "onDestroy called - final cleanup")
|
|
203
|
+
println("onDestroy called - final cleanup")
|
|
204
|
+
|
|
205
|
+
// Final cleanup to prevent memory leaks
|
|
206
|
+
try {
|
|
207
|
+
// Call cleanup on NimbblCheckoutSDK to properly unregister broadcast receivers
|
|
208
|
+
NimbblCheckoutSDK.instance?.let { sdk ->
|
|
209
|
+
try {
|
|
210
|
+
// Try to call any cleanup method if available
|
|
211
|
+
val cleanupMethod = sdk.javaClass.getMethod("cleanup")
|
|
212
|
+
cleanupMethod.invoke(sdk)
|
|
213
|
+
Log.d(TAG, "NimbblCheckoutSDK cleanup called successfully")
|
|
214
|
+
} catch (e: NoSuchMethodException) {
|
|
215
|
+
Log.d(TAG, "NimbblCheckoutSDK cleanup method not found, skipping")
|
|
216
|
+
} catch (e: Exception) {
|
|
217
|
+
Log.e(TAG, "Error calling NimbblCheckoutSDK cleanup", e)
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
} catch (e: Exception) {
|
|
221
|
+
Log.e(TAG, "Error during onDestroy cleanup", e)
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|