Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -524,4 +524,30 @@ 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
}

}
16 changes: 16 additions & 0 deletions WooCommerce/src/main/kotlin/com/woocommerce/android/AppPrefs.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,21 @@ 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
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
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 {
Expand Down Expand Up @@ -60,13 +66,25 @@ 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 = withContext(Dispatchers.Default) {
isWooPosEnabled()
}
setPOSTabVisibility(isWooPosEnabledValue)
appPrefs.setPOSTabVisibilityForSite(selectedSite.getSelectedSiteId(), isWooPosEnabledValue)
}
}

Expand Down