package uz.myid.sdk.sample import android.os.Bundle import android.widget.EditText import androidx.appcompat.app.AppCompatActivity import uz.myid.android.sdk.capture.MyIdClient import uz.myid.android.sdk.capture.MyIdConfig import uz.myid.android.sdk.capture.MyIdException import uz.myid.android.sdk.capture.MyIdResult import uz.myid.android.sdk.capture.MyIdResultListener import uz.myid.android.sdk.capture.model.MyIdBuildMode import uz.myid.android.sdk.capture.model.MyIdCameraShape import uz.myid.android.sdk.capture.model.MyIdEntryType import uz.myid.android.sdk.capture.model.MyIdImageFormat import uz.myid.android.sdk.capture.model.MyIdOrganizationDetails import uz.myid.android.sdk.capture.model.MyIdResidentType import uz.myid.android.sdk.capture.model.MyIdResolution import uz.myid.android.sdk.capture.takeUserResult import uz.myid.sdk.sample.databinding.ActivityMainBinding import java.util.Locale class MainActivity : AppCompatActivity(), MyIdResultListener { private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) } private val client = MyIdClient() 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) { 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 } } 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() { val organizationDetails = MyIdOrganizationDetails( phoneNumber = binding.inputPhoneNumber.value ) val config = MyIdConfig.builder(binding.inputClientId.value) .withClientHash( clientHash = binding.inputClientHash.value, clientHashId = binding.inputClientHashId.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) .withResolution(MyIdResolution.RESOLUTION_480) .withImageFormat(MyIdImageFormat.PNG) .withPhoto(binding.checkboxWithPhoto.isChecked) .build() val intent = client.createIntent(this, config) result.launch(intent) } private val result = takeUserResult(this) private inline val EditText.value: String get() = text.toString().trim() }