...
Code Block | ||
---|---|---|
| ||
String action = intent.getAction(); if (Intent.ACTION_VIEW.equals(action) || Intent.ACTION_SEND.equals(action)) { ... } |
Launch the SDK as
...
If the Intent
passes the above check then register an activity result handler with the CaptureFlowImportContract()
and pass the Intent
to GiniBank.startCaptureFlowForIntent()
:
Code Block | ||
---|---|---|
| ||
fun configureCapture() {
GiniBank.setCaptureConfiguration(this,
CaptureConfiguration(
fileImportEnabled = true,
... // other configuration options
)
)
}
// Use the androidx's Activity Result API to register a handler for the capture result.
val captureImportLauncher = registerForActivityResult(CaptureFlowImportContract()) { result: CaptureResult ->
when (result) {
is CaptureResult.Success -> {
handleExtractions(result.specificExtractions)
}
is CaptureResult.Error -> {
when (result.value) {
is ResultError.Capture -> {
val captureError: GiniCaptureError = (result.value as ResultError.Capture).giniCaptureError
handleCaptureError(captureError)
}
is ResultError.FileImport -> {
val fileImportError = result.value as ResultError.FileImport
handleFileImportError(fileImportError)
}
}
}
CaptureResult.Empty -> {
handleNoExtractions()
}
CaptureResult.Cancel -> {
handleCancellation()
}
}
}
fun handleFileImportError(exception: ImportedFileValidationException) {
var message = ...
exception.validationError?.let { validationError ->
// Get the default message
message = getString(validationError.textResource)
// Or use custom messages
message = when (validationError) {
FileImportValidator.Error.TYPE_NOT_SUPPORTED -> ...
FileImportValidator.Error.SIZE_TOO_LARGE -> ...
FileImportValidator.Error.TOO_MANY_PDF_PAGES -> ...
FileImportValidator.Error.PASSWORD_PROTECTED_PDF -> ...
FileImportValidator.Error.TOO_MANY_DOCUMENT_PAGES -> ...
}
}
AlertDialog.Builder(this)
.setMessage(message)
.setPositiveButton("OK") { _, _ -> finish() }
.show()
}
fun startGiniBankSDKForImportedFile(importedFileIntent: Intent) {
// Configure capture first
configureCapture();
fileImportCancellationToken =
GiniBank.startCaptureFlowForIntent(captureImportLauncher, this, importedFileIntent)
} |
Launch the SDK from a different activity
When your activity (declaring the intent filter shown above) is not the same as the activity from which you launch the Gini Bank SDK you need to create a Document
from the intent first and then pass it to your other activity as an extra. There you can then launch the SDK with the Document
.
Note |
---|
Passing the launch intent from the first activity to the other activity causes |
Create a
Document
from the intent in your activity A:Code Block language kotlin fun createDocumentAndLaunchActivityB(importedFilesIntent: Intent) { // Configure capture first configureCapture(); fileImportCancellationToken = GiniBank.createDocumentForImportedFiles( intent = intent, context = this, callback = { documentCreationResult -> when (documentCreationResult) { GiniBank.CreateDocumentFromImportedFileResult.Cancelled -> showCancellationToast("'Open with' cancelled") is GiniBank.CreateDocumentFromImportedFileResult.Error -> showErrorToast("'Open with' failed with error ${documentCreationResult.error}") is GiniBank.CreateDocumentFromImportedFileResult.Success -> documentCreationResult.document?.let { document -> launchActivityB(document) } ?: run { showErrorToast("'Open with' failed") } } } ) }
Get the
Document
from the intent extras in your activity B and launch the Gini Bank SDK:Code Block language kotlin override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (savedInstanceState == null) { if (intent.hasExtra(EXTRA_IN_OPEN_WITH_DOCUMENT)) { IntentCompat.getParcelableExtra(intent, EXTRA_IN_OPEN_WITH_DOCUMENT, Document::class.java)?.let { GiniBank.startCaptureFlowForDocument( resultLauncher = captureImportLauncher, document = document ) } } } }
Launch the SDK as a fragment
If the Intent
passes the check for ACTION_VIEW and ACTION_SEND, then pass the Intent
to GiniBank.createCaptureFlowFragmentForIntent()
:
...