From d1ec44e48f8aa3a3bc1321e4e1184908aeb9c34f Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 14 May 2024 12:17:07 +0200 Subject: [PATCH 01/10] navigation-compose dependency --- WooCommerce/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/WooCommerce/build.gradle b/WooCommerce/build.gradle index 8468779c391..0ed63ee61f3 100644 --- a/WooCommerce/build.gradle +++ b/WooCommerce/build.gradle @@ -403,6 +403,7 @@ dependencies { implementation 'androidx.compose.runtime:runtime-livedata' implementation "androidx.compose.material:material-icons-extended" implementation 'androidx.compose.ui:ui-text-google-fonts' + implementation 'androidx.navigation:navigation-compose' implementation 'androidx.constraintlayout:constraintlayout-compose:1.0.1' implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2' From e37662eb4c5e6f0a3aff02dda76484e68e64842e Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 14 May 2024 14:16:29 +0200 Subject: [PATCH 02/10] Scaleton for compose navigation --- WooCommerce/build.gradle | 1 + .../ui/woopos/cart/WooPosCartNavigation.kt | 14 +++++++++++ .../ui/woopos/cart/WooPosCartScreen.kt | 9 +++++++ .../ui/woopos/cart/WooPosCartViewModel.kt | 12 ++++++++++ .../woopos/root/navigation/CheckoutGraph.kt | 24 +++++++++++++++++++ .../root/navigation/NavigationTransitions.kt | 18 ++++++++++++++ .../woopos/root/navigation/WooPosRootHost.kt | 23 ++++++++++++++++++ 7 files changed, 101 insertions(+) create mode 100644 WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartNavigation.kt create mode 100644 WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartScreen.kt create mode 100644 WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartViewModel.kt create mode 100644 WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/CheckoutGraph.kt create mode 100644 WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/NavigationTransitions.kt create mode 100644 WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosRootHost.kt diff --git a/WooCommerce/build.gradle b/WooCommerce/build.gradle index 0ed63ee61f3..9c01b73a0a8 100644 --- a/WooCommerce/build.gradle +++ b/WooCommerce/build.gradle @@ -405,6 +405,7 @@ dependencies { implementation 'androidx.compose.ui:ui-text-google-fonts' implementation 'androidx.navigation:navigation-compose' + implementation 'androidx.hilt:hilt-navigation-compose:1.2.0' implementation 'androidx.constraintlayout:constraintlayout-compose:1.0.1' implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2' implementation "com.google.accompanist:accompanist-swiperefresh:$composeAccompanistVersion" diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartNavigation.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartNavigation.kt new file mode 100644 index 00000000000..6b0b6ee862c --- /dev/null +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartNavigation.kt @@ -0,0 +1,14 @@ +package com.woocommerce.android.ui.woopos.cart + +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.navigation.NavGraphBuilder +import androidx.navigation.compose.composable + +internal const val CART_ROUTE = "cart" + +internal fun NavGraphBuilder.cartScreen() { + composable(CART_ROUTE) { + val viewModel: WooPosCartViewModel = hiltViewModel() + WooPosCartScreen(viewModel) + } +} diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartScreen.kt new file mode 100644 index 00000000000..0d36cf85924 --- /dev/null +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartScreen.kt @@ -0,0 +1,9 @@ +package com.woocommerce.android.ui.woopos.cart + +import androidx.compose.runtime.Composable + +@Composable +@Suppress("UNUSED_PARAMETER") +fun WooPosCartScreen(viewModel: WooPosCartViewModel) { + +} diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartViewModel.kt new file mode 100644 index 00000000000..eea6a2a14a2 --- /dev/null +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartViewModel.kt @@ -0,0 +1,12 @@ +package com.woocommerce.android.ui.woopos.cart + +import androidx.lifecycle.SavedStateHandle +import com.woocommerce.android.viewmodel.ScopedViewModel +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class WooPosCartViewModel @Inject constructor( + savedStateHandle: SavedStateHandle, +) : ScopedViewModel(savedStateHandle) { +} diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/CheckoutGraph.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/CheckoutGraph.kt new file mode 100644 index 00000000000..e5997c482b3 --- /dev/null +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/CheckoutGraph.kt @@ -0,0 +1,24 @@ +package com.woocommerce.android.ui.woopos.root.navigation + +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.compose.navigation +import com.woocommerce.android.ui.woopos.cart.CART_ROUTE +import com.woocommerce.android.ui.woopos.cart.cartScreen + +const val CHECKOUT_GRAPH_ROUTE = "checkout-graph" + +fun NavController.navigateToCheckoutGraph() { + navigate(CHECKOUT_GRAPH_ROUTE) +} + +fun NavGraphBuilder.checkoutGraph( + navController: NavController +) { + navigation( + startDestination = CART_ROUTE, + route = CHECKOUT_GRAPH_ROUTE, + ) { + cartScreen() + } +} diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/NavigationTransitions.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/NavigationTransitions.kt new file mode 100644 index 00000000000..34467fb8fde --- /dev/null +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/NavigationTransitions.kt @@ -0,0 +1,18 @@ +package com.woocommerce.android.ui.woopos.root.navigation + +import androidx.compose.animation.AnimatedContentTransitionScope +import androidx.compose.animation.EnterTransition +import androidx.compose.animation.ExitTransition +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.navigation.NavBackStackEntry + +fun AnimatedContentTransitionScope.screenSlideIn(): EnterTransition = + slideIntoContainer(AnimatedContentTransitionScope.SlideDirection.Start) + +fun screenFadeOut(): ExitTransition = fadeOut() + +fun screenFadeIn(): EnterTransition = fadeIn() + +fun AnimatedContentTransitionScope.screenSlideOut(): ExitTransition = + slideOutOfContainer(AnimatedContentTransitionScope.SlideDirection.End) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosRootHost.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosRootHost.kt new file mode 100644 index 00000000000..be0a450e8df --- /dev/null +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosRootHost.kt @@ -0,0 +1,23 @@ +package com.woocommerce.android.ui.woopos.root.navigation + +import androidx.compose.runtime.Composable +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.rememberNavController + +@Composable +fun WooPosRootHost() { + val rootController = rememberNavController() + + NavHost( + navController = rootController, + startDestination = CHECKOUT_GRAPH_ROUTE, + enterTransition = { screenSlideIn() }, + exitTransition = { screenFadeOut() }, + popEnterTransition = { screenFadeIn() }, + popExitTransition = { screenSlideOut() }, + ) { + checkoutGraph( + navController = rootController, + ) + } +} From fd843da022c4a974cf3f865486467fb23f6611e8 Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 14 May 2024 14:19:52 +0200 Subject: [PATCH 03/10] Checkout screen for testing --- .../ui/woopos/checkout/WooPosCheckoutNavigation.kt | 14 ++++++++++++++ .../ui/woopos/checkout/WooPosCheckoutScreen.kt | 9 +++++++++ .../ui/woopos/checkout/WooPosCheckoutViewModel.kt | 12 ++++++++++++ .../ui/woopos/root/navigation/CheckoutGraph.kt | 2 ++ 4 files changed, 37 insertions(+) create mode 100644 WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutNavigation.kt create mode 100644 WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutScreen.kt create mode 100644 WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutViewModel.kt diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutNavigation.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutNavigation.kt new file mode 100644 index 00000000000..fbec8e0ac54 --- /dev/null +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutNavigation.kt @@ -0,0 +1,14 @@ +package com.woocommerce.android.ui.woopos.checkout + +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.navigation.NavGraphBuilder +import androidx.navigation.compose.composable + +internal const val CHECKOUT_ROUTE = "checkout" + +internal fun NavGraphBuilder.checkoutScreen() { + composable(CHECKOUT_ROUTE) { + val viewModel: WooPosCheckoutViewModel = hiltViewModel() + WooPosCheckoutScreen(viewModel) + } +} diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutScreen.kt new file mode 100644 index 00000000000..a4403397aa7 --- /dev/null +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutScreen.kt @@ -0,0 +1,9 @@ +package com.woocommerce.android.ui.woopos.checkout + +import androidx.compose.runtime.Composable + +@Composable +@Suppress("UNUSED_PARAMETER") +fun WooPosCheckoutScreen(viewModel: WooPosCheckoutViewModel) { + +} diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutViewModel.kt new file mode 100644 index 00000000000..5f71c53e5cd --- /dev/null +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutViewModel.kt @@ -0,0 +1,12 @@ +package com.woocommerce.android.ui.woopos.checkout + +import androidx.lifecycle.SavedStateHandle +import com.woocommerce.android.viewmodel.ScopedViewModel +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class WooPosCheckoutViewModel @Inject constructor( + savedStateHandle: SavedStateHandle, +) : ScopedViewModel(savedStateHandle) { +} diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/CheckoutGraph.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/CheckoutGraph.kt index e5997c482b3..3a29ee70daa 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/CheckoutGraph.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/CheckoutGraph.kt @@ -5,6 +5,7 @@ import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.navigation import com.woocommerce.android.ui.woopos.cart.CART_ROUTE import com.woocommerce.android.ui.woopos.cart.cartScreen +import com.woocommerce.android.ui.woopos.checkout.checkoutScreen const val CHECKOUT_GRAPH_ROUTE = "checkout-graph" @@ -20,5 +21,6 @@ fun NavGraphBuilder.checkoutGraph( route = CHECKOUT_GRAPH_ROUTE, ) { cartScreen() + checkoutScreen() } } From 208cb59289f4f104656c1ccb5224bc063654dcac Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 14 May 2024 14:20:46 +0200 Subject: [PATCH 04/10] Better naming --- .../navigation/{CheckoutGraph.kt => WooPosMainFlowGraph.kt} | 6 +++--- ...igationTransitions.kt => WooPosNavigationTransitions.kt} | 0 .../android/ui/woopos/root/navigation/WooPosRootHost.kt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) rename WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/{CheckoutGraph.kt => WooPosMainFlowGraph.kt} (83%) rename WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/{NavigationTransitions.kt => WooPosNavigationTransitions.kt} (100%) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/CheckoutGraph.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosMainFlowGraph.kt similarity index 83% rename from WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/CheckoutGraph.kt rename to WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosMainFlowGraph.kt index 3a29ee70daa..31312ecef25 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/CheckoutGraph.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosMainFlowGraph.kt @@ -7,10 +7,10 @@ import com.woocommerce.android.ui.woopos.cart.CART_ROUTE import com.woocommerce.android.ui.woopos.cart.cartScreen import com.woocommerce.android.ui.woopos.checkout.checkoutScreen -const val CHECKOUT_GRAPH_ROUTE = "checkout-graph" +const val MAIN_GRAPH_ROUTE = "main-graph" fun NavController.navigateToCheckoutGraph() { - navigate(CHECKOUT_GRAPH_ROUTE) + navigate(MAIN_GRAPH_ROUTE) } fun NavGraphBuilder.checkoutGraph( @@ -18,7 +18,7 @@ fun NavGraphBuilder.checkoutGraph( ) { navigation( startDestination = CART_ROUTE, - route = CHECKOUT_GRAPH_ROUTE, + route = MAIN_GRAPH_ROUTE, ) { cartScreen() checkoutScreen() diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/NavigationTransitions.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosNavigationTransitions.kt similarity index 100% rename from WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/NavigationTransitions.kt rename to WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosNavigationTransitions.kt diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosRootHost.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosRootHost.kt index be0a450e8df..0709b338c4d 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosRootHost.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosRootHost.kt @@ -10,7 +10,7 @@ fun WooPosRootHost() { NavHost( navController = rootController, - startDestination = CHECKOUT_GRAPH_ROUTE, + startDestination = MAIN_GRAPH_ROUTE, enterTransition = { screenSlideIn() }, exitTransition = { screenFadeOut() }, popEnterTransition = { screenFadeIn() }, From 233393737a5ce98915594cf4d4025e020939e2e4 Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 14 May 2024 14:36:55 +0200 Subject: [PATCH 05/10] Navigation to checkout screen --- .../ui/woopos/cart/WooPosCartNavigation.kt | 10 ++++- .../ui/woopos/cart/WooPosCartScreen.kt | 41 ++++++++++++++++++- .../checkout/WooPosCheckoutNavigation.kt | 9 +++- .../android/ui/woopos/root/WooPosActivity.kt | 19 +++------ .../root/navigation/WooPosMainFlowGraph.kt | 7 +++- 5 files changed, 66 insertions(+), 20 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartNavigation.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartNavigation.kt index 6b0b6ee862c..9eb461c75a6 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartNavigation.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartNavigation.kt @@ -6,9 +6,15 @@ import androidx.navigation.compose.composable internal const val CART_ROUTE = "cart" -internal fun NavGraphBuilder.cartScreen() { +internal fun NavGraphBuilder.cartScreen( + onCheckoutClick: () -> Unit +) { composable(CART_ROUTE) { val viewModel: WooPosCartViewModel = hiltViewModel() - WooPosCartScreen(viewModel) + + WooPosCartScreen( + viewModel = viewModel, + onCheckoutClick = onCheckoutClick + ) } } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartScreen.kt index 0d36cf85924..7137ef8bd78 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartScreen.kt @@ -1,9 +1,48 @@ package com.woocommerce.android.ui.woopos.cart +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material.Button +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.PreviewLightDark @Composable @Suppress("UNUSED_PARAMETER") -fun WooPosCartScreen(viewModel: WooPosCartViewModel) { +fun WooPosCartScreen( + viewModel: WooPosCartViewModel, + onCheckoutClick: () -> Unit, +) { + WooPosCartScreen( + onButtonClicked = onCheckoutClick + ) +} +@Composable +private fun WooPosCartScreen(onButtonClicked: () -> Unit) { + Box( + Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + Column { + Text( + text = "Woo POS Cart", + style = MaterialTheme.typography.h3, + color = MaterialTheme.colors.primary, + ) + Button(onClick = onButtonClicked) { + Text("Checkout") + } + } + } +} + +@Composable +@PreviewLightDark +fun WooPosCartScreenPreview() { + WooPosCartScreen(onButtonClicked = {}) } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutNavigation.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutNavigation.kt index fbec8e0ac54..40b99618397 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutNavigation.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutNavigation.kt @@ -1,12 +1,17 @@ package com.woocommerce.android.ui.woopos.checkout import androidx.hilt.navigation.compose.hiltViewModel +import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.composable -internal const val CHECKOUT_ROUTE = "checkout" +private const val CHECKOUT_ROUTE = "checkout" -internal fun NavGraphBuilder.checkoutScreen() { +fun NavController.navigateToCheckoutScreen() { + navigate(CHECKOUT_ROUTE) +} + +fun NavGraphBuilder.checkoutScreen() { composable(CHECKOUT_ROUTE) { val viewModel: WooPosCheckoutViewModel = hiltViewModel() WooPosCheckoutScreen(viewModel) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/WooPosActivity.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/WooPosActivity.kt index 274c599943b..90d54ae8196 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/WooPosActivity.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/WooPosActivity.kt @@ -3,26 +3,17 @@ package com.woocommerce.android.ui.woopos.root import android.os.Bundle import androidx.activity.compose.setContent import androidx.appcompat.app.AppCompatActivity -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material.MaterialTheme -import androidx.compose.material.Text -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier +import com.woocommerce.android.ui.woopos.root.navigation.WooPosRootHost +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class WooPosActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { - Box( - Modifier.fillMaxSize(), - contentAlignment = Alignment.Center - ) { - Text( - text = "Woo POS!", - style = MaterialTheme.typography.h3, - color = MaterialTheme.colors.primary, - ) + MaterialTheme { + WooPosRootHost() } } } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosMainFlowGraph.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosMainFlowGraph.kt index 31312ecef25..9390b46dee1 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosMainFlowGraph.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosMainFlowGraph.kt @@ -6,6 +6,7 @@ import androidx.navigation.compose.navigation import com.woocommerce.android.ui.woopos.cart.CART_ROUTE import com.woocommerce.android.ui.woopos.cart.cartScreen import com.woocommerce.android.ui.woopos.checkout.checkoutScreen +import com.woocommerce.android.ui.woopos.checkout.navigateToCheckoutScreen const val MAIN_GRAPH_ROUTE = "main-graph" @@ -20,7 +21,11 @@ fun NavGraphBuilder.checkoutGraph( startDestination = CART_ROUTE, route = MAIN_GRAPH_ROUTE, ) { - cartScreen() + cartScreen( + onCheckoutClick = { + navController.navigateToCheckoutScreen() + } + ) checkoutScreen() } } From 2ccb76953518a3b5d0f13a3326ceae018d2f614e Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 14 May 2024 14:46:36 +0200 Subject: [PATCH 06/10] Mock of the checkout screen --- .../ui/woopos/cart/WooPosCartScreen.kt | 2 +- .../checkout/WooPosCheckoutNavigation.kt | 10 ++++- .../woopos/checkout/WooPosCheckoutScreen.kt | 38 ++++++++++++++++++- .../root/navigation/WooPosMainFlowGraph.kt | 12 ++---- 4 files changed, 50 insertions(+), 12 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartScreen.kt index 7137ef8bd78..61ec1263da5 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartScreen.kt @@ -30,7 +30,7 @@ private fun WooPosCartScreen(onButtonClicked: () -> Unit) { ) { Column { Text( - text = "Woo POS Cart", + text = "Cart", style = MaterialTheme.typography.h3, color = MaterialTheme.colors.primary, ) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutNavigation.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutNavigation.kt index 40b99618397..aeddfade088 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutNavigation.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutNavigation.kt @@ -11,9 +11,15 @@ fun NavController.navigateToCheckoutScreen() { navigate(CHECKOUT_ROUTE) } -fun NavGraphBuilder.checkoutScreen() { +fun NavGraphBuilder.checkoutScreen( + onBackClick: () -> Unit +) { composable(CHECKOUT_ROUTE) { val viewModel: WooPosCheckoutViewModel = hiltViewModel() - WooPosCheckoutScreen(viewModel) + + WooPosCheckoutScreen( + viewModel = viewModel, + onBackClick = onBackClick + ) } } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutScreen.kt index a4403397aa7..2848d2c918e 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutScreen.kt @@ -1,9 +1,45 @@ package com.woocommerce.android.ui.woopos.checkout +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material.Button +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.PreviewLightDark @Composable @Suppress("UNUSED_PARAMETER") -fun WooPosCheckoutScreen(viewModel: WooPosCheckoutViewModel) { +fun WooPosCheckoutScreen(viewModel: WooPosCheckoutViewModel, onBackClick: () -> Unit) { + WooPosCheckoutScreen( + onBackClick = onBackClick + ) +} +@Composable +private fun WooPosCheckoutScreen(onBackClick: () -> Unit) { + Box( + Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + Column { + Text( + text = "Checkout", + style = MaterialTheme.typography.h3, + color = MaterialTheme.colors.primary, + ) + Button(onClick = onBackClick) { + Text("To Cart") + } + } + } +} + +@Composable +@PreviewLightDark +fun WooPosCheckoutScreenPreview() { + WooPosCheckoutScreen(onBackClick = {}) } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosMainFlowGraph.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosMainFlowGraph.kt index 9390b46dee1..cd600a29857 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosMainFlowGraph.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosMainFlowGraph.kt @@ -10,10 +10,6 @@ import com.woocommerce.android.ui.woopos.checkout.navigateToCheckoutScreen const val MAIN_GRAPH_ROUTE = "main-graph" -fun NavController.navigateToCheckoutGraph() { - navigate(MAIN_GRAPH_ROUTE) -} - fun NavGraphBuilder.checkoutGraph( navController: NavController ) { @@ -22,10 +18,10 @@ fun NavGraphBuilder.checkoutGraph( route = MAIN_GRAPH_ROUTE, ) { cartScreen( - onCheckoutClick = { - navController.navigateToCheckoutScreen() - } + onCheckoutClick = navController::navigateToCheckoutScreen + ) + checkoutScreen( + onBackClick = navController::popBackStack ) - checkoutScreen() } } From f53e3c7b3cea92699fc67f04cd1f994eb9b2fb2d Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 14 May 2024 14:59:17 +0200 Subject: [PATCH 07/10] Fixed detekt complains --- .../woocommerce/android/ui/woopos/cart/WooPosCartViewModel.kt | 3 +-- .../android/ui/woopos/checkout/WooPosCheckoutViewModel.kt | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartViewModel.kt index eea6a2a14a2..0e106608c46 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartViewModel.kt @@ -8,5 +8,4 @@ import javax.inject.Inject @HiltViewModel class WooPosCartViewModel @Inject constructor( savedStateHandle: SavedStateHandle, -) : ScopedViewModel(savedStateHandle) { -} +) : ScopedViewModel(savedStateHandle) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutViewModel.kt index 5f71c53e5cd..33310239312 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutViewModel.kt @@ -8,5 +8,4 @@ import javax.inject.Inject @HiltViewModel class WooPosCheckoutViewModel @Inject constructor( savedStateHandle: SavedStateHandle, -) : ScopedViewModel(savedStateHandle) { -} +) : ScopedViewModel(savedStateHandle) From 67c023aea43a7a5a7ab6058b0ce636bae30e44ae Mon Sep 17 00:00:00 2001 From: Andrey Date: Wed, 15 May 2024 11:35:51 +0200 Subject: [PATCH 08/10] WooPosPreview annotation --- .../ui/woopos/cart/WooPosCartScreen.kt | 4 ++-- .../woopos/checkout/WooPosCheckoutScreen.kt | 6 ++--- .../woopos/util/WooPosComposeAnnotations.kt | 24 +++++++++++++++++++ 3 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/WooPosComposeAnnotations.kt diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartScreen.kt index 61ec1263da5..7080802376b 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cart/WooPosCartScreen.kt @@ -9,7 +9,7 @@ import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.tooling.preview.PreviewLightDark +import com.woocommerce.android.ui.woopos.util.WooPosPreview @Composable @Suppress("UNUSED_PARAMETER") @@ -42,7 +42,7 @@ private fun WooPosCartScreen(onButtonClicked: () -> Unit) { } @Composable -@PreviewLightDark +@WooPosPreview fun WooPosCartScreenPreview() { WooPosCartScreen(onButtonClicked = {}) } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutScreen.kt index 2848d2c918e..8b1c513e0b7 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutScreen.kt @@ -9,7 +9,7 @@ import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.tooling.preview.PreviewLightDark +import com.woocommerce.android.ui.woopos.util.WooPosPreview @Composable @Suppress("UNUSED_PARAMETER") @@ -39,7 +39,7 @@ private fun WooPosCheckoutScreen(onBackClick: () -> Unit) { } @Composable -@PreviewLightDark -fun WooPosCheckoutScreenPreview() { +@WooPosPreview +private fun WooPosCheckoutScreenPreview() { WooPosCheckoutScreen(onBackClick = {}) } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/WooPosComposeAnnotations.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/WooPosComposeAnnotations.kt new file mode 100644 index 00000000000..72d4815e2f2 --- /dev/null +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/WooPosComposeAnnotations.kt @@ -0,0 +1,24 @@ +package com.woocommerce.android.ui.woopos.util + +import android.content.res.Configuration +import androidx.compose.ui.tooling.preview.Devices +import androidx.compose.ui.tooling.preview.Preview + +@Retention(AnnotationRetention.BINARY) +@Target( + AnnotationTarget.ANNOTATION_CLASS, + AnnotationTarget.FUNCTION +) +@Preview( + name = "Tablet Big", + device = Devices.TABLET, + showSystemUi = true, + uiMode = Configuration.UI_MODE_NIGHT_YES or Configuration.UI_MODE_TYPE_NORMAL +) +@Preview( + name = "Tablet Small", + showSystemUi = true, + device = "spec:width=440dp,height=920dp,dpi=420,isRound=false,chinSize=0dp,orientation=landscape", + uiMode = Configuration.UI_MODE_TYPE_NORMAL +) +annotation class WooPosPreview From f19c30d0db65096b319bbfd34307e533bab497a5 Mon Sep 17 00:00:00 2001 From: Andrey Date: Wed, 15 May 2024 11:51:53 +0200 Subject: [PATCH 09/10] Fixed detekt complains --- .../android/ui/woopos/checkout/WooPosCheckoutScreen.kt | 2 +- ...sComposeAnnotations.kt => WooPosComposePreviewAnnotation.kt} | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) rename WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/{WooPosComposeAnnotations.kt => WooPosComposePreviewAnnotation.kt} (92%) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutScreen.kt index 8b1c513e0b7..d13ffe9e42f 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/checkout/WooPosCheckoutScreen.kt @@ -40,6 +40,6 @@ private fun WooPosCheckoutScreen(onBackClick: () -> Unit) { @Composable @WooPosPreview -private fun WooPosCheckoutScreenPreview() { +fun WooPosCheckoutScreenPreview() { WooPosCheckoutScreen(onBackClick = {}) } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/WooPosComposeAnnotations.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/WooPosComposePreviewAnnotation.kt similarity index 92% rename from WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/WooPosComposeAnnotations.kt rename to WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/WooPosComposePreviewAnnotation.kt index 72d4815e2f2..8d597908418 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/WooPosComposeAnnotations.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/WooPosComposePreviewAnnotation.kt @@ -1,3 +1,5 @@ +@file:Suppress("MatchingDeclarationName", "Filename") + package com.woocommerce.android.ui.woopos.util import android.content.res.Configuration From 1a5983d73e381f498e54d5855ba8030e2400a836 Mon Sep 17 00:00:00 2001 From: Andrey Date: Wed, 15 May 2024 14:56:24 +0200 Subject: [PATCH 10/10] Changed version of :hilt-navigation-compose used to keep using the current version --- WooCommerce/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WooCommerce/build.gradle b/WooCommerce/build.gradle index 9c01b73a0a8..cd4a444d9ba 100644 --- a/WooCommerce/build.gradle +++ b/WooCommerce/build.gradle @@ -405,7 +405,7 @@ dependencies { implementation 'androidx.compose.ui:ui-text-google-fonts' implementation 'androidx.navigation:navigation-compose' - implementation 'androidx.hilt:hilt-navigation-compose:1.2.0' + implementation 'androidx.hilt:hilt-navigation-compose:1.1.0' implementation 'androidx.constraintlayout:constraintlayout-compose:1.0.1' implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2' implementation "com.google.accompanist:accompanist-swiperefresh:$composeAccompanistVersion"