diff --git a/android/build.gradle b/android/build.gradle index d7ea793..f9d6dc2 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,6 +1,8 @@ group 'com.razorpay.flutter_customui' version '1.0' +apply plugin: 'kotlin-android' + buildscript { repositories { mavenCentral() @@ -33,6 +35,23 @@ android { lintOptions { disable 'InvalidPackage' } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = '1.8' + } + + java { + sourceCompatibility JavaVersion.VERSION_1_8 + + toolchain { + languageVersion.set(JavaLanguageVersion.of(18)) + } + } + dependencies { /* implementation fileTree(include: ['*.jar'], dir: 'libs') implementation fileTree(dir: 'libs', include: ['*.aar']) @@ -56,6 +75,8 @@ android { implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'com.squareup.okhttp3:logging-interceptor:4.10.0' + + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.6.4' //TODO: Add Library folder path in implementation's dir // compileOnly fileTree(include: ['*.aar'], dir: '/Users/kausthubh.adhikari/Desktop/SDK-Libraries/androidlibs') } diff --git a/android/src/main/java/com/razorpay/flutter_customui/RazorpayDelegate.java b/android/src/main/java/com/razorpay/flutter_customui/RazorpayDelegate.java index f4ae9f9..47bb94e 100644 --- a/android/src/main/java/com/razorpay/flutter_customui/RazorpayDelegate.java +++ b/android/src/main/java/com/razorpay/flutter_customui/RazorpayDelegate.java @@ -31,6 +31,7 @@ import com.razorpay.ValidateVpaCallback; import com.razorpay.upi.AccountBalance; import com.razorpay.upi.BankAccount; +import com.razorpay.upi.TurboSessionDelegate; import com.razorpay.upi.UpiAccount; import com.razorpay.upi.Bank; import com.razorpay.upi.Card; @@ -52,11 +53,14 @@ import io.flutter.plugin.common.EventChannel; import io.flutter.plugin.common.MethodChannel.Result; import io.flutter.plugin.common.PluginRegistry.ActivityResultListener; +import kotlin.Unit; +import kotlin.jvm.functions.Function1; import static com.razorpay.flutter_customui.Constants.PAYMENT_DATA; import com.razorpay.UpiTurboPrefetchLinkAccountsResultListener; import com.razorpay.upi.AllAccounts; +import com.razorpay.upi.model.Session; public class RazorpayDelegate implements ActivityResultListener { private Activity activity; @@ -91,6 +95,18 @@ public class RazorpayDelegate implements ActivityResultListener { Gson gson; private Handler uiThreadHandler = new Handler(Looper.getMainLooper()); + // TurboSessionDelegate + private Function1 sessionCompletion = null; + TurboSessionDelegate turboSessionDelegate = new TurboSessionDelegate() { + @Override + public void fetchToken(@NonNull Function1 completion) { + sessionCompletion = completion; + HashMap reply = new HashMap<>(); + reply.put("responseEvent", "refreshSessionToken"); + onEventSuccess(reply); + } + }; + @RequiresApi(api = Build.VERSION_CODES.KITKAT) public RazorpayDelegate(Activity activity) { this.activity = activity; @@ -101,6 +117,7 @@ void init(String key, Result result) { this.key = key; this.pendingResult = result; razorpay = new Razorpay(activity, key); + razorpay.upiTurbo.initialize(this.turboSessionDelegate); } void submit(final JSONObject payload, Result result) { @@ -766,4 +783,10 @@ public void onError(@NonNull JSONObject jsonObject) { }); } + + public void updateToken(String token) { + if (sessionCompletion != null) { + sessionCompletion.invoke(new Session(token)); + } + } } diff --git a/android/src/main/java/com/razorpay/flutter_customui/RazorpayPlugin.java b/android/src/main/java/com/razorpay/flutter_customui/RazorpayPlugin.java index 278554d..3b06596 100644 --- a/android/src/main/java/com/razorpay/flutter_customui/RazorpayPlugin.java +++ b/android/src/main/java/com/razorpay/flutter_customui/RazorpayPlugin.java @@ -218,6 +218,10 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull final Result result) razorpayDelegate.setPrefetchUPIPinWithUI(bankAccountStr, result, eventSink); break; + case "refreshSessionToken": + String newToken = call.arguments().toString(); + razorpayDelegate.updateToken(newToken); + default: Log.d(TAG, "no method"); } diff --git a/lib/model/upi_account.dart b/lib/model/upi_account.dart index 23d1431..ff5cd3a 100644 --- a/lib/model/upi_account.dart +++ b/lib/model/upi_account.dart @@ -1,89 +1,87 @@ import 'bank_account.dart'; class UpiAccount { - String? accountNumber; - String? bankLogoUrl; - String? bankName; - String? bankPlaceholderUrl; - String? ifsc; - int? pinLength; - Vpa? vpa; - String? type; + String? accountNumber; + String? bankLogoUrl; + String? bankName; + String? bankId; + String? bankPlaceholderUrl; + String? ifsc; + int? pinLength; + Vpa? vpa; + String? type; - - UpiAccount({ - this.accountNumber, - this.bankLogoUrl, - this.bankName, - this.bankPlaceholderUrl, - this.ifsc, - this.pinLength, - this.vpa, - this.type - }); + UpiAccount( + {this.accountNumber, + this.bankLogoUrl, + this.bankName, + this.bankId, + this.bankPlaceholderUrl, + this.ifsc, + this.pinLength, + this.vpa, + this.type}); factory UpiAccount.fromJson(Map json) => UpiAccount( - accountNumber: json['account_number'], - bankLogoUrl: json['bank_logo_url'], - bankName: json['bank_name'], - bankPlaceholderUrl: json['bankPlaceholderUrl'], - ifsc: json['ifsc'], - pinLength: json['pinLength'], - vpa: Vpa.fromJson(json['vpa']), - type: json['type'] - ); + accountNumber: json['account_number'], + bankLogoUrl: json['bank_logo_url'], + bankName: json['bank_name'], + bankId: json['bank_id'], + bankPlaceholderUrl: json['bankPlaceholderUrl'], + ifsc: json['ifsc'], + pinLength: json['pinLength'], + vpa: Vpa.fromJson(json['vpa']), + type: json['type']); Map toJson() => { - 'account_number': accountNumber, - 'bank_logo_url': bankLogoUrl, - 'bank_name': bankName, - 'bankPlaceholderUrl': bankPlaceholderUrl, - 'ifsc': ifsc, - 'pinLength': pinLength, - 'vpa': vpa?.toJson(), - 'type': type - }; - + 'account_number': accountNumber, + 'bank_logo_url': bankLogoUrl, + 'bank_name': bankName, + 'bank_id': bankId, + 'bankPlaceholderUrl': bankPlaceholderUrl, + 'ifsc': ifsc, + 'pinLength': pinLength, + 'vpa': vpa?.toJson(), + 'type': type + }; } class Vpa { - String? address; - BankAccount? bankAccount; - String? handle; - bool? active; - bool? isDefault; - bool? validated; - String? username; + String? address; + BankAccount? bankAccount; + String? handle; + bool? active; + bool? isDefault; + bool? validated; + String? username; Vpa({ - this.address, - this.bankAccount, - this.handle, - this.active, - this.isDefault, - this.validated, - this.username, + this.address, + this.bankAccount, + this.handle, + this.active, + this.isDefault, + this.validated, + this.username, }); factory Vpa.fromJson(Map json) => Vpa( - address: json['address'], - bankAccount: BankAccount.fromJson(json['bank_account']), - handle: json['handle'], - active: json['active'], - isDefault: json['default'], - validated: json['validated'], - username: json['username'], - ); + address: json['address'], + bankAccount: BankAccount.fromJson(json['bank_account']), + handle: json['handle'], + active: json['active'], + isDefault: json['default'], + validated: json['validated'], + username: json['username'], + ); Map toJson() => { - 'address': address, - 'bank_account': bankAccount?.toJson(), - 'handle': handle, - 'active': active, - 'default': isDefault, - 'validated': validated, - 'username': username, - }; + 'address': address, + 'bank_account': bankAccount?.toJson(), + 'handle': handle, + 'active': active, + 'default': isDefault, + 'validated': validated, + 'username': username, + }; } - - diff --git a/lib/upi_turbo.dart b/lib/upi_turbo.dart index d2f142c..e5494ba 100644 --- a/lib/upi_turbo.dart +++ b/lib/upi_turbo.dart @@ -368,6 +368,7 @@ class UpiTurbo { accountNumber: upiAccount.accountNumber, bankLogoUrl: upiAccount.bankLogoUrl, bankName: upiAccount.bankName, + bankId: upiAccount.bankId, bankPlaceholderUrl: upiAccount.bankPlaceholderUrl, ifsc: upiAccount.ifsc, pinLength: upiAccount.pinLength,