-
Notifications
You must be signed in to change notification settings - Fork 11
/
MainLinkUiActivity.kt
132 lines (115 loc) · 4.83 KB
/
MainLinkUiActivity.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package com.tink.sample
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.tink.core.Tink
import com.tink.link.ui.CredentialsOperation
import com.tink.link.ui.LinkUser
import com.tink.link.ui.ProviderSelection
import com.tink.link.ui.TinkLinkError
import com.tink.link.ui.TinkLinkErrorInfo
import com.tink.link.ui.TinkLinkResult
import com.tink.link.ui.TinkLinkUiActivity
import com.tink.model.user.Scope
import com.tink.model.user.User
import com.tink.sample.configuration.Configuration
import com.tink.service.network.TinkConfiguration
import kotlinx.android.synthetic.main.activity_main_link_ui.*
private val MainLinkUiActivity.testTinkLinkConfig
get() = TinkConfiguration(
environment = Configuration.sampleEnvironment,
oAuthClientId = Configuration.sampleOAuthClientId,
redirectUri =
Uri.Builder()
.scheme(getString(R.string.redirect_uri_scheme))
.encodedAuthority(getString(R.string.redirect_uri_host))
.build()
)
class MainLinkUiActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main_link_ui)
Tink.init(testTinkLinkConfig, applicationContext)
linkUiButton.setOnClickListener {
val linkUser = createdUser()?.let { LinkUser.ExistingUser(it) }
?: authorizationCode()?.let { LinkUser.UnauthenticatedUser(it) }
?: LinkUser.TemporaryUser(market = "SE", locale = "sv_SE")
startActivityForResult(
TinkLinkUiActivity.createIntent(
context = this,
linkUser = linkUser,
scopes = listOf(Scope.AccountsRead),
styleResId = R.style.TinkLinkUiStyle,
credentialsOperation = CredentialsOperation.Create(ProviderSelection.ProviderList())
),
REQUEST_CODE
)
}
}
private fun createdUser(): User? {
// This can be replaced with a created user for testing permanent user scenarios, etc.
return null
}
private fun authorizationCode(): String? {
// This can be replaced with an authorization code from delegate for authenticating a permanent user.
return null
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_CODE) {
handleResultFromLinkUi(resultCode, data?.extras)
}
}
private fun handleResultFromLinkUi(resultCode: Int, data: Bundle?) {
when (resultCode) {
TinkLinkUiActivity.RESULT_SUCCESS -> {
when (
val result =
data?.getParcelable<TinkLinkResult>(TinkLinkUiActivity.RESULT_DATA)
) {
is TinkLinkResult.TemporaryUser -> {
Toast.makeText(
this,
"credentialsId: ${result.credentials.id}, authorizationCode: ${result.authorizationCode}",
Toast.LENGTH_LONG
).show()
}
is TinkLinkResult.PermanentUser -> {
Toast.makeText(
this,
"credentialsId: ${result.credentials.id}",
Toast.LENGTH_LONG
).show()
}
else -> Toast.makeText(this, "Something went wrong", Toast.LENGTH_SHORT).show()
}
}
TinkLinkUiActivity.RESULT_FAILURE -> {
when (
val result =
data?.getParcelable<TinkLinkError>(TinkLinkUiActivity.ERROR_DATA)
) {
is TinkLinkError.FailedToAddCredentials -> {
for ((id, error) in result.errorsByCredentialsId) {
// Handling logic such as deleting the credentials matching the id
}
}
}
}
TinkLinkUiActivity.RESULT_CANCELLED -> { /* Handle cancellation */ }
}
data?.getBundle(TinkLinkUiActivity.FAILED_CREDENTIALS_DATA)
?.takeIf { !it.isEmpty }
?.let { bundle ->
for (credentialsId in bundle.keySet()) {
val error = bundle.getParcelable<TinkLinkErrorInfo>(credentialsId)
// Handling logic such as deleting the credentials matching the credentialsId
}
}
}
companion object {
const val REQUEST_CODE = 100
}
}