Skip to content
Merged
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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
14 changes: 7 additions & 7 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Alfie is a native Android e-commerce application built with Jetpack Compose (min
The codebase follows Clean Architecture principles with MVVM for presentation, organized into distinct layers:

#### Data Layer
- **Location**: `data/src/main/java/au/com/alfie/ecomm/data/`
- **Location**: `data/src/main/java/com/mindera/alfie/data/`
- **Purpose**: Data sources, repositories implementation, DTOs, and data mapping
- **Pattern**: Repository pattern with protocol-based interfaces
- **Key Components**:
Expand All @@ -40,7 +40,7 @@ internal class BrandRepositoryImpl @Inject constructor(
```

#### Domain Layer
- **Location**: `domain/src/main/java/au/com/alfie/ecomm/domain/`
- **Location**: `domain/src/main/java/com/mindera/alfie/domain/`
- **Purpose**: Business logic, use cases, and repository interfaces
- **Pattern**: Use cases as single-responsibility operations
- **Dependencies**: No Android dependencies, pure Kotlin
Expand All @@ -64,7 +64,7 @@ class GetBrandsUseCase @Inject constructor(
```

#### Presentation Layer (Feature Modules)
- **Location**: `feature/<feature-name>/src/main/java/au/com/alfie/ecomm/feature/`
- **Location**: `feature/<feature-name>/src/main/java/com/mindera/alfie/feature/`
- **Pattern**: MVVM with Jetpack Compose
- **State Management**: Use `StateFlow` for observable state
- **Dependencies**: Inject use cases via Hilt
Expand Down Expand Up @@ -256,7 +256,7 @@ The project uses Gradle with modularization for scalability:
- **Queries**: `*-queries.graphql` (e.g., `product-queries.graphql`)
- **Fragments**: `fragments/` subdirectory
- **Schema**: `schema.graphqls`
- **Generated code**: Apollo Kotlin generates DTOs in `au.com.alfie.ecomm.graphql` package
- **Generated code**: Apollo Kotlin generates DTOs in `com.mindera.alfie.graphql` package

### Adding a New Query

Expand Down Expand Up @@ -335,7 +335,7 @@ Text(text = stringResource(R.string.home_member_since, memberDate))

### Theme System

- **Location**: `designsystem/src/main/java/au/com/alfie/ecomm/designsystem/theme/`
- **Location**: `designsystem/src/main/java/com/mindera/alfie/designsystem/theme/`
- **Access**: Via `Theme` object
- **Components**:
- `Theme.color` - Color palette
Expand All @@ -361,7 +361,7 @@ Box(

### Reusable Components

Located in `designsystem/src/main/java/au/com/alfie/ecomm/designsystem/component/`:
Located in `designsystem/src/main/java/com/mindera/alfie/designsystem/component/`:

- **Buttons**: Various button styles and states
- **Indicators**: Loading indicators, badges, progress
Expand Down Expand Up @@ -466,7 +466,7 @@ internal object NetworkModule {
feature/<feature-name>/
├── src/
│ ├── main/
│ │ └── java/au/com/alfie/ecomm/feature/<feature>/
│ │ └── java/com/mindera/alfie/feature/<feature>/
│ │ ├── <Feature>Screen.kt # Composable screen
│ │ ├── <Feature>ViewModel.kt # ViewModel
│ │ ├── <Feature>UIFactory.kt # UI model factory
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/deploy_beta.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:

- name: Set Firebase Credentials
env:
FIREBASE_APP_ID: ${{ secrets.FIREBASE_APP_ID_BETA }}
FIREBASE_APP_ID: ${{ secrets.FIREBASE_APP_ID }}
FIREBASE_CREDENTIALS: ${{ secrets.FIREBASE_DISTRIBUTOR_KEY }}
GOOGLE_SERVICES_JSON: ${{ secrets.GOOGLE_SERVICES_JSON }}
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/deploy_debug.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:

- name: Set Firebase Credentials
env:
FIREBASE_APP_ID: ${{ secrets.FIREBASE_APP_ID_DEBUG }}
FIREBASE_APP_ID: ${{ secrets.FIREBASE_APP_ID }}
FIREBASE_CREDENTIALS: ${{ secrets.FIREBASE_DISTRIBUTOR_KEY }}
GOOGLE_SERVICES_JSON: ${{ secrets.GOOGLE_SERVICES_JSON }}
run: |
Expand Down
15 changes: 8 additions & 7 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import au.com.alfie.ecomm.buildconvention.BuildType.BETA
import au.com.alfie.ecomm.buildconvention.BuildType.DEBUG
import au.com.alfie.ecomm.buildconvention.BuildType.RELEASE
import au.com.alfie.ecomm.buildconvention.Environment
import au.com.alfie.ecomm.buildconvention.extension.betaImplementation
import au.com.alfie.ecomm.buildconvention.module.ProjectModule
import au.com.alfie.ecomm.buildconvention.setEnvironmentsFields
import com.mindera.alfie.buildconvention.BuildType.BETA
import com.mindera.alfie.buildconvention.BuildType.DEBUG
import com.mindera.alfie.buildconvention.BuildType.RELEASE
import com.mindera.alfie.buildconvention.Environment
import com.mindera.alfie.buildconvention.extension.betaImplementation
import com.mindera.alfie.buildconvention.module.ProjectModule
import com.mindera.alfie.buildconvention.setEnvironmentsFields

plugins {
alias(buildConvention.plugins.application)
Expand Down Expand Up @@ -55,6 +55,7 @@ android {

release {
isMinifyEnabled = false
signingConfig = signingConfigs.getByName(RELEASE.buildName)
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package au.com.alfie.ecomm
package com.mindera.alfie

import android.app.Application
import au.com.alfie.ecomm.core.commons.log.TimberConfigurator
import com.google.firebase.FirebaseApp
import com.mindera.alfie.core.commons.log.TimberConfigurator
import dagger.hilt.android.HiltAndroidApp
import javax.inject.Inject

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package au.com.alfie.ecomm
package com.mindera.alfie

import android.content.Intent
import android.os.Bundle
Expand All @@ -11,16 +11,16 @@ import androidx.compose.runtime.CompositionLocalProvider
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.lifecycleScope
import au.com.alfie.ecomm.core.commons.extension.isNotNullOrBlank
import au.com.alfie.ecomm.core.deeplink.DeeplinkHandler
import au.com.alfie.ecomm.core.navigation.DirectionProvider
import au.com.alfie.ecomm.core.ui.system.rememberSystemUiController
import au.com.alfie.ecomm.debug.runner.DebugComposeRunner
import au.com.alfie.ecomm.debug.runner.LocalDebugComposeRunner
import au.com.alfie.ecomm.designsystem.theme.Theme
import au.com.alfie.ecomm.feature.startup.StartUp
import au.com.alfie.ecomm.navigation.AppNavigation
import au.com.alfie.ecomm.navigation.NavGraphs
import com.mindera.alfie.core.commons.extension.isNotNullOrBlank
import com.mindera.alfie.core.deeplink.DeeplinkHandler
import com.mindera.alfie.core.navigation.DirectionProvider
import com.mindera.alfie.core.ui.system.rememberSystemUiController
import com.mindera.alfie.debug.runner.DebugComposeRunner
import com.mindera.alfie.debug.runner.LocalDebugComposeRunner
import com.mindera.alfie.designsystem.theme.Theme
import com.mindera.alfie.feature.startup.StartUp
import com.mindera.alfie.navigation.AppNavigation
import com.mindera.alfie.navigation.NavGraphs
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import javax.inject.Inject
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package au.com.alfie.ecomm
package com.mindera.alfie

import android.content.Context
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import au.com.alfie.ecomm.debug.operational.R
import au.com.alfie.ecomm.domain.usecase.featuretoggle.GetFeatureToggleUseCase
import com.mindera.alfie.debug.operational.R
import com.mindera.alfie.domain.usecase.featuretoggle.GetFeatureToggleUseCase
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.flow.MutableStateFlow
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package au.com.alfie.ecomm.di
package com.mindera.alfie.di

import android.content.Context
import au.com.alfie.ecomm.BuildConfig
import au.com.alfie.ecomm.R
import au.com.alfie.ecomm.core.environment.model.BuildConfiguration
import au.com.alfie.ecomm.core.environment.model.Environment
import au.com.alfie.ecomm.core.environment.model.Environments
import au.com.alfie.ecomm.core.navigation.DirectionProvider
import au.com.alfie.ecomm.navigation.DirectionProviderImpl
import com.mindera.alfie.BuildConfig
import com.mindera.alfie.R
import com.mindera.alfie.core.environment.model.BuildConfiguration
import com.mindera.alfie.core.environment.model.Environment
import com.mindera.alfie.core.environment.model.Environments
import com.mindera.alfie.core.navigation.DirectionProvider
import com.mindera.alfie.navigation.DirectionProviderImpl
import dagger.Binds
import dagger.Module
import dagger.Provides
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package au.com.alfie.ecomm.navigation
package com.mindera.alfie.navigation

import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.animation.fadeIn
Expand All @@ -21,28 +21,28 @@ import androidx.navigation.NavGraph.Companion.findStartDestination
import androidx.navigation.NavHostController
import androidx.navigation.compose.rememberNavController
import androidx.navigation.plusAssign
import au.com.alfie.ecomm.core.deeplink.DeeplinkHandler
import au.com.alfie.ecomm.core.deeplink.DeeplinkResult
import au.com.alfie.ecomm.core.navigation.DirectionProvider
import au.com.alfie.ecomm.core.navigation.Screen
import au.com.alfie.ecomm.core.navigation.arguments.webview.webViewNavArgs
import au.com.alfie.ecomm.designsystem.animation.standard
import au.com.alfie.ecomm.designsystem.component.bottombar.BottomBar
import au.com.alfie.ecomm.designsystem.component.bottombar.BottomBarState
import au.com.alfie.ecomm.designsystem.component.bottombar.rememberBottomBarState
import au.com.alfie.ecomm.designsystem.component.snackbar.SnackbarCustomHost
import au.com.alfie.ecomm.designsystem.component.snackbar.SnackbarCustomHostState
import au.com.alfie.ecomm.designsystem.component.snackbar.rememberSnackbarCustomHostState
import au.com.alfie.ecomm.designsystem.component.topbar.TopBar
import au.com.alfie.ecomm.designsystem.component.topbar.TopBarState
import au.com.alfie.ecomm.designsystem.component.topbar.TopBarTitle
import au.com.alfie.ecomm.designsystem.component.topbar.rememberTopBarState
import au.com.alfie.ecomm.feature.home.destinations.HomeScreenDestination
import au.com.alfie.ecomm.feature.search.SearchOverlay
import au.com.alfie.ecomm.feature.webview.destinations.WebViewScreenDestination
import com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi
import com.google.accompanist.navigation.material.ModalBottomSheetLayout
import com.google.accompanist.navigation.material.rememberBottomSheetNavigator
import com.mindera.alfie.core.deeplink.DeeplinkHandler
import com.mindera.alfie.core.deeplink.DeeplinkResult
import com.mindera.alfie.core.navigation.DirectionProvider
import com.mindera.alfie.core.navigation.Screen
import com.mindera.alfie.core.navigation.arguments.webview.webViewNavArgs
import com.mindera.alfie.designsystem.animation.standard
import com.mindera.alfie.designsystem.component.bottombar.BottomBar
import com.mindera.alfie.designsystem.component.bottombar.BottomBarState
import com.mindera.alfie.designsystem.component.bottombar.rememberBottomBarState
import com.mindera.alfie.designsystem.component.snackbar.SnackbarCustomHost
import com.mindera.alfie.designsystem.component.snackbar.SnackbarCustomHostState
import com.mindera.alfie.designsystem.component.snackbar.rememberSnackbarCustomHostState
import com.mindera.alfie.designsystem.component.topbar.TopBar
import com.mindera.alfie.designsystem.component.topbar.TopBarState
import com.mindera.alfie.designsystem.component.topbar.TopBarTitle
import com.mindera.alfie.designsystem.component.topbar.rememberTopBarState
import com.mindera.alfie.feature.home.destinations.HomeScreenDestination
import com.mindera.alfie.feature.search.SearchOverlay
import com.mindera.alfie.feature.webview.destinations.WebViewScreenDestination
import com.ramcosta.composedestinations.DestinationsNavHost
import com.ramcosta.composedestinations.animations.defaults.RootNavGraphDefaultAnimations
import com.ramcosta.composedestinations.animations.rememberAnimatedNavHostEngine
Expand Down
Original file line number Diff line number Diff line change
@@ -1,30 +1,30 @@
package au.com.alfie.ecomm.navigation
package com.mindera.alfie.navigation

import androidx.annotation.DrawableRes
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable
import au.com.alfie.ecomm.R
import au.com.alfie.ecomm.core.commons.string.StringResource
import au.com.alfie.ecomm.core.navigation.arguments.shop.shopNavArgs
import au.com.alfie.ecomm.core.navigation.arguments.wishlist.wishlistNavArgs
import au.com.alfie.ecomm.core.ui.test.BAG_TAB
import au.com.alfie.ecomm.core.ui.test.HOME_TAB
import au.com.alfie.ecomm.core.ui.test.SHOP_TAB
import au.com.alfie.ecomm.core.ui.test.WISHLIST_TAB
import au.com.alfie.ecomm.designsystem.component.bottombar.BottomBarItem
import au.com.alfie.ecomm.designsystem.component.bottombar.BottomBarItemState
import au.com.alfie.ecomm.designsystem.component.bottombar.rememberBottomBarItemState
import au.com.alfie.ecomm.feature.bag.destinations.BagScreenDestination
import au.com.alfie.ecomm.feature.home.destinations.HomeScreenDestination
import au.com.alfie.ecomm.feature.shop.destinations.ShopCategoryScreenDestination
import au.com.alfie.ecomm.feature.shop.destinations.ShopScreenDestination
import au.com.alfie.ecomm.feature.wishlist.destinations.WishlistScreenDestination
import com.mindera.alfie.R
import com.mindera.alfie.core.commons.string.StringResource
import com.mindera.alfie.core.navigation.arguments.shop.shopNavArgs
import com.mindera.alfie.core.navigation.arguments.wishlist.wishlistNavArgs
import com.mindera.alfie.core.ui.test.BAG_TAB
import com.mindera.alfie.core.ui.test.HOME_TAB
import com.mindera.alfie.core.ui.test.SHOP_TAB
import com.mindera.alfie.core.ui.test.WISHLIST_TAB
import com.mindera.alfie.designsystem.component.bottombar.BottomBarItem
import com.mindera.alfie.designsystem.component.bottombar.BottomBarItemState
import com.mindera.alfie.designsystem.component.bottombar.rememberBottomBarItemState
import com.mindera.alfie.feature.bag.destinations.BagScreenDestination
import com.mindera.alfie.feature.home.destinations.HomeScreenDestination
import com.mindera.alfie.feature.shop.destinations.ShopCategoryScreenDestination
import com.mindera.alfie.feature.shop.destinations.ShopScreenDestination
import com.mindera.alfie.feature.wishlist.destinations.WishlistScreenDestination
import com.ramcosta.composedestinations.spec.DestinationSpec
import com.ramcosta.composedestinations.spec.Direction
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.PersistentList
import kotlinx.collections.immutable.persistentListOf
import au.com.alfie.ecomm.designsystem.R as RD
import com.mindera.alfie.designsystem.R as RD

@Stable
data class BottomBarDestination(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
package au.com.alfie.ecomm.navigation
package com.mindera.alfie.navigation

import androidx.compose.runtime.Stable
import au.com.alfie.ecomm.core.navigation.DirectionProvider
import au.com.alfie.ecomm.core.navigation.Screen
import au.com.alfie.ecomm.feature.account.destinations.AccountScreenDestination
import au.com.alfie.ecomm.feature.bag.destinations.BagScreenDestination
import au.com.alfie.ecomm.feature.debug.destinations.DebugScreenDestination
import au.com.alfie.ecomm.feature.home.destinations.HomeScreenDestination
import au.com.alfie.ecomm.feature.pdp.destinations.ProductDetailsScreenDestination
import au.com.alfie.ecomm.feature.plp.destinations.ProductListScreenDestination
import au.com.alfie.ecomm.feature.shop.destinations.ShopCategoryScreenDestination
import au.com.alfie.ecomm.feature.shop.destinations.ShopScreenDestination
import au.com.alfie.ecomm.feature.webview.destinations.WebViewScreenDestination
import au.com.alfie.ecomm.feature.wishlist.destinations.WishlistScreenDestination
import com.mindera.alfie.core.navigation.DirectionProvider
import com.mindera.alfie.core.navigation.Screen
import com.mindera.alfie.feature.account.destinations.AccountScreenDestination
import com.mindera.alfie.feature.bag.destinations.BagScreenDestination
import com.mindera.alfie.feature.debug.destinations.DebugScreenDestination
import com.mindera.alfie.feature.home.destinations.HomeScreenDestination
import com.mindera.alfie.feature.pdp.destinations.ProductDetailsScreenDestination
import com.mindera.alfie.feature.plp.destinations.ProductListScreenDestination
import com.mindera.alfie.feature.shop.destinations.ShopCategoryScreenDestination
import com.mindera.alfie.feature.shop.destinations.ShopScreenDestination
import com.mindera.alfie.feature.webview.destinations.WebViewScreenDestination
import com.mindera.alfie.feature.wishlist.destinations.WishlistScreenDestination
import com.ramcosta.composedestinations.spec.Direction
import javax.inject.Inject

Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
package au.com.alfie.ecomm.navigation
package com.mindera.alfie.navigation

import androidx.compose.runtime.Immutable
import au.com.alfie.ecomm.core.navigation.NestedNavGraph
import au.com.alfie.ecomm.feature.account.destinations.AccountScreenDestination
import au.com.alfie.ecomm.feature.bag.destinations.BagScreenDestination
import au.com.alfie.ecomm.feature.debug.destinations.DebugScreenDestination
import au.com.alfie.ecomm.feature.home.destinations.HomeScreenDestination
import au.com.alfie.ecomm.feature.pdp.destinations.ProductDetailsScreenDestination
import au.com.alfie.ecomm.feature.plp.destinations.ProductListScreenDestination
import au.com.alfie.ecomm.feature.shop.destinations.ShopCategoryScreenDestination
import au.com.alfie.ecomm.feature.shop.destinations.ShopScreenDestination
import au.com.alfie.ecomm.feature.webview.destinations.WebViewScreenDestination
import au.com.alfie.ecomm.feature.wishlist.destinations.WishlistScreenDestination
import com.mindera.alfie.core.navigation.NestedNavGraph
import com.mindera.alfie.feature.account.destinations.AccountScreenDestination
import com.mindera.alfie.feature.bag.destinations.BagScreenDestination
import com.mindera.alfie.feature.debug.destinations.DebugScreenDestination
import com.mindera.alfie.feature.home.destinations.HomeScreenDestination
import com.mindera.alfie.feature.pdp.destinations.ProductDetailsScreenDestination
import com.mindera.alfie.feature.plp.destinations.ProductListScreenDestination
import com.mindera.alfie.feature.shop.destinations.ShopCategoryScreenDestination
import com.mindera.alfie.feature.shop.destinations.ShopScreenDestination
import com.mindera.alfie.feature.webview.destinations.WebViewScreenDestination
import com.mindera.alfie.feature.wishlist.destinations.WishlistScreenDestination
import com.ramcosta.composedestinations.spec.DestinationSpec
import com.ramcosta.composedestinations.spec.NavGraphSpec
import javax.inject.Inject
Expand Down
Loading