Skip to content

Commit c01b1cf

Browse files
authored
Tab swiping: Add a subfeature flag (#5844)
Task/Issue URL: https://app.asana.com/0/414730916066338/1209846575622295/f ### Description This PR adds a subfeature flag `onForInternalUsers` and `onForExternalUsers` (the feature flag for prod users to enable staged rollout). The flag is used inside a `SwipingTabsFeatureProvider` wrapper so nothing else should be affected. The original flag feature flag will be used to keep the feature enabled for all internal users. After this, the updated privacy config will look like this: ``` "swipingTabs": { "state": "enabled", "minSupportedVersion": 52271000, "features": { "onForInternalUsers": { "state": "internal" }, "onForExternalUsers": { "state": "enabled", "rollout": { "steps": [ { "percent": 20 } ] } } } } ``` ### Steps to test this PR _Internal test_ - [x] Replace the privacy config URL to: `https://jsonblob.com/api/1356597958694592512` - [x] Run the app using an internal build - [x] Verify the tab swiping is working
1 parent d389446 commit c01b1cf

File tree

5 files changed

+14
-1
lines changed

5 files changed

+14
-1
lines changed

app/src/androidTest/java/com/duckduckgo/app/browser/BrowserTabViewModelTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,7 @@ class BrowserTabViewModelTest {
543543
MockitoAnnotations.openMocks(this)
544544

545545
swipingTabsFeature.self().setRawStoredState(State(enable = true))
546+
swipingTabsFeature.onForInternalUsers().setRawStoredState(State(enable = true))
546547

547548
db = Room.inMemoryDatabaseBuilder(context, AppDatabase::class.java)
548549
.allowMainThreadQueries()

app/src/main/java/com/duckduckgo/app/browser/SwipingTabsFeature.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,15 @@ import com.duckduckgo.feature.toggles.api.Toggle
2525
featureName = "swipingTabs",
2626
)
2727
interface SwipingTabsFeature {
28+
// The main kill switch for the feature
2829
@Toggle.DefaultValue(false)
2930
fun self(): Toggle
31+
32+
// The toggle used to enable the feature for internal users
33+
@Toggle.DefaultValue(false)
34+
fun onForInternalUsers(): Toggle
35+
36+
// The toggle used to enable the feature for external users
37+
@Toggle.DefaultValue(false)
38+
fun onForExternalUsers(): Toggle
3039
}

app/src/main/java/com/duckduckgo/app/browser/SwipingTabsFeatureProvider.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class SwipingTabsFeatureProvider @Inject constructor(
2525
swipingTabsFeature: SwipingTabsFeature,
2626
) {
2727
val isEnabled: Boolean by lazy {
28-
swipingTabsFeature.self().isEnabled()
28+
swipingTabsFeature.self().isEnabled() &&
29+
(swipingTabsFeature.onForInternalUsers().isEnabled() || swipingTabsFeature.onForExternalUsers().isEnabled())
2930
}
3031
}

app/src/test/java/com/duckduckgo/app/browser/BrowserViewModelTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ class BrowserViewModelTest {
111111

112112
configureSkipUrlConversionInNewTabState(enabled = true)
113113
swipingTabsFeature.self().setRawStoredState(State(enable = false))
114+
swipingTabsFeature.onForInternalUsers().setRawStoredState(State(enable = true))
114115

115116
whenever(mockDefaultBrowserPromptsExperiment.commands).thenReturn(defaultBrowserPromptsExperimentCommandsFlow.receiveAsFlow())
116117

app/src/test/java/com/duckduckgo/app/tabs/ui/TabSwitcherViewModelTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ class TabSwitcherViewModelTest {
134134
MockitoAnnotations.openMocks(this)
135135

136136
swipingTabsFeature.self().setRawStoredState(State(enable = true))
137+
swipingTabsFeature.onForInternalUsers().setRawStoredState(State(enable = true))
137138

138139
whenever(mockTabRepository.flowDeletableTabs)
139140
.thenReturn(repoDeletableTabs.consumeAsFlow())

0 commit comments

Comments
 (0)