Skip to content

Commit

Permalink
feature(bank-sdk): Transaction List. Invoice Preview integration. Att…
Browse files Browse the repository at this point in the history
…ach Invoice from PP

PP-747
  • Loading branch information
ndubkov-distcotech committed Sep 18, 2024
1 parent 19267ab commit 7dffe88
Show file tree
Hide file tree
Showing 44 changed files with 388 additions and 243 deletions.
3 changes: 3 additions & 0 deletions bank-sdk/example-app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,9 @@ dependencies {
implementation(libs.hilt.library)
implementation(libs.navigation.fragment.ktx)
implementation(libs.navigation.ui.ktx)
implementation(libs.material)
implementation(libs.androidx.activity)
implementation(libs.androidx.constraintlayout)
kapt(libs.hilt.compiler)

implementation(libs.androidx.lifecycle.runtime.ktx)
Expand Down
78 changes: 43 additions & 35 deletions bank-sdk/example-app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,46 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<queries>
<intent>
<action android:name="android.intent.action.PICK" />

<data android:mimeType="image/*" />
</intent>
<intent>
<action android:name="android.intent.action.OPEN_DOCUMENT" />

<data android:mimeType="image/*" />
</intent>
<intent>
<action android:name="android.intent.action.OPEN_DOCUMENT" />

<data android:mimeType="application/pdf" />
</intent>
</queries>

<uses-feature
android:name="android.hardware.camera.autofocus"
android:required="true" />
<uses-feature
android:name="android.hardware.camera.flash"
android:required="true" />
<uses-feature
android:name="android.hardware.camera"
android:required="true" />

<uses-permission android:name="android.permission.CAMERA" />

<application
android:name=".ExampleApp"
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:theme="@style/AppTheme">
<activity
android:name=".ui.InvoicePreviewActivity"
android:exported="false" />
<activity
android:name=".ui.MainActivity"
android:exported="true"
Expand All @@ -26,6 +59,7 @@
<action android:name="android.intent.action.SEND_MULTIPLE" />

<category android:name="android.intent.category.DEFAULT" />

<data android:mimeType="image/*" />
</intent-filter>
<intent-filter
Expand All @@ -35,6 +69,7 @@
<action android:name="android.intent.action.SEND" />

<category android:name="android.intent.category.DEFAULT" />

<data android:mimeType="application/pdf" />
</intent-filter>
</activity>
Expand All @@ -44,11 +79,9 @@
<activity
android:name=".ui.CustomHelpActivity"
android:label="@string/custom_help_screen_title" />

<activity
android:name=".ui.ConfigurationActivity"
android:label="@string/configuration_activity_title" />

<activity
android:name=".ui.pay.PayActivity"
android:exported="true">
Expand All @@ -62,11 +95,10 @@
android:scheme="@string/gini_pay_connect_scheme" />
</intent-filter>
</activity>

<activity
android:name=".ui.CaptureFlowHostActivity"
android:launchMode="singleTask"
android:exported="true">
android:exported="true"
android:launchMode="singleTask">
<intent-filter
android:label="@string/single_activity"
tools:ignore="AppLinkUrlError">
Expand All @@ -75,6 +107,7 @@
<action android:name="android.intent.action.SEND_MULTIPLE" />

<category android:name="android.intent.category.DEFAULT" />

<data android:mimeType="image/*" />
</intent-filter>
<intent-filter
Expand All @@ -84,11 +117,12 @@
<action android:name="android.intent.action.SEND" />

<category android:name="android.intent.category.DEFAULT" />

<data android:mimeType="application/pdf" />
</intent-filter>
</activity>

<activity android:name=".ui.SplashActivity"
<activity
android:name=".ui.SplashActivity"
android:exported="true">
<intent-filter
android:label="@string/splash_activity"
Expand All @@ -98,6 +132,7 @@
<action android:name="android.intent.action.SEND_MULTIPLE" />

<category android:name="android.intent.category.DEFAULT" />

<data android:mimeType="image/*" />
</intent-filter>
<intent-filter
Expand All @@ -107,6 +142,7 @@
<action android:name="android.intent.action.SEND" />

<category android:name="android.intent.category.DEFAULT" />

<data android:mimeType="application/pdf" />
</intent-filter>
</activity>
Expand All @@ -120,34 +156,6 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>

</application>

<queries>
<intent>
<action android:name="android.intent.action.PICK" />
<data android:mimeType="image/*" />
</intent>
<intent>
<action android:name="android.intent.action.OPEN_DOCUMENT" />
<data android:mimeType="image/*" />
</intent>
<intent>
<action android:name="android.intent.action.OPEN_DOCUMENT" />
<data android:mimeType="application/pdf" />
</intent>
</queries>

<uses-feature
android:name="android.hardware.camera.autofocus"
android:required="true" />
<uses-feature
android:name="android.hardware.camera.flash"
android:required="true" />
<uses-feature
android:name="android.hardware.camera"
android:required="true" />

<uses-permission android:name="android.permission.CAMERA" />

</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import net.gini.android.bank.sdk.exampleapp.R
import net.gini.android.bank.sdk.exampleapp.core.di.GiniCaptureNetworkServiceDebugDisabled
import net.gini.android.bank.sdk.exampleapp.core.di.GiniCaptureNetworkServiceDebugEnabled
import net.gini.android.bank.sdk.exampleapp.databinding.ActivityExtractionsBinding
import net.gini.android.bank.sdk.transactiondocs.ui.extractions.view.TransactionDocsView
import net.gini.android.capture.Amount
import net.gini.android.capture.AmountCurrency
import net.gini.android.capture.network.GiniCaptureDefaultNetworkService
Expand Down Expand Up @@ -220,7 +221,15 @@ private class ExtractionsAdapter(
ExtractionsDocsViewHolder(
LayoutInflater.from(parent.context)
.inflate(R.layout.item_transaction_docs, parent, false)
)
).apply {
this.transactionDocView.onDocumentClick {
this.itemView.context.startActivity(
InvoicePreviewActivity.newIntent(
this.itemView.context, it.giniApiDocumentId
)
)
}
}
}

