diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index d3e82b11a09..daff5d0fe22 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -3,6 +3,8 @@ *** For entries which are touching the Android Wear app's, start entry with `[WEAR]` too. 21.6 ----- +- [*] Updated tablet detection logic to consider both width and height dimensions, enhancing compatibility with larger phones and tablets, particularly in landscape mode [https://github.com/woocommerce/woocommerce-android/pull/13228] + - [**] The UK customers have access to the POS now [https://github.com/woocommerce/woocommerce-android/pull/13386] - [Internal] [*] Fixed a bug that could lead to a crash when formatting dates and times [https://github.com/woocommerce/woocommerce-android/pull/13393] diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/analytics/AnalyticsExt.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/analytics/AnalyticsExt.kt index 4c03b335c67..f05d90d9e20 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/analytics/AnalyticsExt.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/analytics/AnalyticsExt.kt @@ -3,23 +3,23 @@ package com.woocommerce.android.analytics import android.content.Context import com.woocommerce.android.analytics.AnalyticsTracker.Companion.VALUE_DEVICE_TYPE_COMPACT import com.woocommerce.android.analytics.AnalyticsTracker.Companion.VALUE_DEVICE_TYPE_REGULAR -import com.woocommerce.android.extensions.WindowSizeClass -import com.woocommerce.android.extensions.windowSizeClass +import com.woocommerce.android.extensions.isTwoPanesShouldBeUsed val Context.deviceTypeToAnalyticsString: String get() = buildAnalyticsDeviceTypeValue( - IsScreenLargerThanCompactValue(value = windowSizeClass != WindowSizeClass.Compact) + IsScreenInTwoPaneLayout(value = isTwoPanesShouldBeUsed) ) -val IsScreenLargerThanCompactValue.deviceTypeToAnalyticsString: String +val IsScreenInTwoPaneLayout.deviceTypeToAnalyticsString: String get() = buildAnalyticsDeviceTypeValue(this) -private fun buildAnalyticsDeviceTypeValue(isScreenSizeLargerThanCompact: IsScreenLargerThanCompactValue) = - if (isScreenSizeLargerThanCompact.value) { - VALUE_DEVICE_TYPE_REGULAR +private fun buildAnalyticsDeviceTypeValue(isScreenInTwoPaneLayout: IsScreenInTwoPaneLayout) = + // Keeping the value as it is to maintain backward compatibility with the existing analytics data + if (isScreenInTwoPaneLayout.value) { + VALUE_DEVICE_TYPE_REGULAR // 2 pane layout } else { - VALUE_DEVICE_TYPE_COMPACT + VALUE_DEVICE_TYPE_COMPACT // Single pane layout } @JvmInline -value class IsScreenLargerThanCompactValue(val value: Boolean) +value class IsScreenInTwoPaneLayout(val value: Boolean) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/extensions/ContextExt.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/extensions/ContextExt.kt index 710c5405c93..ee8c819a649 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/extensions/ContextExt.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/extensions/ContextExt.kt @@ -15,19 +15,29 @@ import androidx.annotation.ColorRes import androidx.core.content.ContextCompat import com.woocommerce.android.util.SystemVersionUtils import kotlinx.parcelize.Parcelize +import kotlin.math.max +import kotlin.math.min -val Context.windowSizeClass: WindowSizeClass - get() = determineWindowWidthSizeClassByGivenSize(resources.configuration.screenWidthDp) +val Context.isTwoPanesShouldBeUsed: Boolean + get() = determineIfTwoPanesShouldBeUsed( + resources.configuration.screenWidthDp, + resources.configuration.screenHeightDp + ) val Context.windowHeightSizeClass: WindowSizeClass get() = determineWindowHeightSizeClassByGivenSize(resources.configuration.screenHeightDp) -private fun determineWindowWidthSizeClassByGivenSize(sizeDp: Int): WindowSizeClass { - return when { - sizeDp < WindowSizeClass.Compact.maxWidthDp -> WindowSizeClass.Compact - sizeDp < WindowSizeClass.Medium.maxWidthDp -> WindowSizeClass.Medium - else -> WindowSizeClass.ExpandedAndBigger - } +private const val MIN_SCREEN_SHORT_SIZE_DP = 674 +private const val MIN_SCREEN_LONG_SIZE_DP = 800 + +private fun determineIfTwoPanesShouldBeUsed(widthDp: Int, heightDp: Int): Boolean { + val minScreenShortSizeDP = MIN_SCREEN_SHORT_SIZE_DP + val minScreenLongSizeDP = MIN_SCREEN_LONG_SIZE_DP + + val shortSize = min(widthDp, heightDp) + val longSize = max(widthDp, heightDp) + + return shortSize >= minScreenShortSizeDP && longSize >= minScreenLongSizeDP } private fun determineWindowHeightSizeClassByGivenSize(sizeDp: Int): WindowSizeClass { 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 f3c466a5f1a..5abb3d69d22 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,16 +37,15 @@ 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.WindowSizeClass import com.woocommerce.android.extensions.handleDialogNotice import com.woocommerce.android.extensions.handleDialogResult import com.woocommerce.android.extensions.handleResult import com.woocommerce.android.extensions.hide import com.woocommerce.android.extensions.isNotNullOrEmpty +import com.woocommerce.android.extensions.isTwoPanesShouldBeUsed import com.woocommerce.android.extensions.navigateSafely import com.woocommerce.android.extensions.show import com.woocommerce.android.extensions.takeIfNotEqualTo -import com.woocommerce.android.extensions.windowSizeClass import com.woocommerce.android.model.Address import com.woocommerce.android.model.Order import com.woocommerce.android.ui.barcodescanner.BarcodeScanningFragment @@ -119,7 +118,6 @@ class OrderCreateEditFormFragment : BackPressListener { private companion object { private const val TABLET_PANES_WIDTH_RATIO = 0.5F - private const val XL_TABLET_PANES_WIDTH_RATIO = 0.6F } private val viewModel by fixedHiltNavGraphViewModels(R.id.nav_graph_order_creations) private val sharedViewModel: ProductSelectorSharedViewModel by activityViewModels() @@ -171,8 +169,8 @@ class OrderCreateEditFormFragment : viewModel.addCoupon(it) } handleTaxRateSelectionResult() - viewModel.onDeviceConfigurationChanged(requireContext().windowSizeClass) - if (requireContext().windowSizeClass != WindowSizeClass.Compact) syncSelectedItems() + viewModel.onDeviceConfigurationChanged(requireContext().isTwoPanesShouldBeUsed) + if (requireContext().isTwoPanesShouldBeUsed) syncSelectedItems() } private fun syncSelectedItems() { @@ -229,13 +227,12 @@ class OrderCreateEditFormFragment : } private fun FragmentOrderCreateEditFormBinding.adjustUIForScreenSize() { - productSelectorNavContainer.isVisible = requireContext().windowSizeClass != WindowSizeClass.Compact - when (requireContext().windowSizeClass) { - WindowSizeClass.Compact -> twoPaneLayoutGuideline.setGuidelinePercent(0.0f) - WindowSizeClass.Medium -> twoPaneLayoutGuideline.setGuidelinePercent(TABLET_PANES_WIDTH_RATIO) - WindowSizeClass.ExpandedAndBigger -> twoPaneLayoutGuideline.setGuidelinePercent(XL_TABLET_PANES_WIDTH_RATIO) + productSelectorNavContainer.isVisible = requireContext().isTwoPanesShouldBeUsed + when (requireContext().isTwoPanesShouldBeUsed) { + false -> twoPaneLayoutGuideline.setGuidelinePercent(0.0f) + true -> twoPaneLayoutGuideline.setGuidelinePercent(TABLET_PANES_WIDTH_RATIO) } - setupToolbars(requireContext().windowSizeClass != WindowSizeClass.Compact) + setupToolbars(requireContext().isTwoPanesShouldBeUsed) } private fun FragmentOrderCreateEditFormBinding.setupToolbars(isTablet: Boolean) { @@ -605,7 +602,7 @@ class OrderCreateEditFormFragment : binding.productsSection.hideAddProductsHeaderActions() binding.productsSection.hideHeader() binding.productsSection.content = null - if (requireContext().windowSizeClass == WindowSizeClass.Compact) { + if (!requireContext().isTwoPanesShouldBeUsed) { binding.productsSection.setProductSectionButtons( addProductsButton = AddButton( text = getString(R.string.order_creation_add_products), @@ -631,7 +628,7 @@ class OrderCreateEditFormFragment : private fun productAddedCustomAmountUnset(binding: FragmentOrderCreateEditFormBinding) { val isEditable = viewModel.viewStateData.liveData.value?.isEditable == true if (isEditable) { - if (requireContext().windowSizeClass == WindowSizeClass.Compact) { + if (!requireContext().isTwoPanesShouldBeUsed) { binding.productsSection.showAddProductsHeaderActions() } else { binding.productsSection.hideAddProductsHeaderActions() @@ -662,7 +659,7 @@ class OrderCreateEditFormFragment : binding.customAmountsSection.removeCustomSectionButtons() binding.customAmountsSection.showHeader() if (viewModel.viewStateData.liveData.value?.isEditable == true) { - if (requireContext().windowSizeClass == WindowSizeClass.Compact) { + if (!requireContext().isTwoPanesShouldBeUsed) { binding.productsSection.showAddProductsHeaderActions() } else { binding.productsSection.hideAddProductsHeaderActions() @@ -684,7 +681,7 @@ class OrderCreateEditFormFragment : } private fun FragmentOrderCreateEditFormBinding.renderDefaultProductsSectionButtons() { - if (requireContext().windowSizeClass == WindowSizeClass.Compact) { + if (!requireContext().isTwoPanesShouldBeUsed) { productsSection.setProductSectionButtons( addProductsButton = AddButton( text = getString(R.string.order_creation_add_products), @@ -1223,7 +1220,7 @@ class OrderCreateEditFormFragment : } is OnSelectedProductsSyncRequested -> { - if (requireContext().windowSizeClass != WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { sharedViewModel.selectedItems.value.let { viewModel.onProductsSelected(it) } } } @@ -1310,7 +1307,7 @@ class OrderCreateEditFormFragment : isEachAddButtonEnabled = true content.customAmountAdapter?.isLocked = false } - if (requireContext().windowSizeClass != WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { sharedViewModel.onProductSelectionStateChanged(true) } } @@ -1340,7 +1337,7 @@ class OrderCreateEditFormFragment : isEachAddButtonEnabled = false content.customAmountAdapter?.isLocked = true } - if (requireContext().windowSizeClass != WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { sharedViewModel.onProductSelectionStateChanged(false) } } 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 876dac6bf74..60225e5b0dc 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 @@ -78,9 +78,8 @@ import com.woocommerce.android.analytics.AnalyticsTracker.Companion.VALUE_FLOW_C import com.woocommerce.android.analytics.AnalyticsTracker.Companion.VALUE_FLOW_EDITING import com.woocommerce.android.analytics.AnalyticsTracker.Companion.VALUE_PRODUCT_CARD import com.woocommerce.android.analytics.AnalyticsTrackerWrapper -import com.woocommerce.android.analytics.IsScreenLargerThanCompactValue +import com.woocommerce.android.analytics.IsScreenInTwoPaneLayout import com.woocommerce.android.analytics.deviceTypeToAnalyticsString -import com.woocommerce.android.extensions.WindowSizeClass import com.woocommerce.android.extensions.isNotNullOrEmpty import com.woocommerce.android.extensions.runWithContext import com.woocommerce.android.model.Address @@ -484,18 +483,18 @@ class OrderCreateEditViewModel @Inject constructor( } } - fun onDeviceConfigurationChanged(deviceType: WindowSizeClass) { - if (viewState.isRecalculateNeeded && deviceType == WindowSizeClass.Compact) { + fun onDeviceConfigurationChanged(isTwoPane: Boolean) { + if (viewState.isRecalculateNeeded && !isTwoPane) { // enforce items recalculation after switching to single pane mode from dual pane mode onProductsSelected(pendingSelectedItems.value) viewState = viewState.copy(isRecalculateNeeded = false) } - if (deviceType != WindowSizeClass.Compact) { + if (isTwoPane) { // ensure that any items added in single pane mode are displayed in dual pane mode // in the product selector pane after switching to dual pane layout _pendingSelectedItems.value = _orderDraft.value.selectedItems() } - viewState = viewState.copy(windowSizeClass = deviceType) + viewState = viewState.copy(isTwoPaneLayout = isTwoPane) } fun selectCustomAmount(customAmount: CustomAmountUIModel) { @@ -568,8 +567,8 @@ class OrderCreateEditViewModel @Inject constructor( handleCouponEditResult(couponEditResult) } - private fun getScreenSizeClassNameForAnalytics(windowSize: WindowSizeClass) = - IsScreenLargerThanCompactValue(windowSize != WindowSizeClass.Compact).deviceTypeToAnalyticsString + private fun getAnalyticsPaneTypeName(isTwoPane: Boolean) = + IsScreenInTwoPaneLayout(isTwoPane).deviceTypeToAnalyticsString fun onCustomerNoteEdited(newNote: String) { _orderDraft.value.let { order -> @@ -580,7 +579,7 @@ class OrderCreateEditViewModel @Inject constructor( KEY_STATUS to order.status, KEY_TYPE to CUSTOMER, KEY_FLOW to flow, - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass) + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout) ) ) } @@ -592,7 +591,7 @@ class OrderCreateEditViewModel @Inject constructor( ORDER_PRODUCT_QUANTITY_CHANGE, mapOf( KEY_FLOW to flow, - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass) + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout) ) ) _orderDraft.update { adjustProductQuantity(it, id, +1) } @@ -607,8 +606,8 @@ class OrderCreateEditViewModel @Inject constructor( ORDER_PRODUCT_REMOVE, mapOf( KEY_FLOW to flow, - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics( - viewState.windowSizeClass + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName( + viewState.isTwoPaneLayout ) ) ) @@ -617,7 +616,7 @@ class OrderCreateEditViewModel @Inject constructor( ORDER_PRODUCT_QUANTITY_CHANGE, mapOf( KEY_FLOW to flow, - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass) + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout) ) ) } @@ -631,7 +630,7 @@ class OrderCreateEditViewModel @Inject constructor( ORDER_PRODUCT_QUANTITY_CHANGE, mapOf( KEY_FLOW to flow, - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass) + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout) ) ) _orderDraft.update { adjustProductQuantity(it, product, +1) } @@ -645,7 +644,7 @@ class OrderCreateEditViewModel @Inject constructor( ORDER_PRODUCT_QUANTITY_CHANGE, mapOf( KEY_FLOW to flow, - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass) + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout) ) ) _orderDraft.update { adjustProductQuantity(it, product, -1) } @@ -669,8 +668,8 @@ class OrderCreateEditViewModel @Inject constructor( ORDER_PRODUCT_QUANTITY_CHANGE, mapOf( KEY_FLOW to flow, - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics( - viewState.windowSizeClass + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName( + viewState.isTwoPaneLayout ) ) ) @@ -695,7 +694,7 @@ class OrderCreateEditViewModel @Inject constructor( KEY_FROM to _orderDraft.value.status.value, KEY_TO to status.value, KEY_FLOW to flow, - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass), + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout), ) ) _orderDraft.update { it.copy(status = status) } @@ -706,7 +705,7 @@ class OrderCreateEditViewModel @Inject constructor( ORDER_PRODUCT_REMOVE, mapOf( KEY_FLOW to flow, - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass), + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout), ) ) viewState = viewState.copy(isEditable = false) @@ -722,7 +721,7 @@ class OrderCreateEditViewModel @Inject constructor( mapOf( KEY_FLOW to flow, KEY_SOURCE to VALUE_PRODUCT_CARD, - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass), + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout), ) ) } @@ -749,7 +748,7 @@ class OrderCreateEditViewModel @Inject constructor( KEY_SCANNING_SOURCE to source.source, KEY_PRODUCT_ADDED_VIA to addedVia.addedVia, KEY_HAS_BUNDLE_CONFIGURATION to hasBundleConfiguration, - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass), + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout), ) ) } ?: run { @@ -760,7 +759,7 @@ class OrderCreateEditViewModel @Inject constructor( KEY_PRODUCT_COUNT to selectedItems.size, KEY_PRODUCT_ADDED_VIA to addedVia.addedVia, KEY_HAS_BUNDLE_CONFIGURATION to hasBundleConfiguration, - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass), + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout), ) ) } @@ -871,7 +870,7 @@ class OrderCreateEditViewModel @Inject constructor( tracker.track( ORDER_CREATION_PRODUCT_BARCODE_SCANNING_TAPPED, mapOf( - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass) + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout) ) ) } @@ -1076,7 +1075,7 @@ class OrderCreateEditViewModel @Inject constructor( PRODUCT_SEARCH_VIA_SKU_SUCCESS, mapOf( KEY_SCANNING_SOURCE to source.source, - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass) + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout) ) ) } @@ -1131,7 +1130,7 @@ class OrderCreateEditViewModel @Inject constructor( mapOf( KEY_FLOW to flow, KEY_HAS_DIFFERENT_SHIPPING_DETAILS to hasDifferentShippingDetails, - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass) + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout) ) ) @@ -1318,7 +1317,7 @@ class OrderCreateEditViewModel @Inject constructor( mapOf( KEY_FLOW to flow, KEY_EXPANDED to newTotalsExpandedState, - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass), + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout), ) ) } @@ -1338,7 +1337,7 @@ class OrderCreateEditViewModel @Inject constructor( put(KEY_FLOW, flow) put( KEY_HORIZONTAL_SIZE_CLASS, - getScreenSizeClassNameForAnalytics(viewState.windowSizeClass) + getAnalyticsPaneTypeName(viewState.isTwoPaneLayout) ) } ) @@ -1458,7 +1457,7 @@ class OrderCreateEditViewModel @Inject constructor( viewState = viewState.copy( isUpdatingOrderDraft = false, showOrderUpdateSnackbar = true, - isRecalculateNeeded = viewState.windowSizeClass != WindowSizeClass.Compact + isRecalculateNeeded = viewState.isTwoPaneLayout ) } trackOrderSyncFailed(updateStatus.throwable) @@ -1537,7 +1536,7 @@ class OrderCreateEditViewModel @Inject constructor( KEY_ERROR_TYPE to (it as? WooException)?.error?.type?.name, KEY_ERROR_DESC to it.message, KEY_USE_GIFT_CARD to orderDraft.value?.selectedGiftCard.isNotNullOrEmpty(), - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass), + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout), ) ) } @@ -1617,7 +1616,7 @@ class OrderCreateEditViewModel @Inject constructor( ORDER_SHIPPING_METHOD_REMOVE, mapOf( KEY_FLOW to flow, - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass) + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout) ) ) _orderDraft.update { draft -> @@ -1676,7 +1675,7 @@ class OrderCreateEditViewModel @Inject constructor( true -> VALUE_CUSTOM_AMOUNT_TAX_STATUS_TAXABLE false -> VALUE_CUSTOM_AMOUNT_TAX_STATUS_NONE }, - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass), + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout), ) ) updateCustomAmount(draft, customAmountUIModel) @@ -1690,7 +1689,7 @@ class OrderCreateEditViewModel @Inject constructor( true -> VALUE_CUSTOM_AMOUNT_TAX_STATUS_TAXABLE false -> VALUE_CUSTOM_AMOUNT_TAX_STATUS_NONE }, - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass), + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout), ) ) addCustomAmount(draft, customAmountUIModel) @@ -1700,7 +1699,7 @@ class OrderCreateEditViewModel @Inject constructor( viewState = viewState.copy(isEditable = true) tracker.track( ADD_CUSTOM_AMOUNT_DONE_TAPPED, - mapOf(KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass)) + mapOf(KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout)) ) trackIfNameAdded(customAmountUIModel) trackIfPercentageBasedCustomAmount(customAmountUIModel) @@ -1773,7 +1772,7 @@ class OrderCreateEditViewModel @Inject constructor( viewState = viewState.copy(isEditable = true) tracker.track( ORDER_CREATION_REMOVE_CUSTOM_AMOUNT_TAPPED, - mapOf(KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass)) + mapOf(KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout)) ) } @@ -1782,7 +1781,7 @@ class OrderCreateEditViewModel @Inject constructor( ORDER_FEE_REMOVE, mapOf( KEY_FLOW to flow, - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass) + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout) ) ) _orderDraft.update { draft -> @@ -1844,7 +1843,7 @@ class OrderCreateEditViewModel @Inject constructor( } tracker.track( AnalyticsEvent.ORDER_CREATION_SET_NEW_TAX_RATE_TAPPED, - mapOf(KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass)) + mapOf(KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout)) ) } @@ -1888,7 +1887,7 @@ class OrderCreateEditViewModel @Inject constructor( tracker.track( AnalyticsEvent.TAX_RATE_AUTO_TAX_RATE_SET_NEW_RATE_FOR_ORDER_TAPPED, mapOf( - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass) + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout) ) ) } @@ -1901,7 +1900,7 @@ class OrderCreateEditViewModel @Inject constructor( tracker.track( AnalyticsEvent.TAX_RATE_AUTO_TAX_RATE_CLEAR_ADDRESS_TAPPED, mapOf( - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass) + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout) ) ) } @@ -1915,7 +1914,7 @@ class OrderCreateEditViewModel @Inject constructor( } tracker.track( analyticsEvent, - mapOf(KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass)) + mapOf(KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout)) ) } @@ -1968,7 +1967,7 @@ class OrderCreateEditViewModel @Inject constructor( val productTypes = if (!ids.isNullOrEmpty()) orderDetailRepository.getUniqueProductTypes(ids) else null val productCount = products.value?.count() ?: 0 return buildMap { - put(KEY_HORIZONTAL_SIZE_CLASS, IsScreenLargerThanCompactValue(isTablet).deviceTypeToAnalyticsString) + put(KEY_HORIZONTAL_SIZE_CLASS, IsScreenInTwoPaneLayout(isTablet).deviceTypeToAnalyticsString) put(KEY_STATUS, _orderDraft.value.status) putIfNotNull(PRODUCT_TYPES to productTypes) put(KEY_PRODUCT_COUNT, productCount) @@ -2001,7 +2000,7 @@ class OrderCreateEditViewModel @Inject constructor( mapOf( KEY_FLOW to flow, KEY_IS_GIFT_CARD_REMOVED to giftCardWasRemoved, - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(viewState.windowSizeClass) + KEY_HORIZONTAL_SIZE_CLASS to getAnalyticsPaneTypeName(viewState.isTwoPaneLayout) ) ) } @@ -2024,7 +2023,7 @@ class OrderCreateEditViewModel @Inject constructor( val taxRateSelectorButtonState: TaxRateSelectorButtonState = TaxRateSelectorButtonState(), val productsSectionState: ProductsSectionState = ProductsSectionState(), val customAmountSectionState: CustomAmountSectionState = CustomAmountSectionState(), - val windowSizeClass: WindowSizeClass = WindowSizeClass.Compact, + val isTwoPaneLayout: Boolean = false, val isRecalculateNeeded: Boolean = false, val showShippingFeedback: Boolean = false, ) : Parcelable { @@ -2033,8 +2032,8 @@ class OrderCreateEditViewModel @Inject constructor( !willUpdateOrderDraft && !isUpdatingOrderDraft && !showOrderUpdateSnackbar @IgnoredOnParcel - val isCreateOrderButtonEnabled = when (windowSizeClass) { - WindowSizeClass.Compact -> canCreateOrder + val isCreateOrderButtonEnabled = when (isTwoPaneLayout) { + false -> canCreateOrder else -> canCreateOrder && !isRecalculateNeeded } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/customerlist/CustomerListDialogFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/customerlist/CustomerListDialogFragment.kt index fa5eb4595aa..09cd9c5e2a0 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/customerlist/CustomerListDialogFragment.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/customerlist/CustomerListDialogFragment.kt @@ -11,10 +11,9 @@ import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import com.woocommerce.android.R import com.woocommerce.android.analytics.AnalyticsTracker -import com.woocommerce.android.extensions.WindowSizeClass +import com.woocommerce.android.extensions.isTwoPanesShouldBeUsed import com.woocommerce.android.extensions.navigateBackWithResult import com.woocommerce.android.extensions.navigateSafely -import com.woocommerce.android.extensions.windowSizeClass import com.woocommerce.android.ui.compose.theme.WooThemeWithBackground import com.woocommerce.android.viewmodel.MultiLiveEvent import dagger.hilt.android.AndroidEntryPoint @@ -33,7 +32,7 @@ class CustomerListDialogFragment : DialogFragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - if (requireContext().windowSizeClass != WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { setStyle(STYLE_NO_TITLE, R.style.Theme_Woo_Dialog_RoundedCorners_NoMinWidth) } else { /* This draws the dialog as full screen */ @@ -87,7 +86,7 @@ class CustomerListDialogFragment : DialogFragment() { override fun onStart() { super.onStart() - if (requireContext().windowSizeClass != WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { dialog?.window?.setLayout( (DisplayUtils.getWindowPixelWidth(requireContext()) * TABLET_LANDSCAPE_WIDTH_RATIO).toInt(), (DisplayUtils.getWindowPixelHeight(requireContext()) * TABLET_LANDSCAPE_HEIGHT_RATIO).toInt() diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/totals/OrderCreateEditTotalsHelper.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/totals/OrderCreateEditTotalsHelper.kt index e0bde98607f..dd799d1ddab 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/totals/OrderCreateEditTotalsHelper.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/totals/OrderCreateEditTotalsHelper.kt @@ -1,7 +1,6 @@ package com.woocommerce.android.ui.orders.creation.totals import com.woocommerce.android.R -import com.woocommerce.android.extensions.WindowSizeClass import com.woocommerce.android.extensions.isNotEqualTo import com.woocommerce.android.extensions.isNotNullOrEmpty import com.woocommerce.android.extensions.sumByBigDecimal @@ -71,7 +70,7 @@ class OrderCreateEditTotalsHelper @Inject constructor( private fun ViewState.getRecalculateButton( onRecalculateButtonClicked: () -> Unit ): TotalsSectionsState.Button? { - return if (windowSizeClass != WindowSizeClass.Compact && isRecalculateNeeded) { + return if (isTwoPaneLayout && isRecalculateNeeded) { TotalsSectionsState.Button( text = resourceProvider.getString(R.string.order_creation_recalculate_button), enabled = canCreateOrder, @@ -87,7 +86,7 @@ class OrderCreateEditTotalsHelper @Inject constructor( onMainButtonClicked: () -> Unit, onRecalculateButtonClicked: () -> Unit ): TotalsSectionsState.Button { - return if (windowSizeClass == WindowSizeClass.Compact) { + return if (!isTwoPaneLayout) { TotalsSectionsState.Button( text = mode.toButtonText(), enabled = canCreateOrder, diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/details/OrderDetailFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/details/OrderDetailFragment.kt index ff3f326aef2..aaf4ae14965 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/details/OrderDetailFragment.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/details/OrderDetailFragment.kt @@ -36,18 +36,17 @@ import com.woocommerce.android.analytics.AnalyticsTracker.Companion.KEY_ORDER_ID import com.woocommerce.android.analytics.AnalyticsTracker.Companion.KEY_START_PAYMENT_FLOW import com.woocommerce.android.cardreader.CardReaderManager import com.woocommerce.android.databinding.FragmentOrderDetailBinding -import com.woocommerce.android.extensions.WindowSizeClass import com.woocommerce.android.extensions.handleDialogNotice import com.woocommerce.android.extensions.handleDialogResult import com.woocommerce.android.extensions.handleNotice import com.woocommerce.android.extensions.handleResult import com.woocommerce.android.extensions.hide +import com.woocommerce.android.extensions.isTwoPanesShouldBeUsed import com.woocommerce.android.extensions.navigateBackWithResult import com.woocommerce.android.extensions.navigateSafely import com.woocommerce.android.extensions.show import com.woocommerce.android.extensions.takeIfNotEqualTo import com.woocommerce.android.extensions.whenNotNullNorEmpty -import com.woocommerce.android.extensions.windowSizeClass import com.woocommerce.android.model.GiftCardSummary import com.woocommerce.android.model.Order import com.woocommerce.android.model.Order.OrderStatus @@ -108,7 +107,6 @@ class OrderDetailFragment : companion object { val TAG: String = OrderDetailFragment::class.java.simpleName private const val MARGINS_FOR_TABLET: Float = 0.1F - private const val MARGINS_FOR_SMALL_TABLET_PORTRAIT: Float = 0.025F } private val viewModel: OrderDetailViewModel by viewModels() @@ -196,7 +194,7 @@ class OrderDetailFragment : * during the payment collection process. If this is the case, it navigates to the * Select Payment screen on both phone and tablet devices. */ - val isScreenLargerThanCompact = requireContext().windowSizeClass != WindowSizeClass.Compact + val isScreenLargerThanCompact = requireContext().isTwoPanesShouldBeUsed if (isOrderListFragmentNotVisible() && isScreenLargerThanCompact && !navArgs.startPaymentFlow) { navigateBackWithResult(KEY_ORDER_ID, navArgs.orderId) return @@ -243,18 +241,8 @@ class OrderDetailFragment : private fun setMarginsIfTablet() { val windowWidth = DisplayUtils.getWindowPixelWidth(requireContext()) val layoutParams = binding.orderDetailContainer.layoutParams as FrameLayout.LayoutParams - when (requireContext().windowSizeClass) { - WindowSizeClass.Medium -> { - val marginHorizontal = (windowWidth * MARGINS_FOR_SMALL_TABLET_PORTRAIT).toInt() - layoutParams.setMargins( - marginHorizontal, - layoutParams.topMargin, - marginHorizontal, - layoutParams.bottomMargin - ) - } - - WindowSizeClass.ExpandedAndBigger -> { + when (requireContext().isTwoPanesShouldBeUsed) { + true -> { val marginHorizontal = (windowWidth * MARGINS_FOR_TABLET).toInt() layoutParams.setMargins( marginHorizontal, @@ -264,7 +252,7 @@ class OrderDetailFragment : ) } - WindowSizeClass.Compact -> return + false -> return } binding.orderDetailContainer.layoutParams = layoutParams } @@ -281,7 +269,7 @@ class OrderDetailFragment : private fun setupToolbarMenu(menu: Menu) { onPrepareMenu(menu) - if (requireContext().windowSizeClass != WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { binding.toolbar.navigationIcon = null } else { binding.toolbar.navigationIcon = AppCompatResources.getDrawable(requireActivity(), R.drawable.ic_back_24dp) @@ -377,7 +365,7 @@ class OrderDetailFragment : viewModel.viewStateData.observe(viewLifecycleOwner) { old, new -> new.orderInfo?.takeIfNotEqualTo(old?.orderInfo) { showOrderDetail(it.order!!, it.isPaymentCollectableWithCardReader, it.receiptButtonStatus) - if (requireContext().windowSizeClass != WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { orderEditingViewModel.setOrderId(it.order.id) } onPrepareMenu(binding.toolbar.menu) @@ -641,7 +629,7 @@ class OrderDetailFragment : viewModel.onSeeReceiptClicked() }, onCollectPaymentClickListener = { - viewModel.onCollectPaymentClicked(requireContext().windowSizeClass != WindowSizeClass.Compact) + viewModel.onCollectPaymentClicked(requireContext().isTwoPanesShouldBeUsed) }, onPrintingInstructionsClickListener = { viewModel.onPrintingInstructionsClicked() diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/details/OrderDetailViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/details/OrderDetailViewModel.kt index 4dc0cd7b346..1a9b604d88f 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/details/OrderDetailViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/details/OrderDetailViewModel.kt @@ -15,7 +15,7 @@ import com.woocommerce.android.R.string import com.woocommerce.android.analytics.AnalyticsEvent import com.woocommerce.android.analytics.AnalyticsTracker.Companion.KEY_SHIPPING_LINES_COUNT import com.woocommerce.android.analytics.AnalyticsTrackerWrapper -import com.woocommerce.android.analytics.IsScreenLargerThanCompactValue +import com.woocommerce.android.analytics.IsScreenInTwoPaneLayout import com.woocommerce.android.analytics.deviceTypeToAnalyticsString import com.woocommerce.android.extensions.whenNotNullNorEmpty import com.woocommerce.android.model.GiftCardSummary @@ -418,7 +418,7 @@ class OrderDetailViewModel @Inject constructor( fun onCollectPaymentClicked(isTablet: Boolean = false) { paymentsFlowTracker.trackCollectPaymentTapped( - IsScreenLargerThanCompactValue(isTablet).deviceTypeToAnalyticsString + IsScreenInTwoPaneLayout(isTablet).deviceTypeToAnalyticsString ) triggerEvent( StartPaymentFlow( diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/details/PrintingInstructionsFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/details/PrintingInstructionsFragment.kt index 07c5d60d71e..97e3b086489 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/details/PrintingInstructionsFragment.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/details/PrintingInstructionsFragment.kt @@ -7,8 +7,7 @@ import androidx.fragment.app.DialogFragment import androidx.navigation.fragment.findNavController import com.woocommerce.android.R import com.woocommerce.android.databinding.FragmentPrintingInstructionsBinding -import com.woocommerce.android.extensions.WindowSizeClass -import com.woocommerce.android.extensions.windowSizeClass +import com.woocommerce.android.extensions.isTwoPanesShouldBeUsed import dagger.hilt.android.AndroidEntryPoint import org.wordpress.android.util.DisplayUtils @@ -34,7 +33,7 @@ class PrintingInstructionsFragment : DialogFragment(R.layout.fragment_printing_i override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - if (requireContext().windowSizeClass != WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { setStyle(STYLE_NO_TITLE, R.style.Theme_Woo_Dialog_RoundedCorners_NoMinWidth) } else { /* This draws the dialog as full screen */ @@ -44,7 +43,7 @@ class PrintingInstructionsFragment : DialogFragment(R.layout.fragment_printing_i override fun onStart() { super.onStart() - if (requireContext().windowSizeClass != WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { dialog?.window?.setLayout( (DisplayUtils.getWindowPixelWidth(requireContext()) * TABLET_LANDSCAPE_WIDTH_RATIO).toInt(), (DisplayUtils.getWindowPixelHeight(requireContext()) * TABLET_LANDSCAPE_HEIGHT_RATIO).toInt() diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/filters/OrderFilterCategoriesFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/filters/OrderFilterCategoriesFragment.kt index 8594bbca039..e874d70f3ca 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/filters/OrderFilterCategoriesFragment.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/filters/OrderFilterCategoriesFragment.kt @@ -12,11 +12,10 @@ import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager import com.woocommerce.android.R import com.woocommerce.android.databinding.FragmentOrderFilterListBinding -import com.woocommerce.android.extensions.WindowSizeClass import com.woocommerce.android.extensions.handleResult +import com.woocommerce.android.extensions.isTwoPanesShouldBeUsed import com.woocommerce.android.extensions.navigateBackWithNotice import com.woocommerce.android.extensions.navigateSafely -import com.woocommerce.android.extensions.windowSizeClass import com.woocommerce.android.model.Order import com.woocommerce.android.ui.main.MainActivity.Companion.BackPressListener import com.woocommerce.android.ui.orders.creation.customerlist.OrderCustomerListFragment.Companion.KEY_CUSTOMER_RESULT @@ -123,7 +122,7 @@ class OrderFilterCategoriesFragment : override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - if (requireContext().windowSizeClass != WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { setStyle(STYLE_NO_TITLE, R.style.Theme_Woo_Dialog_RoundedCorners_NoMinWidth) } else { /* This draws the dialog as full screen */ @@ -133,7 +132,7 @@ class OrderFilterCategoriesFragment : override fun onStart() { super.onStart() - if (requireContext().windowSizeClass != WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { dialog?.window?.setLayout( (DisplayUtils.getWindowPixelWidth(requireContext()) * TABLET_LANDSCAPE_WIDTH_RATIO).toInt(), (DisplayUtils.getWindowPixelHeight(requireContext()) * TABLET_LANDSCAPE_HEIGHT_RATIO).toInt() diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/filters/OrderFilterOptionsFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/filters/OrderFilterOptionsFragment.kt index 608a56d09af..8bd5c9e6e9e 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/filters/OrderFilterOptionsFragment.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/filters/OrderFilterOptionsFragment.kt @@ -9,11 +9,10 @@ import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager import com.woocommerce.android.R import com.woocommerce.android.databinding.FragmentOrderFilterListBinding -import com.woocommerce.android.extensions.WindowSizeClass +import com.woocommerce.android.extensions.isTwoPanesShouldBeUsed import com.woocommerce.android.extensions.navigateBackWithNotice import com.woocommerce.android.extensions.navigateBackWithResult import com.woocommerce.android.extensions.showDateRangePicker -import com.woocommerce.android.extensions.windowSizeClass import com.woocommerce.android.ui.main.MainActivity.Companion.BackPressListener import com.woocommerce.android.ui.orders.filters.OrderFilterCategoriesFragment.Companion.KEY_UPDATED_FILTER_OPTIONS import com.woocommerce.android.ui.orders.filters.adapter.OrderFilterOptionAdapter @@ -44,7 +43,7 @@ class OrderFilterOptionsFragment : override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - if (requireContext().windowSizeClass != WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { setStyle(STYLE_NO_TITLE, R.style.Theme_Woo_Dialog_RoundedCorners_NoMinWidth) } else { /* This draws the dialog as full screen */ @@ -66,7 +65,7 @@ class OrderFilterOptionsFragment : override fun onStart() { super.onStart() - if (requireContext().windowSizeClass != WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { dialog?.window?.setLayout( (DisplayUtils.getWindowPixelWidth(requireContext()) * TABLET_LANDSCAPE_WIDTH_RATIO).toInt(), (DisplayUtils.getWindowPixelHeight(requireContext()) * TABLET_LANDSCAPE_HEIGHT_RATIO).toInt() 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 0ae116830b6..f02eb61b2db 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 @@ -40,13 +40,12 @@ import com.woocommerce.android.analytics.AnalyticsTracker import com.woocommerce.android.analytics.AnalyticsTracker.Companion.KEY_ORDER_ID import com.woocommerce.android.analytics.AnalyticsTracker.Companion.KEY_START_PAYMENT_FLOW import com.woocommerce.android.databinding.FragmentOrderListBinding -import com.woocommerce.android.extensions.WindowSizeClass import com.woocommerce.android.extensions.handleDialogResult import com.woocommerce.android.extensions.handleResult +import com.woocommerce.android.extensions.isTwoPanesShouldBeUsed import com.woocommerce.android.extensions.navigateSafely import com.woocommerce.android.extensions.pinFabAboveBottomNavigationBar import com.woocommerce.android.extensions.takeIfNotEqualTo -import com.woocommerce.android.extensions.windowSizeClass import com.woocommerce.android.model.FeatureFeedbackSettings import com.woocommerce.android.model.FeatureFeedbackSettings.Feature.SIMPLE_PAYMENTS_AND_ORDER_CREATION import com.woocommerce.android.model.FeatureFeedbackSettings.FeedbackState @@ -104,7 +103,6 @@ class OrderListFragment : private const val JITM_FRAGMENT_TAG = "jitm_orders_fragment" private const val TABLET_LANDSCAPE_WIDTH_RATIO = 0.3f - private const val TABLET_PORTRAIT_WIDTH_RATIO = 0.40f private const val LAST_WINDOW_SIZE_WAS_LARGER_THAN_COMPACT = "last_window_size_was_larger_than_compact" private const val HANDLER_DELAY = 200L private const val TOP_OFFSET_PROGRESS_WITH_ACTION_MODE = 200 @@ -178,7 +176,7 @@ class OrderListFragment : if (findNavController().currentDestination?.id != R.id.orders) return selectedOrder.selectOrder(-1L) - if (requireContext().windowSizeClass != WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { if (!binding.detailPaneContainer.findNavController().popBackStack()) { findNavController().popBackStack() } @@ -187,7 +185,7 @@ class OrderListFragment : } else { val result = _binding?.detailPaneContainer?.findNavController()?.navigateUp() ?: false - val isCompactScreen = requireContext().windowSizeClass == WindowSizeClass.Compact + val isCompactScreen = !requireContext().isTwoPanesShouldBeUsed if (!result && _binding?.listPaneContainer?.isVisible != true && isCompactScreen) { // There are no more fragments in the back stack, UI used to be a two pane layout (tablet) // and now it's a single pane layout (phone), e.g. due to a configuration change. @@ -336,7 +334,7 @@ class OrderListFragment : } private fun adjustUiForDeviceType(savedInstanceState: Bundle?) { - if (requireContext().windowSizeClass > WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { adjustLayoutForTablet() } else { adjustLayoutForNonTablet(savedInstanceState) @@ -345,12 +343,9 @@ class OrderListFragment : } private fun adjustLayoutForTablet() { - when (requireContext().windowSizeClass) { - WindowSizeClass.Compact -> return - WindowSizeClass.Medium -> { - binding.twoPaneLayoutGuideline.setGuidelinePercent(TABLET_PORTRAIT_WIDTH_RATIO) - } - WindowSizeClass.ExpandedAndBigger -> { + when (requireContext().isTwoPanesShouldBeUsed) { + false -> return + true -> { binding.twoPaneLayoutGuideline.setGuidelinePercent(TABLET_LANDSCAPE_WIDTH_RATIO) } } @@ -398,7 +393,7 @@ class OrderListFragment : super.onResume() AnalyticsTracker.trackViewShown(this) viewModel.loadOrders() - if (requireContext().windowSizeClass != WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { refreshOrders() } } @@ -410,7 +405,7 @@ class OrderListFragment : // We want to check if [OrderListFragment] is the current destination (at the top of the backstack), // because onSaveInstanceState hook is called in all the fragments in the back stack on config change, // even if they are not being recreated. - if (requireContext().windowSizeClass > WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { outState.putBoolean(LAST_WINDOW_SIZE_WAS_LARGER_THAN_COMPACT, true) } } @@ -530,7 +525,7 @@ class OrderListFragment : selectedOrder.selectedOrderId.observe(viewLifecycleOwner) { viewModel.updateOrderSelectedStatus( orderId = selectedOrder.selectedOrderId.value ?: -1, - requireContext().windowSizeClass != WindowSizeClass.Compact + requireContext().isTwoPanesShouldBeUsed ) } @@ -552,7 +547,7 @@ class OrderListFragment : } viewModel.pagedListData.observe(viewLifecycleOwner) { - if (requireContext().windowSizeClass != WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { when { // A specific order is set to be opened viewModel.orderId.value != -1L -> { @@ -843,7 +838,7 @@ class OrderListFragment : val selectedOrderId = selectedOrder.selectedOrderId.value ?: -1 viewModel.updateOrderSelectedStatus( orderId = selectedOrderId, - requireContext().windowSizeClass != WindowSizeClass.Compact + requireContext().isTwoPanesShouldBeUsed ) } @@ -871,12 +866,12 @@ class OrderListFragment : viewModel.handleBarcodeScannedStatus(status) } handleResult(KEY_ORDER_ID) { - if (requireContext().windowSizeClass != WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { openSpecificOrder(it) } } handleResult(KEY_START_PAYMENT_FLOW) { - if (requireContext().windowSizeClass != WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { openSpecificOrder(it, true) } } @@ -946,10 +941,10 @@ class OrderListFragment : viewModel.trackOrderClickEvent( orderId, orderStatus, - requireContext().windowSizeClass + requireContext().isTwoPanesShouldBeUsed ) - if (requireContext().windowSizeClass != WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { _binding?.createOrderButton?.show() } else { _binding?.createOrderButton?.hide() @@ -965,13 +960,13 @@ class OrderListFragment : viewModel.isSearching = true } (activity as? MainNavigationRouter)?.run { - val navHostFragment = if (requireContext().windowSizeClass != WindowSizeClass.Compact) { + val navHostFragment = if (requireContext().isTwoPanesShouldBeUsed) { childFragmentManager.findFragmentById(R.id.detailPaneContainer) as NavHostFragment } else { null } selectedOrder.selectOrder(orderId) - viewModel.updateOrderSelectedStatus(orderId, requireContext().windowSizeClass != WindowSizeClass.Compact) + viewModel.updateOrderSelectedStatus(orderId, requireContext().isTwoPanesShouldBeUsed) navHostFragment?.let { showOrderDetail(orderId, it, startPaymentsFlow = startPaymentsFlow) } ?: run { @@ -1035,7 +1030,7 @@ class OrderListFragment : private fun clearSearchResults() { if (viewModel.isSearching) { - if (requireContext().windowSizeClass == WindowSizeClass.Compact) { + if (!requireContext().isTwoPanesShouldBeUsed) { searchQuery = "" viewModel.isSearching = false disableSearchListeners() @@ -1108,7 +1103,7 @@ class OrderListFragment : searchMenuItem?.setOnActionExpandListener(this) searchView?.setOnQueryTextListener(this) - if (requireContext().windowSizeClass == WindowSizeClass.Compact) { + if (!requireContext().isTwoPanesShouldBeUsed) { handler.postDelayed({ (activity as? MainActivity)?.hideBottomNav() }, HANDLER_DELAY) 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 959408d6f1c..dd6d21fa5cb 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 @@ -28,10 +28,9 @@ import com.woocommerce.android.analytics.AnalyticsEvent.ORDER_LIST_PRODUCT_BARCO import com.woocommerce.android.analytics.AnalyticsTracker import com.woocommerce.android.analytics.AnalyticsTracker.Companion.KEY_HORIZONTAL_SIZE_CLASS import com.woocommerce.android.analytics.AnalyticsTrackerWrapper -import com.woocommerce.android.analytics.IsScreenLargerThanCompactValue +import com.woocommerce.android.analytics.IsScreenInTwoPaneLayout import com.woocommerce.android.analytics.deviceTypeToAnalyticsString import com.woocommerce.android.extensions.NotificationReceivedEvent -import com.woocommerce.android.extensions.WindowSizeClass import com.woocommerce.android.extensions.drop import com.woocommerce.android.extensions.filter import com.woocommerce.android.extensions.filterNotNull @@ -428,19 +427,19 @@ class OrderListViewModel @Inject constructor( * Track user clicked to open an order and the status of that order, along with some * data about the order custom fields */ - fun trackOrderClickEvent(orderId: Long, orderStatus: String, windowSize: WindowSizeClass) { + fun trackOrderClickEvent(orderId: Long, orderStatus: String, isTwoPaneLayout: Boolean) { AnalyticsTracker.track( AnalyticsEvent.ORDER_OPEN, mapOf( AnalyticsTracker.KEY_ID to orderId, AnalyticsTracker.KEY_STATUS to orderStatus, - KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(windowSize) + KEY_HORIZONTAL_SIZE_CLASS to getScreenSizeClassNameForAnalytics(isTwoPaneLayout) ) ) } - private fun getScreenSizeClassNameForAnalytics(windowSize: WindowSizeClass) = - IsScreenLargerThanCompactValue(windowSize != WindowSizeClass.Compact).deviceTypeToAnalyticsString + private fun getScreenSizeClassNameForAnalytics(isTwoPaneLayout: Boolean) = + IsScreenInTwoPaneLayout(isTwoPaneLayout).deviceTypeToAnalyticsString /** * Activates the provided list by first removing the LiveData sources for the active list, diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/shippinglabels/PrintShippingLabelFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/shippinglabels/PrintShippingLabelFragment.kt index 1a5bd6b8f8c..b4267f9caec 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/shippinglabels/PrintShippingLabelFragment.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/shippinglabels/PrintShippingLabelFragment.kt @@ -10,11 +10,10 @@ import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import com.woocommerce.android.R import com.woocommerce.android.databinding.FragmentPrintShippingLabelBinding -import com.woocommerce.android.extensions.WindowSizeClass import com.woocommerce.android.extensions.handleDialogResult +import com.woocommerce.android.extensions.isTwoPanesShouldBeUsed import com.woocommerce.android.extensions.navigateBackWithNotice import com.woocommerce.android.extensions.takeIfNotEqualTo -import com.woocommerce.android.extensions.windowSizeClass import com.woocommerce.android.ui.base.BaseFragment import com.woocommerce.android.ui.base.UIMessageResolver import com.woocommerce.android.ui.main.AppBarStatus @@ -69,7 +68,7 @@ class PrintShippingLabelFragment : BaseFragment(R.layout.fragment_print_shipping binding.toolbar.setNavigationOnClickListener { @Suppress("DEPRECATION") when { - requireContext().windowSizeClass != WindowSizeClass.Compact && onRequestAllowBackPress() -> { + requireContext().isTwoPanesShouldBeUsed && onRequestAllowBackPress() -> { findNavController().navigateUp() } else -> (activity as? MainActivity)?.onBackPressed() diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/methodselection/SelectPaymentMethodFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/methodselection/SelectPaymentMethodFragment.kt index 17333b63d31..1ae99ad6c5a 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/methodselection/SelectPaymentMethodFragment.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/methodselection/SelectPaymentMethodFragment.kt @@ -18,11 +18,10 @@ import com.google.android.material.snackbar.Snackbar import com.woocommerce.android.R import com.woocommerce.android.analytics.AnalyticsTracker import com.woocommerce.android.databinding.FragmentSelectPaymentMethodBinding -import com.woocommerce.android.extensions.WindowSizeClass import com.woocommerce.android.extensions.handleDialogNotice import com.woocommerce.android.extensions.handleDialogResult +import com.woocommerce.android.extensions.isTwoPanesShouldBeUsed import com.woocommerce.android.extensions.navigateSafely -import com.woocommerce.android.extensions.windowSizeClass import com.woocommerce.android.ui.base.BaseFragment import com.woocommerce.android.ui.dialog.WooDialog import com.woocommerce.android.ui.main.AppBarStatus @@ -225,7 +224,7 @@ class SelectPaymentMethodFragment : BaseFragment(R.layout.fragment_select_paymen } is NavigateBackToOrderList -> { - if (requireContext().windowSizeClass > WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { // in tablet mode the [SelectPaymentMethodFragment] is shown in the details pane. // We should pop the back stack to show the [OrderDetailsFragment]. findNavController().popBackStack() diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/UpdateProductStockStatusFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/UpdateProductStockStatusFragment.kt index 1f7627e98ef..04f0f4b956e 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/UpdateProductStockStatusFragment.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/UpdateProductStockStatusFragment.kt @@ -10,9 +10,8 @@ import androidx.fragment.app.DialogFragment import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import com.woocommerce.android.R -import com.woocommerce.android.extensions.WindowSizeClass +import com.woocommerce.android.extensions.isTwoPanesShouldBeUsed import com.woocommerce.android.extensions.navigateBackWithResult -import com.woocommerce.android.extensions.windowSizeClass import com.woocommerce.android.ui.base.UIMessageResolver import com.woocommerce.android.ui.compose.composeView import com.woocommerce.android.ui.products.UpdateProductStockStatusViewModel.UpdateStockStatusUiState @@ -40,7 +39,7 @@ class UpdateProductStockStatusFragment : DialogFragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - if (context?.windowSizeClass != WindowSizeClass.Compact) { + if (context?.isTwoPanesShouldBeUsed == true) { setStyle(STYLE_NO_TITLE, R.style.Theme_Woo_Dialog) } else { setStyle(STYLE_NO_TITLE, R.style.Theme_Woo) @@ -74,14 +73,14 @@ class UpdateProductStockStatusFragment : DialogFragment() { override fun onStart() { super.onStart() - val windowSizeClass = context?.windowSizeClass + val isTwoPaneLayout = context?.isTwoPanesShouldBeUsed val width = DisplayUtils.getWindowPixelWidth(requireContext()) val height = DisplayUtils.getWindowPixelHeight(requireContext()) val isLandscape = DisplayUtils.isLandscape(context) val (widthRatio, heightRatio) = when { - windowSizeClass == WindowSizeClass.Compact -> 1f to 1f + isTwoPaneLayout == false -> 1f to 1f isLandscape -> LANDSCAPE_WIDTH_RATIO to LANDSCAPE_HEIGHT_RATIO else -> PORTRAIT_WIDTH_RATIO to PORTRAIT_HEIGHT_RATIO } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/details/ProductDetailFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/details/ProductDetailFragment.kt index 4050df62e72..bd09e9afb1f 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/details/ProductDetailFragment.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/details/ProductDetailFragment.kt @@ -25,16 +25,15 @@ import com.woocommerce.android.RequestCodes import com.woocommerce.android.analytics.AnalyticsEvent import com.woocommerce.android.analytics.AnalyticsTracker import com.woocommerce.android.databinding.FragmentProductDetailBinding -import com.woocommerce.android.extensions.WindowSizeClass import com.woocommerce.android.extensions.fastStripHtml import com.woocommerce.android.extensions.handleNotice import com.woocommerce.android.extensions.handleResult import com.woocommerce.android.extensions.hide +import com.woocommerce.android.extensions.isTwoPanesShouldBeUsed import com.woocommerce.android.extensions.navigateSafely import com.woocommerce.android.extensions.parcelable import com.woocommerce.android.extensions.show import com.woocommerce.android.extensions.takeIfNotEqualTo -import com.woocommerce.android.extensions.windowSizeClass import com.woocommerce.android.model.Product import com.woocommerce.android.model.Product.Image import com.woocommerce.android.ui.aztec.AztecEditorFragment @@ -171,7 +170,7 @@ class ProductDetailFragment : * to show selected product in the right pane. */ private fun handleOnePaneToTwoPaneConversion() { - val isScreenLargerThanCompact = requireContext().windowSizeClass != WindowSizeClass.Compact + val isScreenLargerThanCompact = requireContext().isTwoPanesShouldBeUsed val isProductListFragmentUpInBackStack = findNavController().previousBackStackEntry?.destination?.id == R.id.products if (isScreenLargerThanCompact && isProductListFragmentUpInBackStack) { diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/details/ProductDetailViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/details/ProductDetailViewModel.kt index 553c75c000c..fd161ca46ae 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/details/ProductDetailViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/details/ProductDetailViewModel.kt @@ -17,7 +17,7 @@ import com.woocommerce.android.R import com.woocommerce.android.analytics.AnalyticsEvent import com.woocommerce.android.analytics.AnalyticsTracker import com.woocommerce.android.analytics.AnalyticsTrackerWrapper -import com.woocommerce.android.analytics.IsScreenLargerThanCompactValue +import com.woocommerce.android.analytics.IsScreenInTwoPaneLayout import com.woocommerce.android.analytics.deviceTypeToAnalyticsString import com.woocommerce.android.extensions.addNewItem import com.woocommerce.android.extensions.clearList @@ -1500,7 +1500,7 @@ class ProductDetailViewModel @Inject constructor( AnalyticsTracker.KEY_HAS_LINKED_PRODUCTS to product.hasLinkedProducts(), AnalyticsTracker.KEY_HAS_MIN_MAX_QUANTITY_RULES to product.hasQuantityRules(), AnalyticsTracker.KEY_HORIZONTAL_SIZE_CLASS to - IsScreenLargerThanCompactValue(isWindowClassLargeThanCompact()).deviceTypeToAnalyticsString, + IsScreenInTwoPaneLayout(isWindowClassLargeThanCompact()).deviceTypeToAnalyticsString, ) tracker.track(AnalyticsEvent.PRODUCT_DETAIL_LOADED, properties) } @@ -1509,7 +1509,7 @@ class ProductDetailViewModel @Inject constructor( AnalyticsEvent.PRODUCT_DETAIL_LOADED, mapOf( AnalyticsTracker.KEY_HORIZONTAL_SIZE_CLASS to - IsScreenLargerThanCompactValue(isWindowClassLargeThanCompact()).deviceTypeToAnalyticsString + IsScreenInTwoPaneLayout(isWindowClassLargeThanCompact()).deviceTypeToAnalyticsString ) ) } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/list/ProductListViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/list/ProductListViewModel.kt index bcfaba1d3b3..407431153bb 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/list/ProductListViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/list/ProductListViewModel.kt @@ -11,7 +11,7 @@ import com.woocommerce.android.R import com.woocommerce.android.analytics.AnalyticsEvent import com.woocommerce.android.analytics.AnalyticsTracker import com.woocommerce.android.analytics.AnalyticsTrackerWrapper -import com.woocommerce.android.analytics.IsScreenLargerThanCompactValue +import com.woocommerce.android.analytics.IsScreenInTwoPaneLayout import com.woocommerce.android.analytics.deviceTypeToAnalyticsString import com.woocommerce.android.extensions.EXPAND_COLLAPSE_ANIMATION_DURATION_MILLIS import com.woocommerce.android.model.Product @@ -213,7 +213,7 @@ class ProductListViewModel @Inject constructor( analyticsTracker.track( AnalyticsEvent.PRODUCT_LIST_ADD_PRODUCT_BUTTON_TAPPED, mapOf( - AnalyticsTracker.KEY_HORIZONTAL_SIZE_CLASS to IsScreenLargerThanCompactValue( + AnalyticsTracker.KEY_HORIZONTAL_SIZE_CLASS to IsScreenInTwoPaneLayout( isWindowClassLargeThanCompact() ).deviceTypeToAnalyticsString ) @@ -468,7 +468,7 @@ class ProductListViewModel @Inject constructor( analyticsTracker.track( AnalyticsEvent.PRODUCT_LIST_PRODUCT_TAPPED, mapOf( - AnalyticsTracker.KEY_HORIZONTAL_SIZE_CLASS to IsScreenLargerThanCompactValue( + AnalyticsTracker.KEY_HORIZONTAL_SIZE_CLASS to IsScreenInTwoPaneLayout( isWindowClassLargeThanCompact() ).deviceTypeToAnalyticsString ) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/selector/ProductSelectorDialogFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/selector/ProductSelectorDialogFragment.kt index 7089a45cef5..55e354b5f54 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/selector/ProductSelectorDialogFragment.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/selector/ProductSelectorDialogFragment.kt @@ -11,9 +11,8 @@ import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import com.woocommerce.android.R -import com.woocommerce.android.extensions.WindowSizeClass +import com.woocommerce.android.extensions.isTwoPanesShouldBeUsed import com.woocommerce.android.extensions.navigateBackWithResult -import com.woocommerce.android.extensions.windowSizeClass import com.woocommerce.android.ui.compose.theme.WooThemeWithBackground import com.woocommerce.android.ui.products.ProductNavigationTarget import com.woocommerce.android.ui.products.ProductNavigator @@ -41,7 +40,7 @@ class ProductSelectorDialogFragment : DialogFragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - if (requireContext().windowSizeClass != WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { setStyle(STYLE_NO_TITLE, R.style.Theme_Woo_Dialog_RoundedCorners_NoMinWidth) } else { /* This draws the dialog as full screen */ @@ -76,7 +75,7 @@ class ProductSelectorDialogFragment : DialogFragment() { override fun onStart() { super.onStart() - if (requireContext().windowSizeClass != WindowSizeClass.Compact) { + if (requireContext().isTwoPanesShouldBeUsed) { dialog?.window?.setLayout( (DisplayUtils.getWindowPixelWidth(requireContext()) * TABLET_LANDSCAPE_WIDTH_RATIO).toInt(), (DisplayUtils.getWindowPixelHeight(requireContext()) * TABLET_LANDSCAPE_HEIGHT_RATIO).toInt() diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/util/TabletLayoutSetupHelper.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/util/TabletLayoutSetupHelper.kt index 0d3a44ab4e6..8eb42ff9c91 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/util/TabletLayoutSetupHelper.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/util/TabletLayoutSetupHelper.kt @@ -15,8 +15,7 @@ import androidx.navigation.NavOptions import androidx.navigation.fragment.NavHostFragment import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.woocommerce.android.R -import com.woocommerce.android.extensions.WindowSizeClass -import com.woocommerce.android.extensions.windowSizeClass +import com.woocommerce.android.extensions.isTwoPanesShouldBeUsed import org.wordpress.android.util.DisplayUtils import javax.inject.Inject @@ -73,7 +72,7 @@ class TabletLayoutSetupHelper @Inject constructor(private val context: Context) tabletNavigateTo: () -> Pair, navigateWithPhoneNavigation: () -> Unit ) { - if (context.windowSizeClass != WindowSizeClass.Compact) { + if (context.isTwoPanesShouldBeUsed) { val navOptions = NavOptions.Builder() .setPopUpTo(navHostFragment!!.navController.graph.startDestinationId, true) @@ -94,10 +93,9 @@ class TabletLayoutSetupHelper @Inject constructor(private val context: Context) private fun setDetailsMargins(rootView: View) { if (rootView !is ViewGroup) return - val marginPart = when (context.windowSizeClass) { - WindowSizeClass.Compact -> return - WindowSizeClass.ExpandedAndBigger -> MARGINS_FOR_TABLET - WindowSizeClass.Medium -> MARGINS_FOR_SMALL_TABLET_PORTRAIT + val marginPart = when (context.isTwoPanesShouldBeUsed) { + false -> return + true -> MARGINS_FOR_TABLET } val windowWidth = DisplayUtils.getWindowPixelWidth(context) @@ -139,7 +137,7 @@ class TabletLayoutSetupHelper @Inject constructor(private val context: Context) } private fun adjustUIForScreenSize(screen: Screen) { - if (context.windowSizeClass != WindowSizeClass.Compact) { + if (context.isTwoPanesShouldBeUsed) { adjustLayoutForTablet(screen) } else { adjustLayoutForNonTablet(screen) @@ -147,13 +145,9 @@ class TabletLayoutSetupHelper @Inject constructor(private val context: Context) } private fun adjustLayoutForTablet(screen: Screen) { - when (context.windowSizeClass) { - WindowSizeClass.Compact -> return - WindowSizeClass.Medium -> { - screen.twoPaneLayoutGuideline.setGuidelinePercent(TABLET_PORTRAIT_WIDTH_RATIO) - } - - WindowSizeClass.ExpandedAndBigger -> { + when (context.isTwoPanesShouldBeUsed) { + false -> return + true -> { screen.twoPaneLayoutGuideline.setGuidelinePercent(TABLET_LANDSCAPE_WIDTH_RATIO) } } @@ -183,10 +177,8 @@ class TabletLayoutSetupHelper @Inject constructor(private val context: Context) private companion object { private const val TABLET_LANDSCAPE_WIDTH_RATIO = 0.3f - private const val TABLET_PORTRAIT_WIDTH_RATIO = 0.40f private const val MARGINS_FOR_TABLET: Float = 0.1F - private const val MARGINS_FOR_SMALL_TABLET_PORTRAIT: Float = 0.025F } interface Screen { diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/util/UiHelpers.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/util/UiHelpers.kt index c1012335723..d7a0b690a25 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/util/UiHelpers.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/util/UiHelpers.kt @@ -9,8 +9,8 @@ import androidx.annotation.DrawableRes import androidx.annotation.StringRes import androidx.core.text.HtmlCompat import com.woocommerce.android.extensions.WindowSizeClass +import com.woocommerce.android.extensions.isTwoPanesShouldBeUsed import com.woocommerce.android.extensions.windowHeightSizeClass -import com.woocommerce.android.extensions.windowSizeClass import com.woocommerce.android.model.UiDimen import com.woocommerce.android.model.UiDimen.UiDimenDPInt import com.woocommerce.android.model.UiDimen.UiDimenRes @@ -95,9 +95,5 @@ object UiHelpers { } class IsWindowClassLargeThanCompact @Inject constructor(val context: Context) { - operator fun invoke() = context.windowSizeClass != WindowSizeClass.Compact -} - -class IsWindowClassExpandedAndBigger @Inject constructor(val context: Context) { - operator fun invoke() = context.windowSizeClass >= WindowSizeClass.ExpandedAndBigger + operator fun invoke() = context.isTwoPanesShouldBeUsed }