diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index fd5ab3ed2cb..28a7b13a55e 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -3,12 +3,14 @@ *** For entries which are touching the Android Wear app's, start entry with `[WEAR]` too. 22.1 ----- +- [*] Payments: Collect payment flow has been removed from the Payments Hub screen, as order creation flow with custom amount has replaced it [https://github.com/woocommerce/woocommerce-android/pull/13814] - [*] The order count badge is now fully visible for counts higher than 99 [https://github.com/woocommerce/woocommerce-android/pull/13825] - [*] Fix rare crash in the POS upon adding an item to the cart [https://github.com/woocommerce/woocommerce-android/pull/13838] 22.0.1 ----- - [**] Fixed a missing toolbar on tablets on the Receipt Preview screen [https://github.com/woocommerce/woocommerce-android/pull/13830] + 22.0 ----- - [*] Payments: display specific error for the cases when a reader with low battery level attempted to connect [https://github.com/woocommerce/woocommerce-android/pull/13642] diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/analytics/AnalyticsEvent.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/analytics/AnalyticsEvent.kt index 7f8d302a03c..a2a9e711e97 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/analytics/AnalyticsEvent.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/analytics/AnalyticsEvent.kt @@ -232,8 +232,6 @@ enum class AnalyticsEvent(override val siteless: Boolean = false) : IAnalyticsEv // -- Simple Payments SIMPLE_PAYMENTS_FLOW_NOTE_ADDED, SIMPLE_PAYMENTS_FLOW_TAXES_TOGGLED, - SIMPLE_PAYMENTS_MIGRATION_SHEET_ADD_CUSTOM_AMOUNT, - SIMPLE_PAYMENTS_MIGRATION_SHEET_SHOWN, // -- Upsell Banner FEATURE_CARD_SHOWN, @@ -531,7 +529,6 @@ enum class AnalyticsEvent(override val siteless: Boolean = false) : IAnalyticsEv SETTINGS_DOMAINS_TAPPED, // -- Payments Hub - PAYMENTS_HUB_COLLECT_PAYMENT_TAPPED, PAYMENTS_HUB_ORDER_CARD_READER_TAPPED, PAYMENTS_HUB_CARD_READER_MANUALS_TAPPED, PAYMENTS_HUB_MANAGE_CARD_READERS_TAPPED, diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/main/MainActivity.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/main/MainActivity.kt index 3e74b474818..2728a06c5ad 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/main/MainActivity.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/main/MainActivity.kt @@ -1073,7 +1073,7 @@ class MainActivity : binding.bottomNav.currentPosition = ORDERS binding.bottomNav.active(ORDERS.position) val action = OrderListFragmentDirections.actionOrderListFragmentToOrderCreationFragment( - OrderCreateEditViewModel.Mode.Creation(), + OrderCreateEditViewModel.Mode.Creation, null, null, ) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/OrderCreateEditFormFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/OrderCreateEditFormFragment.kt index e6ac61775dc..c3906e1e228 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/OrderCreateEditFormFragment.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/OrderCreateEditFormFragment.kt @@ -37,7 +37,6 @@ import com.woocommerce.android.R import com.woocommerce.android.databinding.FragmentOrderCreateEditFormBinding import com.woocommerce.android.databinding.LayoutOrderCreationCustomerInfoBinding import com.woocommerce.android.databinding.OrderCreationAdditionalInfoCollectionSectionBinding -import com.woocommerce.android.extensions.handleDialogNotice import com.woocommerce.android.extensions.handleDialogResult import com.woocommerce.android.extensions.handleResult import com.woocommerce.android.extensions.hide @@ -79,7 +78,6 @@ import com.woocommerce.android.ui.orders.creation.shipping.OrderShippingFragment import com.woocommerce.android.ui.orders.creation.shipping.OrderShippingFragment.Companion.UPDATE_SHIPPING_RESULT import com.woocommerce.android.ui.orders.creation.shipping.ShippingLineFormSection import com.woocommerce.android.ui.orders.creation.shipping.ShippingUpdateResult -import com.woocommerce.android.ui.orders.creation.simplepaymentsmigration.OrderCreateEditSimplePaymentsMigrationBottomSheetFragment import com.woocommerce.android.ui.orders.creation.taxes.rates.TaxRate import com.woocommerce.android.ui.orders.creation.taxes.rates.TaxRateSelectorFragment.Companion.KEY_SELECTED_TAX_RATE import com.woocommerce.android.ui.orders.creation.totals.OrderCreateEditTotalsView @@ -162,7 +160,7 @@ class OrderCreateEditFormFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { with(FragmentOrderCreateEditFormBinding.bind(view)) { setupObserversWith(this) - setupHandleResults(this) + setupHandleResults() initView() } handleCouponEditResult() @@ -1134,17 +1132,11 @@ class OrderCreateEditFormFragment : } } - private fun setupHandleResults(fragmentOrderCreateEditFormBinding: FragmentOrderCreateEditFormBinding) { + private fun setupHandleResults() { handleDialogResult( key = KEY_ORDER_STATUS_RESULT, entryId = R.id.orderCreationFragment ) { viewModel.onOrderStatusChanged(Order.Status.fromValue(it.newStatus)) } - handleDialogNotice( - key = OrderCreateEditSimplePaymentsMigrationBottomSheetFragment.KEY_ON_ADD_CUSTOM_AMOUNT_CLICKED_NOTICE, - entryId = R.id.orderCreationFragment - ) { - navigateToCustomAmountDialogWhenViewIsCreated(fragmentOrderCreateEditFormBinding.root) - } handleResult>(ProductSelectorFragment.PRODUCT_SELECTOR_RESULT) { viewModel.onProductsSelected(it) @@ -1273,15 +1265,6 @@ class OrderCreateEditFormFragment : } } - /** - * This is workaround, as in this point navigation component - * still didn't finish previous navigation, we have to make sure - * that to delay navigation to the dialog. As marker that we can navigate is the view is created - */ - private fun navigateToCustomAmountDialogWhenViewIsCreated(root: View) { - root.post { navigateToCustomAmountsDialog() } - } - private fun hideProgressDialog() { progressDialog?.dismiss() progressDialog = null diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/OrderCreateEditViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/OrderCreateEditViewModel.kt index 2f80ce484db..8d86990658d 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/OrderCreateEditViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/OrderCreateEditViewModel.kt @@ -218,7 +218,6 @@ class OrderCreateEditViewModel @Inject constructor( companion object { val EMPTY_BIG_DECIMAL = -Double.MAX_VALUE.toBigDecimal() const val MAX_PRODUCT_QUANTITY = 100_000 - const val DELAY_BEFORE_SHOWING_SIMPLE_PAYMENTS_MIGRATION_BOTTOM_SHEET = 500L private const val PARAMETERS_KEY = "parameters_key" private const val ORDER_CUSTOM_FEE_NAME = "order_custom_fee" const val DELAY_BEFORE_SHOWING_SHIPPING_FEEDBACK = 1000L @@ -436,13 +435,6 @@ class OrderCreateEditViewModel @Inject constructor( onTaxRateSelected(it) } } - - if (mode.indicateSimplePaymentsMigration) { - triggerEventWithDelay( - OrderCreateEditNavigationTarget.SimplePaymentsMigrationBottomSheet, - delay = DELAY_BEFORE_SHOWING_SIMPLE_PAYMENTS_MIGRATION_BOTTOM_SHEET, - ) - } } is Mode.Edit -> { @@ -2066,7 +2058,7 @@ class OrderCreateEditViewModel @Inject constructor( sealed class Mode : Parcelable { @Parcelize - data class Creation(val indicateSimplePaymentsMigration: Boolean = false) : Mode() + object Creation : Mode() @Parcelize data class Edit(val orderId: Long) : Mode() diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/navigation/OrderCreateEditNavigationTarget.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/navigation/OrderCreateEditNavigationTarget.kt index b3e86fb0ea1..9cba0abcd22 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/navigation/OrderCreateEditNavigationTarget.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/navigation/OrderCreateEditNavigationTarget.kt @@ -78,6 +78,4 @@ sealed class OrderCreateEditNavigationTarget : Event() { val giftCard: String ) : OrderCreateEditNavigationTarget() object AddGiftCard : OrderCreateEditNavigationTarget() - - data object SimplePaymentsMigrationBottomSheet : OrderCreateEditNavigationTarget() } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/navigation/OrderCreateEditNavigator.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/navigation/OrderCreateEditNavigator.kt index 65643bcdcb7..8dd5431c36a 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/navigation/OrderCreateEditNavigator.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/navigation/OrderCreateEditNavigator.kt @@ -103,11 +103,6 @@ object OrderCreateEditNavigator { ) } - is OrderCreateEditNavigationTarget.SimplePaymentsMigrationBottomSheet -> { - OrderCreateEditFormFragmentDirections - .actionOrderCreationFragmentToSimplePaymentsMigrationBottomSheetFragment() - } - is OrderCreateEditNavigationTarget.EditDiscount -> { OrderCreateEditFormFragmentDirections.actionOrderCreationToOrderCreationProductDiscountFragment( target.item, diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/simplepaymentsmigration/OrderCreateEditSimplePaymentsMigrationBottomSheetFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/simplepaymentsmigration/OrderCreateEditSimplePaymentsMigrationBottomSheetFragment.kt deleted file mode 100644 index 03018d9b955..00000000000 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/simplepaymentsmigration/OrderCreateEditSimplePaymentsMigrationBottomSheetFragment.kt +++ /dev/null @@ -1,42 +0,0 @@ -package com.woocommerce.android.ui.orders.creation.simplepaymentsmigration - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.compose.ui.platform.ComposeView -import androidx.compose.ui.platform.ViewCompositionStrategy -import com.woocommerce.android.analytics.AnalyticsEvent -import com.woocommerce.android.analytics.AnalyticsTracker -import com.woocommerce.android.extensions.navigateBackWithNotice -import com.woocommerce.android.ui.compose.theme.WooTheme -import com.woocommerce.android.widgets.WCBottomSheetDialogFragment - -class OrderCreateEditSimplePaymentsMigrationBottomSheetFragment : WCBottomSheetDialogFragment() { - companion object { - const val KEY_ON_ADD_CUSTOM_AMOUNT_CLICKED_NOTICE = "on_add_custom_amount_clicked_notice" - } - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View = ComposeView(requireContext()).apply { - setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) - setContent { - WooTheme { - OrderCreateEditSimplePaymentsMigrationBottomSheetScreen( - onAddCustomAmountClicked = { - AnalyticsTracker.track(AnalyticsEvent.SIMPLE_PAYMENTS_MIGRATION_SHEET_ADD_CUSTOM_AMOUNT) - navigateBackWithNotice(key = KEY_ON_ADD_CUSTOM_AMOUNT_CLICKED_NOTICE) - } - ) - } - } - } - - override fun onResume() { - super.onResume() - AnalyticsTracker.track(AnalyticsEvent.SIMPLE_PAYMENTS_MIGRATION_SHEET_SHOWN) - } -} diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/simplepaymentsmigration/OrderCreateEditSimplePaymentsMigrationBottomSheetScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/simplepaymentsmigration/OrderCreateEditSimplePaymentsMigrationBottomSheetScreen.kt deleted file mode 100644 index 43de01fdc64..00000000000 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/simplepaymentsmigration/OrderCreateEditSimplePaymentsMigrationBottomSheetScreen.kt +++ /dev/null @@ -1,111 +0,0 @@ -package com.woocommerce.android.ui.orders.creation.simplepaymentsmigration - -import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.foundation.verticalScroll -import androidx.compose.material.MaterialTheme -import androidx.compose.material.Surface -import androidx.compose.material.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.res.colorResource -import androidx.compose.ui.res.dimensionResource -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.res.vectorResource -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.tooling.preview.PreviewScreenSizes -import com.woocommerce.android.R -import com.woocommerce.android.ui.compose.component.BottomSheetHandle -import com.woocommerce.android.ui.compose.component.WCColoredButton -import com.woocommerce.android.ui.compose.preview.LightDarkThemePreviews -import com.woocommerce.android.ui.compose.theme.WooTheme - -@Composable -fun OrderCreateEditSimplePaymentsMigrationBottomSheetScreen( - onAddCustomAmountClicked: () -> Unit, -) { - Surface( - shape = RoundedCornerShape( - topStart = dimensionResource(id = R.dimen.minor_100), - topEnd = dimensionResource(id = R.dimen.minor_100) - ) - ) { - Column( - modifier = Modifier - .verticalScroll(rememberScrollState()) - .padding(dimensionResource(id = R.dimen.major_100)) - .fillMaxWidth(), - horizontalAlignment = Alignment.CenterHorizontally, - ) { - Spacer(modifier = Modifier.height(dimensionResource(id = R.dimen.minor_100))) - BottomSheetHandle(Modifier.align(Alignment.CenterHorizontally)) - Spacer(modifier = Modifier.height(dimensionResource(id = R.dimen.minor_100))) - - Image( - imageVector = ImageVector.vectorResource(R.drawable.ic_bell_64dp), - contentDescription = stringResource(id = R.string.order_creation_simple_payment_migration_title), - ) - - Spacer(modifier = Modifier.height(dimensionResource(id = R.dimen.major_150))) - - Text( - text = stringResource(id = R.string.order_creation_simple_payment_migration_title), - style = MaterialTheme.typography.h5, - textAlign = TextAlign.Center, - fontWeight = FontWeight.Bold, - ) - - Spacer(modifier = Modifier.height(dimensionResource(id = R.dimen.major_100))) - - Text( - text = stringResource(id = R.string.order_creation_simple_payment_migration_message_one), - style = MaterialTheme.typography.body1, - textAlign = TextAlign.Center, - ) - - Spacer(modifier = Modifier.height(dimensionResource(id = R.dimen.major_150))) - - Text( - text = stringResource(id = R.string.order_creation_simple_payment_migration_message_two), - style = MaterialTheme.typography.body1, - textAlign = TextAlign.Center, - color = colorResource(R.color.color_surface_variant), - ) - - Spacer(modifier = Modifier.height(dimensionResource(id = R.dimen.major_150))) - - WCColoredButton( - modifier = Modifier.fillMaxWidth(), - onClick = onAddCustomAmountClicked, - text = stringResource(id = R.string.order_creation_simple_payment_migration_button), - ) - } - } -} - -@LightDarkThemePreviews -@PreviewScreenSizes -@Composable -fun PreviewOrderCreateEditSimplePaymentsMigrationBottomSheetScreen() { - WooTheme { - Box( - contentAlignment = Alignment.BottomCenter, - modifier = Modifier.fillMaxSize() - ) { - OrderCreateEditSimplePaymentsMigrationBottomSheetScreen( - onAddCustomAmountClicked = {}, - ) - } - } -} diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/list/OrderListFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/list/OrderListFragment.kt index 0847a98bb36..40a6b2872a7 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/list/OrderListFragment.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/list/OrderListFragment.kt @@ -32,7 +32,6 @@ import com.google.android.material.snackbar.Snackbar import com.google.android.material.transition.MaterialFadeThrough import com.woocommerce.android.AppConstants import com.woocommerce.android.AppUrls -import com.woocommerce.android.FeedbackPrefs import com.woocommerce.android.NavGraphMainDirections import com.woocommerce.android.R import com.woocommerce.android.analytics.AnalyticsEvent @@ -113,9 +112,6 @@ class OrderListFragment : @Inject internal lateinit var currencyFormatter: CurrencyFormatter - @Inject - lateinit var feedbackPrefs: FeedbackPrefs - private var tracker: SelectionTracker? = null private var actionMode: ActionMode? = null private val selectionPredicate = MutableMultipleSelectionPredicate( @@ -662,9 +658,6 @@ class OrderListFragment : ) is OrderListViewModel.OrderListEvent.RetryLoadingOrders -> refreshOrders() - is OrderListViewModel.OrderListEvent.OpenOrderCreationWithSimplePaymentsMigration -> - openOrderCreationFragment(indicateSimplePaymentsMigration = true) - is OrderListViewModel.OrderListEvent.ShowUpdateStatusDialog -> { showBulkUpdateStatusDialog(event.currentStatus, event.orderStatusList) } @@ -930,13 +923,12 @@ class OrderListFragment : private fun openOrderCreationFragment( code: String? = null, barcodeFormat: BarcodeFormat? = null, - indicateSimplePaymentsMigration: Boolean = false, ) { OrderDurationRecorder.startRecording() AnalyticsTracker.track(AnalyticsEvent.ORDERS_ADD_NEW) findNavController().navigateSafely( OrderListFragmentDirections.actionOrderListFragmentToOrderCreationFragment( - OrderCreateEditViewModel.Mode.Creation(indicateSimplePaymentsMigration), + OrderCreateEditViewModel.Mode.Creation, code, barcodeFormat, ) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/list/OrderListViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/list/OrderListViewModel.kt index 1571817ac00..afbd2186374 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/list/OrderListViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/list/OrderListViewModel.kt @@ -64,7 +64,6 @@ import com.woocommerce.android.viewmodel.LiveDataDelegate import com.woocommerce.android.viewmodel.MultiLiveEvent.Event import com.woocommerce.android.viewmodel.ResourceProvider import com.woocommerce.android.viewmodel.ScopedViewModel -import com.woocommerce.android.viewmodel.navArgs import com.woocommerce.android.widgets.WCEmptyView.EmptyViewType import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow @@ -121,8 +120,6 @@ class OrderListViewModel @Inject constructor( private val shouldUpdateOrdersList: ShouldUpdateOrdersList, private val observeOrdersListLastUpdate: ObserveOrdersListLastUpdate ) : ScopedViewModel(savedState), LifecycleOwner { - private val navArgs: OrderListFragmentArgs by savedState.navArgs() - companion object { const val BULK_UPDATE_COUNT_LIMIT = 100 } @@ -244,16 +241,6 @@ class OrderListViewModel @Inject constructor( orderListTransactionLauncher.onListFetched() checkChaChingSoundSettings() } - - when (navArgs.mode) { - Mode.START_ORDER_CREATION_WITH_SIMPLE_PAYMENTS_MIGRATION -> { - triggerEvent(OrderListEvent.OpenOrderCreationWithSimplePaymentsMigration) - } - - Mode.STANDARD -> { - // stay on the screen - } - } } fun loadOrders() { @@ -1073,8 +1060,6 @@ class OrderListViewModel @Inject constructor( data object RetryLoadingOrders : OrderListEvent() - data object OpenOrderCreationWithSimplePaymentsMigration : OrderListEvent() - data class ShowUpdateStatusDialog( val currentStatus: String, val orderStatusList: Array @@ -1121,8 +1106,4 @@ class OrderListViewModel @Inject constructor( enum class OrderListState { Selecting, Browsing } } - - enum class Mode { - STANDARD, START_ORDER_CREATION_WITH_SIMPLE_PAYMENTS_MIGRATION - } } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/hub/PaymentsHubFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/hub/PaymentsHubFragment.kt index b68bcd39250..c931a963750 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/hub/PaymentsHubFragment.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/hub/PaymentsHubFragment.kt @@ -22,7 +22,6 @@ import com.woocommerce.android.extensions.navigateSafely import com.woocommerce.android.ui.base.BaseFragment import com.woocommerce.android.ui.base.UIMessageResolver import com.woocommerce.android.ui.main.AppBarStatus -import com.woocommerce.android.ui.orders.list.OrderListViewModel import com.woocommerce.android.ui.payments.cardreader.onboarding.CardReaderFlowParam import com.woocommerce.android.ui.payments.cardreader.onboarding.CardReaderOnboardingParams import com.woocommerce.android.ui.payments.hub.PaymentsHubViewModel.PaymentsHubEvents.NavigateToTapToPaySummaryScreen @@ -113,13 +112,6 @@ class PaymentsHubFragment : BaseFragment(R.layout.fragment_payments_hub) { ) ) } - is PaymentsHubViewModel.PaymentsHubEvents.NavigateToOrderCreationScreen -> { - findNavController().navigate( - PaymentsHubFragmentDirections.actionCardReaderHubFragmentToOrderListFragment( - mode = OrderListViewModel.Mode.START_ORDER_CREATION_WITH_SIMPLE_PAYMENTS_MIGRATION - ) - ) - } is PaymentsHubViewModel.PaymentsHubEvents.OpenGenericWebView -> { ChromeCustomTabUtils.launchUrl( context = requireContext(), diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/hub/PaymentsHubViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/hub/PaymentsHubViewModel.kt index 8e7c56c6402..d4f7f6e1283 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/hub/PaymentsHubViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/hub/PaymentsHubViewModel.kt @@ -88,7 +88,7 @@ class PaymentsHubViewModel @Inject constructor( R.string.card_reader_enable_pay_in_person_description, containsHtml = true ), - index = 4, + index = 2, isChecked = false, onToggled = { (::onCashOnDeliveryToggled)(it) }, onLearnMoreClicked = ::onLearnMoreCodClicked @@ -181,36 +181,26 @@ class PaymentsHubViewModel @Inject constructor( cashOnDeliveryItem: ToggleableListItem ): List = mutableListOf( PayoutSummaryListItem(index = 0), - HeaderItem( - label = UiStringRes(R.string.card_reader_hub_actions_category_header), - index = 1 - ), - NonToggleableListItem( - icon = R.drawable.ic_gridicons_money_on_surface, - label = UiStringRes(R.string.card_reader_hub_collect_payment), - index = 2, - onClick = ::onCollectPaymentClicked - ), HeaderItem( label = UiStringRes(R.string.card_reader_settings_header), - index = 3, + index = 1, ), cashOnDeliveryItem, HeaderItem( label = UiStringRes(R.string.card_reader_card_readers_header), - index = 9, + index = 7, ), NonToggleableListItem( icon = R.drawable.ic_shopping_cart, label = UiStringRes(R.string.card_reader_purchase_card_reader), - index = 10, + index = 8, onClick = ::onPurchaseCardReaderClicked ), NonToggleableListItem( icon = R.drawable.ic_manage_card_reader, label = UiStringRes(R.string.card_reader_manage_card_reader), isEnabled = isOnboardingComplete, - index = 11, + index = 9, onClick = ::onManageCardReaderClicked ) ).apply { @@ -224,7 +214,7 @@ class PaymentsHubViewModel @Inject constructor( add( HeaderItem( label = UiStringRes(R.string.card_reader_tap_to_pay_header), - index = 6 + index = 4 ) ) add( @@ -232,7 +222,7 @@ class PaymentsHubViewModel @Inject constructor( icon = R.drawable.ic_baseline_contactless, label = UiStringRes(R.string.card_reader_test_tap_to_pay), description = UiStringRes(R.string.card_reader_tap_to_pay_description), - index = 7, + index = 5, onClick = ::onTapToPayClicked, iconBadge = R.drawable.ic_badge_new, ) @@ -241,7 +231,7 @@ class PaymentsHubViewModel @Inject constructor( NonToggleableListItem( icon = R.drawable.ic_tintable_info_outline_24dp, label = UiStringRes(R.string.card_reader_about_tap_to_pay), - index = 8, + index = 6, onClick = { onAboutTTPClicked(countryConfig as CardReaderConfigForSupportedCountry) }, ) ) @@ -254,7 +244,7 @@ class PaymentsHubViewModel @Inject constructor( NonToggleableListItem( icon = R.drawable.ic_card_reader_manual, label = UiStringRes(R.string.settings_card_reader_manuals), - index = 12, + index = 10, onClick = { onCardReaderManualsClicked(countryConfig) } ) ) @@ -266,7 +256,7 @@ class PaymentsHubViewModel @Inject constructor( LearnMoreListItem( icon = R.drawable.ic_info_outline_20dp, label = UiStringRes(R.string.card_reader_detail_learn_more, containsHtml = true), - index = 13, + index = 11, onClick = ::onLearnMoreIppClicked ) ) @@ -276,7 +266,7 @@ class PaymentsHubViewModel @Inject constructor( NonToggleableListItem( icon = R.drawable.ic_payment_provider, label = UiStringRes(R.string.card_reader_manage_payment_provider), - index = 5, + index = 3, onClick = ::onCardReaderPaymentProviderClicked ) @@ -327,11 +317,6 @@ class PaymentsHubViewModel @Inject constructor( ) } - private fun onCollectPaymentClicked() { - trackEvent(AnalyticsEvent.PAYMENTS_HUB_COLLECT_PAYMENT_TAPPED) - triggerEvent(PaymentsHubEvents.NavigateToOrderCreationScreen) - } - private fun onManageCardReaderClicked() { trackEvent(AnalyticsEvent.PAYMENTS_HUB_MANAGE_CARD_READERS_TAPPED) triggerEvent(PaymentsHubEvents.NavigateToCardReaderDetail(arguments.cardReaderFlowParam)) @@ -531,7 +516,6 @@ class PaymentsHubViewModel @Inject constructor( @StringRes val titleRes: Int ) : PaymentsHubEvents() - data object NavigateToOrderCreationScreen : PaymentsHubEvents() data object NavigateToTapToPaySummaryScreen : PaymentsHubEvents() data class NavigateToCardReaderManualsScreen( val countryConfig: CardReaderConfigForSupportedCountry diff --git a/WooCommerce/src/main/res/navigation/nav_graph_main.xml b/WooCommerce/src/main/res/navigation/nav_graph_main.xml index 1fdd3d15574..d7e64a12944 100644 --- a/WooCommerce/src/main/res/navigation/nav_graph_main.xml +++ b/WooCommerce/src/main/res/navigation/nav_graph_main.xml @@ -103,10 +103,6 @@ android:name="orderId" android:defaultValue="-1L" app:argType="long" /> - diff --git a/WooCommerce/src/main/res/navigation/nav_graph_order_creations.xml b/WooCommerce/src/main/res/navigation/nav_graph_order_creations.xml index 96e7e5c9f47..975307cf52e 100644 --- a/WooCommerce/src/main/res/navigation/nav_graph_order_creations.xml +++ b/WooCommerce/src/main/res/navigation/nav_graph_order_creations.xml @@ -26,11 +26,6 @@ app:destination="@+id/autoTaxRateDetailsFragment" app:enterAnim="@anim/slide_up" app:exitAnim="@anim/slide_down" /> - - - - - Recalculate Expand collapse order totals Shipping Tax - Collect Payment \nhas moved - We’ve combined payment collection with order creation, making it more accessible and more powerful. - To set a payment amount, add a custom amount to your new order. - Add a Custom Amount This user is a guest, and guests can\'t be used for filtering orders. Guest @@ -1560,8 +1556,6 @@ Card Reader Hub --> Payments - Collect Payment - ACTIONS Manage Card Reader SETTINGS Pay In Person diff --git a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/orders/OrderListViewModelTest.kt b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/orders/OrderListViewModelTest.kt index 869268e52bf..93b0df5ee32 100644 --- a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/orders/OrderListViewModelTest.kt +++ b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/orders/OrderListViewModelTest.kt @@ -150,8 +150,8 @@ class OrderListViewModelTest : BaseUnitTest() { viewModel = createViewModel() } - private fun createViewModel(mode: OrderListViewModel.Mode = OrderListViewModel.Mode.STANDARD) = OrderListViewModel( - savedState = OrderListFragmentArgs(mode = mode).toSavedStateHandle(), + private fun createViewModel() = OrderListViewModel( + savedState = OrderListFragmentArgs().toSavedStateHandle(), dispatchers = coroutinesTestRule.testDispatchers, orderListRepository = orderListRepository, orderDetailRepository = orderDetailRepository, @@ -645,33 +645,6 @@ class OrderListViewModelTest : BaseUnitTest() { // then assertThat(shouldDisplayTroubleshootingBanner).isTrue } - - @Test - fun `given start order creation mode, when view model created, then OpenOrderCreationWithSimplePaymentsMigration emitted`() = - testBlocking { - // GIVEN - val mode = OrderListViewModel.Mode.START_ORDER_CREATION_WITH_SIMPLE_PAYMENTS_MIGRATION - - // WHEN - viewModel = createViewModel(mode = mode) - - // THEN - assertThat(viewModel.event.value).isEqualTo(OrderListEvent.OpenOrderCreationWithSimplePaymentsMigration) - } - - @Test - fun `given standard mode, when view model created, then OpenOrderCreationWithSimplePaymentsMigration is not emitted`() = - testBlocking { - // GIVEN - val mode = OrderListViewModel.Mode.STANDARD - - // WHEN - viewModel = createViewModel(mode = mode) - - // THEN - assertThat(viewModel.event.value).isNull() - } - // region barcode scanner @Test diff --git a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/orders/creation/CreationFocusedOrderCreateEditViewModelTest.kt b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/orders/creation/CreationFocusedOrderCreateEditViewModelTest.kt index de256b01a61..df5d5fd307d 100644 --- a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/orders/creation/CreationFocusedOrderCreateEditViewModelTest.kt +++ b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/orders/creation/CreationFocusedOrderCreateEditViewModelTest.kt @@ -90,7 +90,7 @@ import kotlin.test.assertNotNull @ExperimentalCoroutinesApi class CreationFocusedOrderCreateEditViewModelTest : UnifiedOrderEditViewModelTest() { - override val mode: Mode = Creation() + override val mode: Mode = Creation override val sku: String = "" override val barcodeFormat: BarcodeFormat = BarcodeFormat.FormatUPCA override val tracksFlow: String = VALUE_FLOW_CREATION @@ -1277,7 +1277,7 @@ class CreationFocusedOrderCreateEditViewModelTest : UnifiedOrderEditViewModelTes fun `given sku, when view model init, then fetch product information`() { testBlocking { val navArgs = OrderCreateEditFormFragmentArgs( - Creation(), + Creation, "123", BarcodeFormat.FormatUPCA, ).toSavedStateHandle() @@ -1305,7 +1305,7 @@ class CreationFocusedOrderCreateEditViewModelTest : UnifiedOrderEditViewModelTes fun `given sku, when view model init, then display progress indicator`() { testBlocking { val navArgs = OrderCreateEditFormFragmentArgs( - Creation(), + Creation, "123", BarcodeFormat.FormatUPCA, ).toSavedStateHandle() @@ -1334,7 +1334,7 @@ class CreationFocusedOrderCreateEditViewModelTest : UnifiedOrderEditViewModelTes fun `given empty sku, when view model init, then do not fetch product information`() { testBlocking { val navArgs = OrderCreateEditFormFragmentArgs( - Creation(), + Creation, "", null, ).toSavedStateHandle() @@ -1362,7 +1362,7 @@ class CreationFocusedOrderCreateEditViewModelTest : UnifiedOrderEditViewModelTes fun `given scanning initiated from the order list screen, when product search via sku succeeds, then track event with proper source`() { testBlocking { val navArgs = OrderCreateEditFormFragmentArgs( - Creation(), + Creation, "12345", BarcodeFormat.FormatUPCA, ).toSavedStateHandle() @@ -1407,7 +1407,7 @@ class CreationFocusedOrderCreateEditViewModelTest : UnifiedOrderEditViewModelTes fun `given scanning initiated from the order list screen, when product search via sku fails, then track event with proper source`() { testBlocking { val navArgs = OrderCreateEditFormFragmentArgs( - Creation(), + Creation, "12345", BarcodeFormat.FormatUPCA, ).toSavedStateHandle() @@ -1447,7 +1447,7 @@ class CreationFocusedOrderCreateEditViewModelTest : UnifiedOrderEditViewModelTes fun `given variable product from order list screen, when product added via scanning, then track correct source`() { testBlocking { val navArgs = OrderCreateEditFormFragmentArgs( - Creation(), + Creation, "12345", BarcodeFormat.FormatUPCA, ).toSavedStateHandle() @@ -1496,7 +1496,7 @@ class CreationFocusedOrderCreateEditViewModelTest : UnifiedOrderEditViewModelTes fun `given non-variable product from order list screen, when product added via scanning, then track correct source`() { testBlocking { val navArgs = OrderCreateEditFormFragmentArgs( - Creation(), + Creation, "12345", BarcodeFormat.FormatUPCA, ).toSavedStateHandle() diff --git a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/orders/creation/totals/OrderCreateEditTotalsHelperTest.kt b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/orders/creation/totals/OrderCreateEditTotalsHelperTest.kt index db8bcb0dba5..85f34299187 100644 --- a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/orders/creation/totals/OrderCreateEditTotalsHelperTest.kt +++ b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/orders/creation/totals/OrderCreateEditTotalsHelperTest.kt @@ -130,7 +130,7 @@ class OrderCreateEditTotalsHelperTest { // WHEN val actual = helper.mapToPaymentTotalsState( localOrder, - OrderCreateEditViewModel.Mode.Creation(), + OrderCreateEditViewModel.Mode.Creation, OrderCreateEditViewModel.ViewState( taxBasedOnSettingLabel = taxBasedOnSettingLabel ), @@ -200,7 +200,7 @@ class OrderCreateEditTotalsHelperTest { // WHEN val actual = helper.mapToPaymentTotalsState( localOrder, - OrderCreateEditViewModel.Mode.Creation(), + OrderCreateEditViewModel.Mode.Creation, OrderCreateEditViewModel.ViewState(), {}, {}, @@ -232,7 +232,7 @@ class OrderCreateEditTotalsHelperTest { // WHEN val actual = helper.mapToPaymentTotalsState( localOrder, - OrderCreateEditViewModel.Mode.Creation(), + OrderCreateEditViewModel.Mode.Creation, OrderCreateEditViewModel.ViewState(), {}, {}, @@ -266,7 +266,7 @@ class OrderCreateEditTotalsHelperTest { // WHEN val actual = helper.mapToPaymentTotalsState( localOrder, - OrderCreateEditViewModel.Mode.Creation(), + OrderCreateEditViewModel.Mode.Creation, OrderCreateEditViewModel.ViewState(), {}, {}, diff --git a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/hub/PaymentsHubViewModelTest.kt b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/hub/PaymentsHubViewModelTest.kt index b06a04bd29f..00b83fdd998 100644 --- a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/hub/PaymentsHubViewModelTest.kt +++ b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/hub/PaymentsHubViewModelTest.kt @@ -109,14 +109,6 @@ class PaymentsHubViewModelTest : BaseUnitTest() { initViewModel() } - @Test - fun `when screen shown, then collect payments row present`() { - assertThat((viewModel.viewStateData.getOrAwaitValue()).rows) - .anyMatch { - it.label == UiStringRes(R.string.card_reader_hub_collect_payment) - } - } - @Test fun `when screen shown, then manage card reader row present`() { assertThat((viewModel.viewStateData.getOrAwaitValue()).rows) @@ -141,14 +133,6 @@ class PaymentsHubViewModelTest : BaseUnitTest() { } } - @Test - fun `when screen shown, then collect payment row icon is present`() { - assertThat((viewModel.viewStateData.getOrAwaitValue()).rows) - .anyMatch { - it.icon == R.drawable.ic_gridicons_money_on_surface - } - } - @Test fun `when screen shown, then purchase card reader row icon is present`() { assertThat((viewModel.viewStateData.getOrAwaitValue()).rows) @@ -187,15 +171,6 @@ class PaymentsHubViewModelTest : BaseUnitTest() { } } - @Test - fun `when user clicks on collect payment, then collect payment event tracked`() { - (viewModel.viewStateData.getOrAwaitValue()).rows.find { - it.label == UiStringRes(R.string.card_reader_hub_collect_payment) - }!!.onClick!!.invoke() - - verify(analyticsTrackerWrapper).track(AnalyticsEvent.PAYMENTS_HUB_COLLECT_PAYMENT_TAPPED) - } - @Test fun `when user clicks on manage card reader, then app navigates to card reader detail screen`() { (viewModel.viewStateData.getOrAwaitValue()).rows.find { @@ -618,25 +593,6 @@ class PaymentsHubViewModelTest : BaseUnitTest() { ).isTrue() } - @Test - fun `given onboarding error, when screen shown, then collect payment row is enabled`() = - testBlocking { - whenever(cardReaderChecker.getOnboardingState()).thenReturn( - mock() - ) - - initViewModel() - - assertThat( - ( - viewModel.viewStateData.getOrAwaitValue().rows.find { - it.label == UiStringRes(R.string.card_reader_hub_collect_payment) - } - as NonToggleableListItem - ).isEnabled - ).isTrue() - } - @Test fun `given onboarding error, when screen shown, then card reader manual is enabled`() = testBlocking { @@ -696,25 +652,6 @@ class PaymentsHubViewModelTest : BaseUnitTest() { ) } - @Test - fun `given pending requirements status, when screen shown, then collect payment row is enabled`() = - testBlocking { - whenever(cardReaderChecker.getOnboardingState()).thenReturn( - mock() - ) - - initViewModel() - - assertThat( - ( - viewModel.viewStateData.getOrAwaitValue().rows.find { - it.label == UiStringRes(R.string.card_reader_hub_collect_payment) - } - as NonToggleableListItem - ).isEnabled - ).isTrue() - } - @Test fun `given pending requirements status, when screen shown, then order card reader row is enabled`() = testBlocking { @@ -799,7 +736,7 @@ class PaymentsHubViewModelTest : BaseUnitTest() { assertThat((viewModel.viewStateData.getOrAwaitValue()).rows) .anyMatch { it is PaymentsHubViewState.ListItem.HeaderItem && - it.index == 3 && + it.index == 1 && it.label == UiStringRes(R.string.card_reader_settings_header) } } @@ -1364,7 +1301,7 @@ class PaymentsHubViewModelTest : BaseUnitTest() { // THEN assertThat((viewModel.viewStateData.getOrAwaitValue()).rows).anyMatch { it is PaymentsHubViewState.ListItem.HeaderItem && - it.index == 6 && + it.index == 4 && it.label == UiStringRes(R.string.card_reader_tap_to_pay_header) } assertThat((viewModel.viewStateData.getOrAwaitValue()).rows).anyMatch { @@ -1372,7 +1309,7 @@ class PaymentsHubViewModelTest : BaseUnitTest() { it.icon == R.drawable.ic_baseline_contactless && it.label == UiStringRes(R.string.card_reader_test_tap_to_pay) && it.description == UiStringRes(R.string.card_reader_tap_to_pay_description) && - it.index == 7 && + it.index == 5 && it.iconBadge == R.drawable.ic_badge_new } } @@ -1396,7 +1333,7 @@ class PaymentsHubViewModelTest : BaseUnitTest() { it.icon == R.drawable.ic_tintable_info_outline_24dp && it.label == UiStringRes(R.string.card_reader_about_tap_to_pay) && it.description == null && - it.index == 8 && + it.index == 6 && it.iconBadge == null } } @@ -1469,7 +1406,7 @@ class PaymentsHubViewModelTest : BaseUnitTest() { // THEN val rows = (viewModel.viewStateData.getOrAwaitValue()).rows - assertThat(rows.map { it.index }).containsExactly(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13) + assertThat(rows.map { it.index }).containsExactly(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) } @Test @@ -1607,7 +1544,7 @@ class PaymentsHubViewModelTest : BaseUnitTest() { ) ) assertThat(learnMoreListItems[0].icon).isEqualTo(R.drawable.ic_info_outline_20dp) - assertThat(learnMoreListItems[0].index).isEqualTo(13) + assertThat(learnMoreListItems[0].index).isEqualTo(11) } @Test