Skip to content

Commit

Permalink
Merge pull request #320 from Adyen/v5_android_advanced
Browse files Browse the repository at this point in the history
V5 android advanced
  • Loading branch information
descorp authored Dec 7, 2023
2 parents 184c233 + 7d753b8 commit f581d32
Show file tree
Hide file tree
Showing 52 changed files with 1,044 additions and 1,227 deletions.
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,7 @@ android/app/libs
android/keystores/debug.keystore

# yarn
example/yarn.lock
example/yarn.lock

# NPM
example/package-lock.json
7 changes: 2 additions & 5 deletions android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ def safeExtGet(prop, fallback) {
}

buildscript {

rootProject.ext.adyenReactNativeRedirectScheme = "adyenreactnative"

repositories {
Expand All @@ -12,8 +11,7 @@ buildscript {
}

dependencies {
classpath 'com.android.tools.build:gradle:7.3.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.22"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}

Expand Down Expand Up @@ -58,8 +56,7 @@ repositories {
dependencies {
//noinspection GradleDynamicVersion
api "com.facebook.react:react-native:+" // From node_modules
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.7.22"
implementation "com.adyen.checkout:drop-in:4.13.3"
implementation "com.adyen.checkout:drop-in:5.0.1"
implementation 'com.google.android.material:material:1.7.0'
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0"

Expand Down
8 changes: 6 additions & 2 deletions android/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
<manifest
package="com.adyenreactnativesdk">
<manifest package="com.adyenreactnativesdk"
xmlns:android="http://schemas.android.com/apk/res/android">

<application>
<service android:name="com.adyenreactnativesdk.component.dropin.AdyenCheckoutService" android:exported="false" />
</application>
</manifest>
66 changes: 26 additions & 40 deletions android/src/main/java/com/adyenreactnativesdk/AdyenCheckout.kt
Original file line number Diff line number Diff line change
@@ -1,28 +1,33 @@
/*
* Copyright (c) 2023 Adyen N.V.
*
* This file is open source and available under the MIT license. See the LICENSE file for more info.
*/

package com.adyenreactnativesdk

import android.content.Context
import android.content.Intent
import androidx.activity.result.ActivityResultCaller
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContract
import com.adyen.checkout.components.base.IntentHandlingComponent
import com.adyen.checkout.action.core.internal.ActionHandlingComponent
import com.adyen.checkout.components.core.internal.ActivityResultHandlingComponent
import com.adyen.checkout.dropin.DropIn
import com.adyen.checkout.dropin.DropInCallback
import com.adyen.checkout.dropin.DropInResult
import com.adyenreactnativesdk.action.ActionHandler
import com.adyen.checkout.dropin.internal.ui.model.DropInResultContractParams
import com.adyenreactnativesdk.component.base.BaseModule
import com.adyenreactnativesdk.component.dropin.ReactDropInCallback
import com.adyenreactnativesdk.component.googlepay.AdyenGooglePayComponent
import com.adyenreactnativesdk.component.googlepay.GooglePayModule
import java.lang.ref.WeakReference

/**
* Umbrella class for setting DropIn and Component specific parameters
*/
object AdyenCheckout {
private const val TAG = "AdyenCheckout"
internal var dropInLauncher: ActivityResultLauncher<Intent>? = null
private var intentHandlingComponent: WeakReference<ActionHandlingComponent> = WeakReference(null)
private var activityResultHandlingComponent: WeakReference<ActivityResultHandlingComponent> = WeakReference(null)
private val dropInCallback = DropInCallbackListener()
private var intentHandlingComponent: WeakReference<IntentHandlingComponent> = WeakReference(null)
private var googleComponent: WeakReference<AdyenGooglePayComponent> = WeakReference(null)
internal var dropInLauncher: ActivityResultLauncher<DropInResultContractParams>? = null

@JvmStatic
internal fun addDropInListener(callback: ReactDropInCallback) {
Expand All @@ -40,20 +45,11 @@ object AdyenCheckout {
*/
@JvmStatic
fun setLauncherActivity(activity: ActivityResultCaller) {
dropInLauncher = activity.registerForActivityResult(
ReactDropInResultContract(),
dropInCallback::onDropInResult
dropInLauncher = DropIn.registerForDropInResult(
activity, dropInCallback
)
}

/**
* Release a reference to current Activity that presenting DropIn or Component
*/
@JvmStatic
fun removeLauncherActivity() {
dropInLauncher = null
}

/**
* Allow Adyen Components to process intents.
* @param intent received redirect intent
Expand All @@ -63,14 +59,14 @@ object AdyenCheckout {
fun handleIntent(intent: Intent): Boolean {
val data = intent.data
val handler = intentHandlingComponent.get()
return if (data != null && handler != null && data.toString().startsWith(ActionHandler.REDIRECT_RESULT_SCHEME)) {
return if (data != null && handler != null && data.toString().startsWith(BaseModule.REDIRECT_RESULT_SCHEME)) {
handler.handleIntent(intent)
true
} else false
}

@JvmStatic
internal fun setIntentHandler(component: IntentHandlingComponent) {
internal fun setIntentHandler(component: ActionHandlingComponent) {
intentHandlingComponent = WeakReference(component)
}

Expand All @@ -87,40 +83,30 @@ object AdyenCheckout {
*/
@JvmStatic
fun handleActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == AdyenGooglePayComponent.GOOGLEPAY_REQUEST_CODE) {
googleComponent.get()?.handleActivityResult(resultCode, data)
if (requestCode == GooglePayModule.GOOGLEPAY_REQUEST_CODE) {
activityResultHandlingComponent.get()?.handleActivityResult(resultCode, data)
}
}

@JvmStatic
internal fun setGooglePayComponent(component: AdyenGooglePayComponent) {
googleComponent = WeakReference(component)
internal fun setActivityResultHandlingComponent(component: ActivityResultHandlingComponent) {
activityResultHandlingComponent = WeakReference(component)
}

@JvmStatic
internal fun removeGooglePayComponent() {
googleComponent.clear()
}
}

private class ReactDropInResultContract : ActivityResultContract<Intent, DropInResult?>() {
override fun createIntent(context: Context, input: Intent): Intent {
return input
}

override fun parseResult(resultCode: Int, intent: Intent?): DropInResult? {
return DropIn.handleActivityResult(DropIn.DROP_IN_REQUEST_CODE, resultCode, intent)
internal fun removeActivityResultHandlingComponent() {
activityResultHandlingComponent.clear()
}
}

private class DropInCallbackListener : DropInCallback {

internal var callback: WeakReference<ReactDropInCallback> =
var callback: WeakReference<ReactDropInCallback> =
WeakReference(null)

override fun onDropInResult(dropInResult: DropInResult?) {
if (dropInResult == null ) return
val callback = callback.get()?.let {
callback.get()?.let {
when (dropInResult) {
is DropInResult.CancelledByUser -> it.onCancel()
is DropInResult.Error -> it.onError(dropInResult.reason)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
*
* This file is open source and available under the MIT license. See the LICENSE file for more info.
*/

package com.adyenreactnativesdk

import com.adyenreactnativesdk.component.applepay.AdyenApplePayMock
import com.adyenreactnativesdk.component.dropin.AdyenDropInComponent
import com.adyenreactnativesdk.component.googlepay.AdyenGooglePayComponent
import com.adyenreactnativesdk.component.instant.AdyenInstantComponent
import com.adyenreactnativesdk.component.applepay.ApplePayModuleMock
import com.adyenreactnativesdk.component.dropin.DropInModule
import com.adyenreactnativesdk.component.googlepay.GooglePayModule
import com.adyenreactnativesdk.component.instant.InstantModule
import com.adyenreactnativesdk.cse.AdyenCSEModule
import com.facebook.react.ReactPackage
import com.facebook.react.bridge.NativeModule
Expand All @@ -22,10 +23,10 @@ class AdyenPaymentPackage : ReactPackage {

override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
val modules: MutableList<NativeModule> = ArrayList()
modules.add(AdyenDropInComponent(reactContext))
modules.add(AdyenInstantComponent(reactContext))
modules.add(AdyenGooglePayComponent(reactContext))
modules.add(AdyenApplePayMock(reactContext))
modules.add(DropInModule(reactContext))
modules.add(InstantModule(reactContext))
modules.add(GooglePayModule(reactContext))
modules.add(ApplePayModuleMock(reactContext))
modules.add(AdyenCSEModule(reactContext))
return modules
}
Expand Down

This file was deleted.

Loading

0 comments on commit f581d32

Please sign in to comment.