Skip to content

Commit 6dfbab0

Browse files
authored
Merge pull request #14225 from woocommerce/issue/WOOMOB-572-pos-as-a-tab-analytics
[POS as a Tab] Analytics
2 parents cf45861 + 10aff47 commit 6dfbab0

File tree

6 files changed

+47
-35
lines changed

6 files changed

+47
-35
lines changed

WooCommerce/src/main/kotlin/com/woocommerce/android/analytics/AnalyticsEvent.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,7 @@ enum class AnalyticsEvent(override val siteless: Boolean = false) : IAnalyticsEv
505505
MAIN_TAB_ORDERS_RESELECTED,
506506
MAIN_TAB_PRODUCTS_SELECTED,
507507
MAIN_TAB_PRODUCTS_RESELECTED,
508+
MAIN_TAB_POS_SELECTED,
508509
MAIN_TAB_HUB_MENU_SELECTED,
509510
MAIN_TAB_HUB_MENU_RESELECTED,
510511

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/main/BottomNavigationPosition.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,22 @@ import com.woocommerce.android.R
55
const val MY_STORE_POSITION = 0
66
const val ORDERS_POSITION = 1
77
const val PRODUCTS_POSITION = 2
8-
const val MORE_POSITION = 3
8+
const val POS_POSITION = 3
9+
const val MORE_POSITION = 4
910

1011
enum class BottomNavigationPosition(val position: Int, val id: Int) {
1112
MY_STORE(MY_STORE_POSITION, R.id.dashboard),
1213
ORDERS(ORDERS_POSITION, R.id.orders),
1314
PRODUCTS(PRODUCTS_POSITION, R.id.products),
15+
POS(POS_POSITION, R.id.point_of_sale),
1416
MORE(MORE_POSITION, R.id.moreMenu)
1517
}
1618

1719
fun findNavigationPositionById(id: Int): BottomNavigationPosition = when (id) {
1820
BottomNavigationPosition.MY_STORE.id -> BottomNavigationPosition.MY_STORE
1921
BottomNavigationPosition.ORDERS.id -> BottomNavigationPosition.ORDERS
2022
BottomNavigationPosition.PRODUCTS.id -> BottomNavigationPosition.PRODUCTS
23+
BottomNavigationPosition.POS.id -> BottomNavigationPosition.POS
2124
BottomNavigationPosition.MORE.id -> BottomNavigationPosition.MORE
2225
else -> BottomNavigationPosition.MY_STORE
2326
}

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/main/MainActivity.kt

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ import com.woocommerce.android.ui.login.LoginActivity
6868
import com.woocommerce.android.ui.main.BottomNavigationPosition.MORE
6969
import com.woocommerce.android.ui.main.BottomNavigationPosition.MY_STORE
7070
import com.woocommerce.android.ui.main.BottomNavigationPosition.ORDERS
71+
import com.woocommerce.android.ui.main.BottomNavigationPosition.POS
7172
import com.woocommerce.android.ui.main.BottomNavigationPosition.PRODUCTS
7273
import com.woocommerce.android.ui.main.MainActivityViewModel.BottomBarState
7374
import com.woocommerce.android.ui.main.MainActivityViewModel.MoreMenuBadgeState.Hidden
@@ -749,18 +750,28 @@ class MainActivity :
749750
binding.bottomNav.setOrderBadgeCount(0)
750751
}
751752

