Skip to content

Feature/custom card journey #16

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 19 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions CATALOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,26 @@ The minimal sample that includes all the required Backbase SDKs to get started t
\
LTS 24.03

## [sample/devs/extending-a-journey](https://github.com/Backbase/golden-sample-app-android/tree/sample/devs/extending-a-journey)
This example explains how to extend a journey.
\
**Status**: Maintained
\
LTS 24.09

## [sample/devs/O11Y](https://github.com/Backbase/golden-sample-app-android/tree/sample/devs/O11Y)
An implementation of Backbase Observability that makes it easy to add 3rd party tracking libraries to your project.
\
**Status**: Maintained
\
LTS 24.03
LTS 24.09

## [sample/devs/open-telemetry](https://github.com/Backbase/golden-sample-app-android/tree/sample/devs/open-telemetry)
An implementation of Backbase OpenTelemetry Connector to track screen views and user actions.
\
**Status**: Maintained
\
LTS 24.03
LTS 24.09

## [sample/devs/multi-theming](https://github.com/Backbase/golden-sample-app-android/tree/sample/devs/multi-theming)
This example explains how to use multiple themes in an application.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import androidx.fragment.app.Fragment
import androidx.lifecycle.flowWithLifecycle
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import com.backbase.accounts_journey.R
import com.backbase.accounts_journey.databinding.FragmentAccountDetailBinding
import com.backbase.accounts_journey.presentation.utils.UiUtils
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import org.koin.android.ext.android.inject
Expand All @@ -37,6 +37,8 @@ class AccountDetailFragment : Fragment() {
savedInstanceState: Bundle?
): View {
_binding = FragmentAccountDetailBinding.inflate(inflater, container, false)
UiUtils.applyWindowInsets(binding.contentMain)
UiUtils.applyWindowInsets(binding.toolbar)
return binding.root
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import com.backbase.accounts_journey.R
import com.backbase.accounts_journey.configuration.AccountsJourneyConfiguration
import com.backbase.accounts_journey.configuration.accountlist.AccountListScreenConfiguration
import com.backbase.accounts_journey.databinding.FragmentAccountListBinding
import com.backbase.accounts_journey.router.AccountsRouter
import com.backbase.accounts_journey.routing.AccountsRouting
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
Expand All @@ -40,6 +41,8 @@ class AccountListFragment : Fragment() {
private val accountListAdapter: AccountListAdapter = AccountListAdapter(
onClick = { itemClicked(it) }
)
private val cardNavigationAction: AccountsRouter by inject()

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
Expand Down Expand Up @@ -75,6 +78,11 @@ class AccountListFragment : Fragment() {
.onEach { handleUiState(it) }
.launchIn(lifecycleScope)
viewModel.onEvent(AccountListEvent.OnGetAccounts)

// Remove this button and its action later
binding.btnCards.setOnClickListener {
cardNavigationAction.exit(findNavController())
}
}

private fun handleUiState(uiState: AccountListScreenState) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.backbase.accounts_journey.presentation.utils

import android.view.View
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.updatePadding

object UiUtils {

fun applyWindowInsets(view: View,) {
ViewCompat.setOnApplyWindowInsetsListener(view) { v, insets ->
val bars = insets.getInsets(
WindowInsetsCompat.Type.systemBars()
or WindowInsetsCompat.Type.displayCutout()
)
v.updatePadding(
left = bars.left,
top = bars.top,
right = bars.right,
bottom = bars.bottom,
)
WindowInsetsCompat.CONSUMED
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.backbase.accounts_journey.router

import androidx.navigation.NavController

interface AccountsRouter {

fun exit(navController: NavController)
}
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,14 @@
android:visibility="gone"
app:constraint_referenced_ids="no_account_image,accounts_result_text"
tools:visibility="gone" />

<Button
android:id="@+id/btnCards"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Cards"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>

Expand Down
4 changes: 4 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,9 @@ android {
dependencies {
implementation(projects.accountsJourney)
implementation(projects.accountsUseCase)
implementation(projects.cardJourney.impl)
implementation(projects.cardJourney.api)


implementation(platform(libs.kotlin.bom))
implementation(libs.bundles.android.core)
Expand All @@ -95,4 +98,5 @@ dependencies {
implementation(backbase.bundles.foundation)
implementation(backbase.bundles.journeys)
implementation(backbase.bundles.use.cases)

}
2 changes: 1 addition & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:replace="android:fullBackupContent,android:theme"
tools:targetApi="34">
tools:targetApi="35">
<activity
android:name=".presentation.MainActivity"
android:exported="true">
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/assets/backbase/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
"debugEnable": true
},
"backbase": {
"serverURL": "https://app.stg.sdbxaz.azure.backbaseservices.com",
"serverURL": "https://app.prd.sdbxaz.azure.backbaseservices.com",
"localModelPath": "$(contextRoot)/model.json",
"experience": "",
"version": "6.1.5",
"identity": {
"baseURL": "https://identity.stg.sdbxaz.azure.backbaseservices.com",
"baseURL": "https://identity.prd.sdbxaz.azure.backbaseservices.com",
"realm": "customer",
"clientId": "mobile-client",
"applicationKey": "retail"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,15 @@ import com.backbase.android.identity.fido.FidoUafFacetUtils
import com.backbase.android.identity.journey.authentication.initAuthenticationJourney
import com.backbase.android.identity.journey.authentication.stopAuthenticationJourney
import com.backbase.android.utils.net.NetworkConnectorBuilder
import com.backbase.cards_journey.impl.cardsJourneyModule
import com.backbase.cards_journey.impl.koin.cardModule
import com.backbase.golden_sample_app.authentication.CompositeSessionListener
import com.backbase.golden_sample_app.common.TAG
import com.backbase.golden_sample_app.koin.accountsModule
import com.backbase.golden_sample_app.koin.appModule
import com.backbase.golden_sample_app.koin.featureFilterModule
import com.backbase.golden_sample_app.koin.identityAuthModule
import com.backbase.golden_sample_app.koin.navigationModule
import com.backbase.golden_sample_app.koin.presentationModule
import com.backbase.golden_sample_app.koin.securityModule
import com.backbase.golden_sample_app.koin.servicesModule
Expand Down Expand Up @@ -95,6 +98,7 @@ class MainApplication : Application() {
androidContext(this@MainApplication)
loadKoinModules(
listOf(
navigationModule,
securityModule(this@MainApplication),
servicesModule(this@MainApplication),
userModule(),
Expand All @@ -106,6 +110,8 @@ class MainApplication : Application() {
WorkspacesJourney.create(),
accountsModule,
AccountsJourney.create(configuration = setupAccountsJourneyConfiguration()),
cardModule(this@MainApplication),
cardsJourneyModule
)
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.backbase.golden_sample_app.koin

import androidx.navigation.NavController
import com.backbase.accounts_journey.router.AccountsRouter
import com.backbase.cards_journey.impl.CardsRouter
import com.backbase.golden_sample_app.R
import com.backbase.golden_sample_app.router.AppRouting
import org.koin.dsl.module

val navigationModule = module {
single<AccountsRouter> {
object : AccountsRouter {
override fun exit(navController: NavController) {
navController.navigate(
R.id.action_global_cardsJourney,
)
}
}
}
factory<CardsRouter> {
object : CardsRouter {
override fun exit() {
get<AppRouting>().getNavController()?.popBackStack()
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import com.backbase.golden_sample_app.R
import com.backbase.golden_sample_app.databinding.ActivityMainBinding
import com.backbase.golden_sample_app.menu.moreMenuModule
import com.backbase.golden_sample_app.presentation.bottom.setupBottomBar
import com.backbase.golden_sample_app.presentation.header.updateStatusBarColor
import com.backbase.golden_sample_app.router.AppRouting
import com.backbase.golden_sample_app.session.sessionModule
import kotlinx.coroutines.flow.map
Expand Down
8 changes: 8 additions & 0 deletions app/src/main/res/navigation/navigation_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,12 @@
android:name="com.backbase.golden_sample_app.presentation.header.UpComingJourneyFragment"
tools:layout="@layout/fragment_upcoming_journey" />

<fragment
android:id="@+id/cardsJourney"
android:name="com.backbase.cards_journey.impl.CardsJourney"
android:label="CardsJourney"
tools:layout="@layout/fragment_cards_journey" />
<action
android:id="@+id/action_global_cardsJourney"
app:destination="@id/cardsJourney" />
</navigation>
23 changes: 23 additions & 0 deletions app/src/main/res/xml/network_security_config.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<network-security-config>
<domain-config>
<!-- Make sure your URL Server here -->
<domain includeSubdomains="true">app.prd.sdbxaz.azure.backbaseservices.com</domain>
<trust-anchors>
<certificates src="user"/>
<certificates src="system"/>
</trust-anchors>
</domain-config>

<debug-overrides>
<trust-anchors>
<certificates src="user" />
<certificates src="system" />
</trust-anchors>
</debug-overrides>

<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
</network-security-config>
2 changes: 1 addition & 1 deletion buildSrc/src/main/kotlin/Version.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
object Version {
const val compileSdk = 34
const val compileSdk = 35
const val minSdk = 26
const val versionCode = 1
const val versionName = "1.0.0"
Expand Down
2 changes: 1 addition & 1 deletion buildSrc/src/main/kotlin/configured-detekt.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ detekt {
toolVersion = "1.23.1"
buildUponDefaultConfig = true // preconfigure defaults
allRules = false // activate all available (even unstable) rules.
config.setFrom("../config/golden-sample-app-detekt.yml") // point to your custom config defining rules to run, overwriting default behavior
config.setFrom("$rootDir/config/golden-sample-app-detekt.yml") // point to your custom config defining rules to run, overwriting default behavior
parallel = true
autoCorrect = true
ignoredVariants = listOf("release")
Expand Down
1 change: 1 addition & 0 deletions card-journey/api/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
17 changes: 17 additions & 0 deletions card-journey/api/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
plugins {
id(backbase.plugins.feature.android.module.get().pluginId)
id(libs.plugins.kotlin.parcelize.get().pluginId)
id(libs.plugins.navigation.safe.args.get().pluginId)
id(backbase.plugins.configured.detekt.get().pluginId)
}

android {
namespace = "com.backbase.cards_journey.api"
}

dependencies {

// Backbase libraries
implementation(backbase.bom)
implementation(backbase.bundles.card.client.common)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.backbase.api.data

import com.backbase.android.client.cardsclient2.model.CardItem
import com.backbase.android.clients.common.Call

interface CustomCardClient {
fun getCards(): Call<List<CardItem>>
fun getCardDetails(id: String): Call<CardItem>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.backbase.api.domain

import com.backbase.android.client.cardsclient2.model.CardItem

interface CustomCardUseCase {

suspend fun getCards(): Result<List<CardItem>>
suspend fun getCardDetails(id: String): Result<CardItem>
}
1 change: 1 addition & 0 deletions card-journey/impl/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
20 changes: 20 additions & 0 deletions card-journey/impl/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
plugins {
id(backbase.plugins.feature.android.module.get().pluginId)
id(libs.plugins.kotlin.parcelize.get().pluginId)
id(libs.plugins.navigation.safe.args.get().pluginId)
id(backbase.plugins.configured.detekt.get().pluginId)
}

android {
namespace = "com.backbase.cards_journey.impl"
}

dependencies {
// Backbase libraries
implementation(backbase.bom)
implementation(backbase.bundles.common)
implementation(libs.bundles.navigation)
implementation(backbase.bundles.card.client.common)
implementation(projects.cardJourney.api)
implementation(projects.coreUi)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.backbase.cards_journey.impl

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import com.backbase.cards_journey.impl.databinding.FragmentCardsJourneyBinding

class CardsJourney : Fragment() {
private val scope by viewModels<CardsJourneyScopeImpl>()

private var _binding: FragmentCardsJourneyBinding? = null
private val binding get() = _binding!!

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
scope.launchWithArguments()
_binding = FragmentCardsJourneyBinding.inflate(inflater, container, false)
return binding.root
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.backbase.cards_journey.impl

import org.koin.dsl.module

val cardsJourneyModule = module {
scope<CardsJourneyScope> {
}
}
Loading