diff --git a/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/AppPrefsTest.kt b/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/AppPrefsTest.kt index bbe3685b1464..8c5e5c22b214 100644 --- a/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/AppPrefsTest.kt +++ b/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/AppPrefsTest.kt @@ -524,4 +524,29 @@ class AppPrefsTest { ) ).isTrue } + + @Test + fun givenSetPOSTabVisibilityForSiteCalledThenGetterReturnsTrue() { + // GIVEN + val siteId = 123 + + // WHEN + AppPrefs.setPOSTabVisibilityForSite(siteId, true) + val result = AppPrefs.isPOSTabVisibleForSite(siteId) + + // THEN + assertThat(result).isTrue + } + + @Test + fun givenPOSTabVisibilityNotSetThenGetterReturnsFalseByDefault() { + // GIVEN + val siteId = 456 + + // WHEN + val result = AppPrefs.isPOSTabVisibleForSite(siteId) + + // THEN + assertThat(result).isFalse + } } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/AppPrefs.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/AppPrefs.kt index 3d02cc9a8304..a942904613ef 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/AppPrefs.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/AppPrefs.kt @@ -207,6 +207,8 @@ object AppPrefs { USER_CLICKED_ON_PAYMENTS_MORE_SCREEN, APPLICATION_STORE_SNAPSHOT_TRACKED_FOR_SITE, + + POS_TAB_VISIBILITY, } fun init(context: Context) { @@ -1176,6 +1178,20 @@ object AppPrefs { return getInt(PrefKeyString(channel.name), 0).takeIf { it != 0 } } + fun setPOSTabVisibilityForSite(siteId: Int, visible: Boolean) { + setBoolean( + key = PrefKeyString("${UndeletablePrefKey.POS_TAB_VISIBILITY}:$siteId"), + value = visible + ) + } + + fun isPOSTabVisibleForSite(siteId: Int): Boolean { + return getBoolean( + key = PrefKeyString("${UndeletablePrefKey.POS_TAB_VISIBILITY}:$siteId"), + default = false + ) + } + /** * Remove all user and site-related preferences. */ diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/tab/WooPosTabController.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/tab/WooPosTabController.kt index 1d0339bde854..093592d1b72c 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/tab/WooPosTabController.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/tab/WooPosTabController.kt @@ -6,8 +6,10 @@ import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.lifecycleScope import androidx.navigation.NavController import androidx.navigation.ui.NavigationUI +import com.woocommerce.android.AppPrefs import com.woocommerce.android.R import com.woocommerce.android.databinding.ActivityMainBinding +import com.woocommerce.android.tools.SelectedSite import com.woocommerce.android.ui.main.MainActivity import com.woocommerce.android.ui.woopos.WooPosIsEnabled import com.woocommerce.android.ui.woopos.root.WooPosActivity @@ -15,6 +17,8 @@ import kotlinx.coroutines.launch import javax.inject.Inject class WooPosTabController @Inject constructor( + private val appPrefs: AppPrefs, + private val selectedSite: SelectedSite, private val isWooPosEnabled: WooPosIsEnabled, private val isPosAsTabEnabled: WooPosIsPosAsTabEnabled ) : DefaultLifecycleObserver { @@ -60,13 +64,23 @@ class WooPosTabController @Inject constructor( fun refreshPOSTabVisibility() { setPOSTabVisibility(false) if (isPosAsTabEnabled()) { - updatePOSTabVisibility() + // Load visibility from prefs for fast UI feedback + updatePOSTabVisibilityFromPrefs() + + // Then update with the remote value + updateTabVisibilityFromRemoteAndPersist() } } - private fun updatePOSTabVisibility() { + private fun updatePOSTabVisibilityFromPrefs() = setPOSTabVisibility( + appPrefs.isPOSTabVisibleForSite(selectedSite.getSelectedSiteId()) + ) + + private fun updateTabVisibilityFromRemoteAndPersist() { activity.lifecycleScope.launch { - setPOSTabVisibility(isWooPosEnabled()) + val isWooPosEnabledValue = isWooPosEnabled() + setPOSTabVisibility(isWooPosEnabledValue) + appPrefs.setPOSTabVisibilityForSite(selectedSite.getSelectedSiteId(), isWooPosEnabledValue) } }