752-
override fun onNavItemSelected(navPos: BottomNavigationPosition) {
753+
override fun onNavItemSelected(navPos: BottomNavigationPosition): Boolean {
753754
val stat = when (navPos) {
754755
MY_STORE -> AnalyticsEvent.MAIN_TAB_DASHBOARD_SELECTED
755756
ORDERS -> AnalyticsEvent.MAIN_TAB_ORDERS_SELECTED
756757
PRODUCTS -> AnalyticsEvent.MAIN_TAB_PRODUCTS_SELECTED
758+
POS -> AnalyticsEvent.MAIN_TAB_POS_SELECTED
757759
MORE -> AnalyticsEvent.MAIN_TAB_HUB_MENU_SELECTED
758760
}
759761
AnalyticsTracker.track(stat, mapOf(KEY_HORIZONTAL_SIZE_CLASS to deviceTypeToAnalyticsString))
760762

761763
if (navPos == ORDERS) {
762764
viewModel.removeOrderNotifications()
763765
}
766+
767+
if (navPos == POS) {
768+
posTabController.navigateToPOS()
769+
770+
// Do not keep the tab selected for POS
771+
return false
772+
}
773+
774+
return true
764775
}
765776

766777
override fun onNavItemReselected(navPos: BottomNavigationPosition) {
@@ -769,8 +780,11 @@ class MainActivity :
769780
ORDERS -> AnalyticsEvent.MAIN_TAB_ORDERS_RESELECTED
770781
PRODUCTS -> AnalyticsEvent.MAIN_TAB_PRODUCTS_RESELECTED
771782
MORE -> AnalyticsEvent.MAIN_TAB_HUB_MENU_RESELECTED
783+
POS -> null
784+
}
785+
stat?.let {
786+
AnalyticsTracker.track(it, mapOf(KEY_HORIZONTAL_SIZE_CLASS to deviceTypeToAnalyticsString))
772787
}
773-
AnalyticsTracker.track(stat, mapOf(KEY_HORIZONTAL_SIZE_CLASS to deviceTypeToAnalyticsString))
774788

775789
// if we're at the root scroll the active fragment to the top
776790
// TODO bring back clearing the backstack when the navgraphs are fixed to support multiple backstacks:

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/main/MainBottomNavigationView.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class MainBottomNavigationView @JvmOverloads constructor(
3131
private lateinit var moreMenuBadge: BadgeDrawable
3232

3333
interface MainNavigationListener {
34-
fun onNavItemSelected(navPos: BottomNavigationPosition)
34+
fun onNavItemSelected(navPos: BottomNavigationPosition): Boolean
3535
fun onNavItemReselected(navPos: BottomNavigationPosition)
3636
}
3737

@@ -135,11 +135,8 @@ class MainBottomNavigationView @JvmOverloads constructor(
135135

136136
override fun onNavigationItemSelected(item: MenuItem): Boolean {
137137
navController?.let { navController ->
138-
val navSuccess = NavigationUI.onNavDestinationSelected(item, navController)
139-
if (navSuccess) {
140-
listener.onNavItemSelected(findNavigationPositionById(item.itemId))
141-
return true
142-
}
138+
NavigationUI.onNavDestinationSelected(item, navController)
139+
return listener.onNavItemSelected(findNavigationPositionById(item.itemId))
143140
}
144141
return false
145142
}

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/tab/WooPosTabController.kt

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,24 @@ import androidx.lifecycle.DefaultLifecycleObserver
55
import androidx.lifecycle.LifecycleOwner
66
import androidx.lifecycle.lifecycleScope
77
import androidx.navigation.NavController
8-
import androidx.navigation.ui.NavigationUI
98
import com.woocommerce.android.AppPrefs
109
import com.woocommerce.android.R
1110
import com.woocommerce.android.databinding.ActivityMainBinding
1211
import com.woocommerce.android.tools.SelectedSite
1312
import com.woocommerce.android.ui.main.MainActivity
1413
import com.woocommerce.android.ui.woopos.WooPosIsEnabled
1514
import com.woocommerce.android.ui.woopos.root.WooPosActivity
15+
import com.woocommerce.android.ui.woopos.util.analytics.WooPosAnalyticsEvent
16+
import com.woocommerce.android.ui.woopos.util.analytics.WooPosAnalyticsTracker
1617
import kotlinx.coroutines.launch
1718
import javax.inject.Inject
1819

1920
class WooPosTabController @Inject constructor(
2021
private val appPrefs: AppPrefs,
2122
private val selectedSite: SelectedSite,
2223
private val isWooPosEnabled: WooPosIsEnabled,
23-
private val isPosAsTabEnabled: WooPosIsPosAsTabEnabled
24+
private val isPosAsTabEnabled: WooPosIsPosAsTabEnabled,
25+
private val analyticsTracker: WooPosAnalyticsTracker
2426
) : DefaultLifecycleObserver {
2527

2628
private lateinit var activity: MainActivity
@@ -37,11 +39,7 @@ class WooPosTabController @Inject constructor(
3739
this.navController = navController
3840

3941
activity.lifecycle.addObserver(this)
40-
}
41-
42-
override fun onCreate(owner: LifecycleOwner) {
43-
super.onCreate(owner)
44-
setupPOSTab()
42+
setPOSTabVisibility(false)
4543
}
4644

4745
override fun onResume(owner: LifecycleOwner) {
@@ -54,13 +52,6 @@ class WooPosTabController @Inject constructor(
5452
owner.lifecycle.removeObserver(this)
5553
}
5654

57-
private fun setupPOSTab() {
58-
setPOSTabVisibility(false)
59-
if (isPosAsTabEnabled()) {
60-
setupPOSTabNavigation()
61-
}
62-
}
63-
6455
fun refreshPOSTabVisibility() {
6556
setPOSTabVisibility(false)
6657
if (isPosAsTabEnabled()) {
@@ -72,6 +63,10 @@ class WooPosTabController @Inject constructor(
7263
}
7364
}
7465

66+
fun navigateToPOS() {
67+
activity.startActivity(Intent(activity, WooPosActivity::class.java))
68+
}
69+
7570
private fun updatePOSTabVisibilityFromPrefs() = setPOSTabVisibility(
7671
appPrefs.isPOSTabVisibleForSite(selectedSite.getSelectedSiteId())
7772
)
@@ -81,22 +76,11 @@ class WooPosTabController @Inject constructor(
8176
val isWooPosEnabledValue = isWooPosEnabled()
8277
setPOSTabVisibility(isWooPosEnabledValue)
8378
appPrefs.setPOSTabVisibilityForSite(selectedSite.getSelectedSiteId(), isWooPosEnabledValue)
79+
analyticsTracker.track(WooPosAnalyticsEvent.Event.TabVisibilityChecked(isWooPosEnabledValue))
8480
}
8581
}
8682

8783
private fun setPOSTabVisibility(isVisible: Boolean) {
8884
binding.bottomNav.menu.findItem(R.id.point_of_sale)?.isVisible = isVisible
8985
}
90-
91-
private fun setupPOSTabNavigation() {
92-
binding.bottomNav.setOnItemSelectedListener { item ->
93-
when (item.itemId) {
94-
R.id.point_of_sale -> {
95-
activity.startActivity(Intent(activity, WooPosActivity::class.java))
96-
false // return false to *not* keep the tab selected
97-
}
98-
else -> NavigationUI.onNavDestinationSelected(item, navController)
99-
}
100-
}
101-
}
10286
}

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosAnalyticsEvent.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,19 @@ sealed class WooPosAnalyticsEvent : IAnalyticsEvent {
9999
)
100100
}
101101
}
102+
103+
data class TabVisibilityChecked(val isVisible: Boolean) : Event() {
104+
override val name: String = "tab_visibility_checked"
105+
106+
init {
107+
addProperties(
108+
mapOf(
109+
"is_visible" to isVisible.toString()
110+
)
111+
)
112+
}
113+
}
114+
102115
data object ExitTapped : Event() {
103116
override val name: String = "exit_menu_item_tapped"
104117
}

0 commit comments

Comments
 (0)