MainActivity.kt 4.41 KB
Newer Older
Javokhir Savriev's avatar
Javokhir Savriev committed
1
2
3
4
5
6
package uz.myid.sdk.sample

import android.os.Bundle
import android.widget.EditText
import androidx.appcompat.app.AppCompatActivity
import uz.myid.android.sdk.capture.*
Javohir Savriy's avatar
2.1.6    
Javohir Savriy committed
7
import uz.myid.android.sdk.capture.model.*
Javokhir Savriev's avatar
Javokhir Savriev committed
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
import uz.myid.sdk.sample.databinding.ActivityMainBinding
import java.util.*

class MainActivity : AppCompatActivity(), MyIdResultListener {

    private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }

    private val myIdClient = MyIdClient()

    private var clientId = ""
    private var buildMode = MyIdBuildMode.PRODUCTION
    private var entryType = MyIdEntryType.AUTH
    private var residency = MyIdResidentType.RESIDENT
    private var locale = Locale("en")
    private var shape = MyIdCameraShape.CIRCLE

    private var code = ""

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)

        with(binding) {
            inputClientId.setText(clientId)

            radioGroupLang.setOnCheckedChangeListener { _, checkedId ->
                locale = when (checkedId) {
                    R.id.radioUz -> Locale("uz")
                    R.id.radioEn -> Locale("en")
                    else -> Locale("ru")
                }
            }
            radioGroupEntryType.setOnCheckedChangeListener { _, checkedId ->
                entryType = if (checkedId == R.id.radioFace) {
                    MyIdEntryType.FACE
                } else {
                    MyIdEntryType.AUTH
                }
            }
            radioGroupResidentType.setOnCheckedChangeListener { _, checkedId ->
                residency = when (checkedId) {
                    R.id.radioManual -> MyIdResidentType.USER_DEFINED
                    R.id.radioNonResident -> MyIdResidentType.NON_RESIDENT
                    else -> MyIdResidentType.RESIDENT
                }
            }
            radioGroupBuildMode.setOnCheckedChangeListener { _, checkedId ->
                buildMode = if (checkedId == R.id.radioProd) {
                    MyIdBuildMode.PRODUCTION
                } else {
                    MyIdBuildMode.DEBUG
                }

                inputClientId.setText(clientId)
            }
            radioGroupShape.setOnCheckedChangeListener { _, checkedId ->
                shape = if (checkedId == R.id.radioCircle) {
                    MyIdCameraShape.CIRCLE
                } else {
                    MyIdCameraShape.ELLIPSE
                }
            }

            buttonStart.setOnClickListener { startMyId() }
        }
    }

    override fun onSuccess(result: MyIdResult) {
        code = result.code.orEmpty()

        with(binding) {
            imageResult.setImageBitmap(result.bitmap)
            """
                Result code: ${result.code}
                Comparison value: ${result.comparison}
            """.trimIndent().also { textResult.text = it }
        }
    }

    override fun onError(e: MyIdException) {
        code = ""

        with(binding) {
            imageResult.setImageBitmap(null)
            """
                Result error: ${e.message}
                Result error code: ${e.code}
            """.trimIndent().also { textResult.text = it }
        }
    }

    override fun onUserExited() {
        code = ""

        with(binding) {
            imageResult.setImageBitmap(null)
            "User exited sdk".also { textResult.text = it }
        }
    }

    private fun startMyId() {
Javohir Savriy's avatar
2.1.6    
Javohir Savriy committed
109
        val organizationDetails = MyIdOrganizationDetails(
Javokhir Savriev's avatar
Javokhir Savriev committed
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
            phoneNumber = binding.inputPhoneNumber.value
        )

        val myIdConfig = MyIdConfig.builder(binding.inputClientId.value)
            .withPassportData(binding.inputPassportData.value)
            .withBirthDate(binding.inputDate.value)
            .withSdkHash(binding.inputSdkHash.value)
            .withExternalId(binding.inputExternalId.value)
            .withThreshold(binding.thresholdSlider.value)
            .withBuildMode(buildMode)
            .withEntryType(entryType)
            .withResidency(residency)
            .withLocale(locale)
            .withCameraShape(shape)
            .withOrganizationDetails(organizationDetails)
            .withPhoto(binding.checkboxWithPhoto.isChecked)
            .build()

        val intent = myIdClient.createIntent(this, myIdConfig)
        result.launch(intent)
    }

    private val result = takeUserResult(this)

    private inline val EditText.value: String get() = text.toString().trim()
}