We use the term file import
to refer to the Open with feature within Gini Bank SDK. From the point of view of the SDK, files are imported into the SDK from an outside source. It is unaware and can't set configuration related to enabling the client app to receive files via Android’s Open with or Share functionality.
To enable file import, pass true
to GiniBank.setCaptureConfiguration(CaptureConfiguration(fileImportEnabled = ))
. Additionally, your app should declare intent filters for receiving images and/or PDF files from other apps and then forward the incoming intent to Gini Bank SDK.
Register image and PDF file types
Add the following intent filter to the activity in your AndroidManifest.xml
to receive incoming images and PDF files:
<activity android:name=".ui.MyActivity"> <!-- Receiving images: --> <intent-filter android:label="@string/label_for_image_open_with"> <action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.SEND" /> <!-- The below SEND_MULTIPLE action is only needed if you enabled scanning of multi-page documents: --> <action android:name="android.intent.action.SEND_MULTIPLE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> </intent-filter> <!-- Receiving pdfs: --> <intent-filter android:label="@string/label_for_pdf_open_with"> <action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="application/pdf" /> </intent-filter> </activity>
We recommend adding ACTION_VIEW to the intent filter to let users send images and PDF files to your app from apps that don’t implement sharing with ACTION_SEND but enable viewing images and PDF files with other apps.
Handle imported files
When your app is requested to handle an image or a PDF file, your activity (declaring the intent filter shown above) is launched or resumed (onNewetent()
) with the Intent
having ACTION_VIEW
or ACTION_SEND
.
We recommend checking whether the Intent
has the required action before proceeding with it:
String action = intent.getAction(); if (Intent.ACTION_VIEW.equals(action) || Intent.ACTION_SEND.equals(action)) { ... }
If the Intent
passes the above check then register an activity result handler with the CaptureFlowImportContract()
and pass the Intent
to GiniBank.startCaptureFlowFortent()
:
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) }
Detecting when your app is the default app for opening PDF files or images
It is easy for Android users to unintentionally set your app as the default for opening PDFs or images. To inform users about it and allow them to undo it the SDK detects if your app was selected as the default app and shows the Clear Defaults Dialog to inform users and to enable them to clear the defaults for your app in the Android settings.
The UI customization options for the Clear Defaults Dialog can be viewed in the UI Customisation Guide Analysis Screen.