else -> error("Unknown view type")
Expand Down Expand Up @@ -260,5 +269,5 @@ private class ExtractionsViewHolder(itemView: View) : ViewHolder(itemView) {
}

private class ExtractionsDocsViewHolder(itemView: View) : ViewHolder(itemView) {

val transactionDocView: TransactionDocsView = itemView.findViewById(R.id.transaction_docs_view)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package net.gini.android.bank.sdk.exampleapp.ui

import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import net.gini.android.bank.sdk.GiniBank
import net.gini.android.bank.sdk.exampleapp.R

class InvoicePreviewActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_invoice_preview)
val documentId =
intent.getStringExtra(EXTRA_DOCUMENT_ID) ?: error("Missing $EXTRA_DOCUMENT_ID extra")

val fragment = GiniBank.createInvoicePreviewFragment(documentId)

supportFragmentManager.beginTransaction().replace(R.id.container, fragment).commit()
}

companion object {

private const val EXTRA_DOCUMENT_ID = "document_id"

fun newIntent(context: Context, documentId: String): Intent {
return Intent(context, InvoicePreviewActivity::class.java).apply {
putExtra(EXTRA_DOCUMENT_ID, documentId)
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.InvoicePreviewActivity">

<FrameLayout
android:id="@+id/container"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="1dp"
android:layout_marginTop="1dp"
android:layout_marginEnd="1dp"
android:layout_marginBottom="1dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">

</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
android:padding="10dp">

<net.gini.android.bank.sdk.transactiondocs.ui.extractions.view.TransactionDocsView
android:id="@+id/transaction_docs_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</FrameLayout>
14 changes: 12 additions & 2 deletions bank-sdk/sdk/src/main/java/net/gini/android/bank/sdk/GiniBank.kt
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,12 @@ import net.gini.android.bank.sdk.capture.skonto.SkontoNavigationBarBottomAdapter
import net.gini.android.bank.sdk.capture.skonto.help.SkontoHelpNavigationBarBottomAdapter
import net.gini.android.bank.sdk.di.BankSdkIsolatedKoinContext
import net.gini.android.bank.sdk.error.AmountParsingException
import net.gini.android.bank.sdk.invoice.InvoicePreviewFragment
import net.gini.android.bank.sdk.pay.getBusinessIntent
import net.gini.android.bank.sdk.pay.getRequestId
import net.gini.android.bank.sdk.transactiondocs.TransactionDocs
import net.gini.android.bank.sdk.transactiondocs.TransactionDocsConfiguration
import net.gini.android.bank.sdk.transactionlist.internal.GiniBankTransactionDocs
import net.gini.android.bank.sdk.transactiondocs.internal.GiniBankTransactionDocs
import net.gini.android.bank.sdk.transactionlist.internal.GiniTransactionDocsSettings
import net.gini.android.bank.sdk.util.parseAmountToBackendFormat
import net.gini.android.capture.*
Expand Down Expand Up @@ -540,6 +541,16 @@ object GiniBank {
return CaptureFlowFragment.createInstance(document)
}

fun createInvoicePreviewFragment(giniApiDocumentId: String) : InvoicePreviewFragment {
check(giniApiDocumentId.isNotBlank() && giniApiDocumentId.isNotEmpty()) {
"Gini Api Document Id should not be empty or blank" }
return InvoicePreviewFragment.createInstance(giniApiDocumentId)
}

fun startInvoicePreview() {

}


fun initializeTransactionDocsFeature(
context: Context,
Expand All @@ -550,7 +561,6 @@ object GiniBank {
this.giniBankTransactionDocs = GiniBankTransactionDocs(
configuration = transactionDocsConfiguration,
transactionDocsSettings = transactionDocsSettings,
backgroundDispatcher = Dispatchers.IO
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,12 +162,14 @@ class DigitalInvoiceSkontoFragment : Fragment() {
)
findNavController().popBackStack()
},
navigateToInvoiceScreen = { data ->
navigateToInvoiceScreen = { documentId, data ->
findNavController()
.navigate(
DigitalInvoiceSkontoFragmentDirections.toInvoicePreviewFragment(
skontoData = data,
invoiceHighlights = args.data.invoiceHighlights.toTypedArray(),
documentId = documentId,
highlightBoxes = args.data.invoiceHighlights.flatMap { it.getExistBoxes() }
.toTypedArray(),
infoTextLines = arrayOf() // TODO Add lines
)
)
},
Expand Down Expand Up @@ -205,7 +207,7 @@ private fun ScreenContent(
isBottomNavigationBarEnabled: Boolean,
navigateBack: () -> Unit,
navigateToHelpScreen: () -> Unit,
navigateToInvoiceScreen: (skontoData: SkontoData) -> Unit,
navigateToInvoiceScreen: (documentId: String, skontoData: SkontoData) -> Unit,
viewModel: DigitalInvoiceSkontoViewModel,
customBottomNavBarAdapter: InjectedViewAdapterInstance<DigitalInvoiceSkontoNavigationBarBottomAdapter>?,
modifier: Modifier = Modifier,
Expand All @@ -218,8 +220,11 @@ private fun ScreenContent(

viewModel.collectSideEffect {
when (it) {
is DigitalInvoiceSkontoSideEffect.OpenInvoiceScreen -> navigateToInvoiceScreen(it.skontoData)
DigitalInvoiceSkontoSideEffect.OpenHelpScreen -> navigateToHelpScreen()
is DigitalInvoiceSkontoSideEffect.OpenInvoiceScreen ->
navigateToInvoiceScreen(it.documentId, it.skontoData)

DigitalInvoiceSkontoSideEffect.OpenHelpScreen ->
navigateToHelpScreen()
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ val digitalInvoiceSkontoScreenModule = module {
args = data,
getSkontoDiscountPercentageUseCase = get(),
getSkontoEdgeCaseUseCase = get(),
getSkontoRemainingDaysUseCase = get()
getSkontoRemainingDaysUseCase = get(),
lastAnalyzedDocumentProvider = get(),
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@ internal sealed class DigitalInvoiceSkontoScreenState {
}

internal sealed interface DigitalInvoiceSkontoSideEffect {
data class OpenInvoiceScreen(val skontoData: SkontoData) : DigitalInvoiceSkontoSideEffect
data class OpenInvoiceScreen(val documentId: String, val skontoData: SkontoData) :
DigitalInvoiceSkontoSideEffect

object OpenHelpScreen : DigitalInvoiceSkontoSideEffect
}

Loading

0 comments on commit 7dffe88

Please sign in to comment.