package com.reactnativetink.activity import android.os.Bundle import android.util.Log import androidx.appcompat.app.AppCompatActivity import com.reactnativetink.R import com.reactnativetink.models.TinkLinkError import com.reactnativetink.navigation.ConnectAccount import com.reactnativetink.utils.TAG import com.tink.link.core.base.Tink import com.tink.link.core.data.request.configuration.BaseDomain import com.tink.link.core.data.request.configuration.Configuration import com.tink.link.core.data.request.transactions.UpdateConsent import com.tink.link.core.data.response.error.TinkError import com.tink.link.core.data.response.success.transactions.TinkTransactionsSuccess import java.io.Serializable class ConnectAccountActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_connect_account) // Restore SDK state if possible savedInstanceState?.let { Tink.restoreState(it) } val clientId: String = intent.getStringExtra("ClientID").toString() val redirectUri: String = intent.getStringExtra("RedirectUri").toString() val authorizationCode: String = intent.getStringExtra("AuthorizationCode").toString() val market: String = intent.getStringExtra("Market").toString() val locale: String = intent.getStringExtra("Locale").toString() val isUpdateConsent = intent.getBooleanExtra("IsUpdateConsent", false) val credentialsId = intent.getStringExtra("CredentialsId").toString() val configuration = Configuration( clientId, redirectUri, baseDomain = BaseDomain.EU, ) if (isUpdateConsent) { val updateConsent = UpdateConsent(authorizationCode, credentialsId) ConnectAccount().updateConsent( this, configuration, updateConsent, { success: TinkTransactionsSuccess -> onTinkSuccess(success) }, { error: TinkError -> onTinkError(error) }, ) } else { ConnectAccount().showConnectBankAccount( this, authorizationCode, market, locale, configuration, { success: TinkTransactionsSuccess -> onTinkSuccess(success) }, { error: TinkError -> onTinkError(error) }, ) } } override fun onSaveInstanceState(outState: Bundle) { // Save SDK state to bundle Tink.saveState(outState) super.onSaveInstanceState(outState) } private fun onTinkSuccess(success: TinkTransactionsSuccess) { Log.d(TAG, "Success") intent.putExtra("credentialsId", success.credentialsId) setResult(RESULT_OK, intent) finish() } private fun onTinkError(error: TinkError) { Log.d(TAG, "error message = ${error.errorDescription}") intent.putExtra( "error", TinkLinkError( error.errorStatus, error.errorReason, error.trackingId, error.errorDescription, error.errorType, error.credentials, error.providerName, error.paymentRequestId, ) as Serializable, ) setResult(RESULT_CANCELED, intent) finish() } }