Skip to content

Commit f95f022

Browse files
authored
Update Settings: Update feature flag (#5480)
Task/Issue URL: https://app.asana.com/0/0/1209171570131451/f ### Description Updates the feature toggle to `settingsPage` and add two new sub-flags for controlling the rollout: - `newSettingsPage` for showing the screen and all changes **except** the privacy pro section - `newPrivacyProSection` for showing/hiding the new privacy pro section items ### Steps to test this PR _New Settings_ - [ ] Enable `newSettingsPage` in the Feature Flag Inventory - [ ] Press back - [ ] Open Settings again - [ ] The new settings screen should be displayed - [ ] Privacy Pro should remain unchanged _New Privacy Pro Section_ - [ ] Enable `newPrivacyProSection` in the Feature Flag Inventory - [ ] Press back - [ ] Open Settings again - [ ] The new settings screen should be displayed - [ ] The new Privacy Pro section should be displayed _New Privacy Pro Section and legacy settings_ - [ ] Disable `newSettingsPage` in the Feature Flag Inventory - [ ] Press back - [ ] Open Settings again - [ ] The legacy settings screen should be displayed - [ ] The new Privacy Pro section should be displayed ### UI changes N/A
1 parent b8b57d1 commit f95f022

File tree

17 files changed

+132
-69
lines changed

17 files changed

+132
-69
lines changed

app/src/main/java/com/duckduckgo/app/about/AboutDuckDuckGoActivity.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ import com.duckduckgo.common.utils.AppUrl.Url
4545
import com.duckduckgo.di.scopes.ActivityScope
4646
import com.duckduckgo.mobile.android.R.attr
4747
import com.duckduckgo.navigation.api.GlobalActivityStarter
48-
import com.duckduckgo.settings.api.NewSettingsFeature
48+
import com.duckduckgo.settings.api.SettingsPageFeature
4949
import com.duckduckgo.subscriptions.api.PrivacyProFeedbackScreens.GeneralPrivacyProFeedbackScreenNoParams
5050
import com.google.android.material.snackbar.Snackbar
5151
import javax.inject.Inject
@@ -57,7 +57,7 @@ import kotlinx.coroutines.flow.onEach
5757
class AboutDuckDuckGoActivity : DuckDuckGoActivity() {
5858

5959
@Inject
60-
lateinit var settingsFeature: NewSettingsFeature
60+
lateinit var settingsPageFeature: SettingsPageFeature
6161

6262
private val viewModel: AboutDuckDuckGoViewModel by bindViewModel()
6363
private val binding: ActivityAboutDuckDuckGoBinding by viewBinding()
@@ -81,7 +81,7 @@ class AboutDuckDuckGoActivity : DuckDuckGoActivity() {
8181
setContentView(binding.root)
8282
setupToolbar(binding.includeToolbar.toolbar)
8383

84-
if (settingsFeature.self().isEnabled()) {
84+
if (settingsPageFeature.newSettingsPage().isEnabled()) {
8585
supportActionBar?.setTitle(R.string.aboutActivityTitleNew)
8686
binding.includeContent.aboutTextNew.isVisible = true
8787

@@ -100,7 +100,7 @@ class AboutDuckDuckGoActivity : DuckDuckGoActivity() {
100100
}
101101

102102
private fun configureClickableLinks() {
103-
if (settingsFeature.self().isEnabled()) {
103+
if (settingsPageFeature.newSettingsPage().isEnabled()) {
104104
with(binding.includeContent.aboutTextNew) {
105105
text = addClickableLinks()
106106
movementMethod = LinkMovementMethod.getInstance()
@@ -115,7 +115,7 @@ class AboutDuckDuckGoActivity : DuckDuckGoActivity() {
115115

116116
private fun addClickableLinks(): SpannableString {
117117
val fullText = getText(
118-
if (settingsFeature.self().isEnabled()) {
118+
if (settingsPageFeature.newSettingsPage().isEnabled()) {
119119
R.string.aboutDescriptionNew
120120
} else {
121121
R.string.aboutDescription

app/src/main/java/com/duckduckgo/app/firebutton/FireButtonActivity.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ import com.duckduckgo.common.ui.DuckDuckGoActivity
4444
import com.duckduckgo.common.ui.view.dialog.RadioListAlertDialogBuilder
4545
import com.duckduckgo.common.ui.viewbinding.viewBinding
4646
import com.duckduckgo.di.scopes.ActivityScope
47-
import com.duckduckgo.settings.api.NewSettingsFeature
47+
import com.duckduckgo.settings.api.SettingsPageFeature
4848
import javax.inject.Inject
4949
import kotlinx.coroutines.flow.launchIn
5050
import kotlinx.coroutines.flow.onEach
@@ -61,7 +61,7 @@ class FireButtonActivity : DuckDuckGoActivity() {
6161
lateinit var appBuildConfig: AppBuildConfig
6262

6363
@Inject
64-
lateinit var newSettingsFeature: NewSettingsFeature
64+
lateinit var settingsPageFeature: SettingsPageFeature
6565

6666
private val viewModel: FireButtonViewModel by bindViewModel()
6767
private val legacyBinding: ActivityFireButtonBinding by viewBinding() // TODO remove
@@ -70,7 +70,7 @@ class FireButtonActivity : DuckDuckGoActivity() {
7070
override fun onCreate(savedInstanceState: Bundle?) {
7171
super.onCreate(savedInstanceState)
7272

73-
if (newSettingsFeature.self().isEnabled()) {
73+
if (settingsPageFeature.newSettingsPage().isEnabled()) {
7474
setContentView(binding.root)
7575
setupToolbar(binding.includeToolbar.toolbar)
7676
supportActionBar?.setTitle(R.string.dataClearingActivityTitle)

app/src/main/java/com/duckduckgo/app/privatesearch/PrivateSearchActivity.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import com.duckduckgo.common.ui.DuckDuckGoActivity
3333
import com.duckduckgo.common.ui.viewbinding.viewBinding
3434
import com.duckduckgo.di.scopes.ActivityScope
3535
import com.duckduckgo.navigation.api.GlobalActivityStarter
36-
import com.duckduckgo.settings.api.NewSettingsFeature
36+
import com.duckduckgo.settings.api.SettingsPageFeature
3737
import javax.inject.Inject
3838
import kotlinx.coroutines.flow.launchIn
3939
import kotlinx.coroutines.flow.onEach
@@ -46,7 +46,7 @@ class PrivateSearchActivity : DuckDuckGoActivity() {
4646
lateinit var globalActivityStarter: GlobalActivityStarter
4747

4848
@Inject
49-
lateinit var newSettingsFeature: NewSettingsFeature
49+
lateinit var settingsPageFeature: SettingsPageFeature
5050

5151
private val viewModel: PrivateSearchViewModel by bindViewModel()
5252
private val binding: ActivityPrivateSearchBinding by viewBinding()
@@ -65,7 +65,7 @@ class PrivateSearchActivity : DuckDuckGoActivity() {
6565
setContentView(binding.root)
6666
setupToolbar(binding.includeToolbar.toolbar)
6767

68-
if (newSettingsFeature.self().isEnabled()) {
68+
if (settingsPageFeature.newSettingsPage().isEnabled()) {
6969
with(binding) {
7070
privateSearchHeaderImage.isGone = true
7171
privateSearchTitle.isGone = true

app/src/main/java/com/duckduckgo/app/settings/LegacySettingsActivity.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ import com.duckduckgo.mobile.android.app.tracking.ui.AppTrackingProtectionScreen
6363
import com.duckduckgo.mobile.android.app.tracking.ui.AppTrackingProtectionScreens.AppTrackerOnboardingActivityWithEmptyParamsParams
6464
import com.duckduckgo.navigation.api.GlobalActivityStarter
6565
import com.duckduckgo.settings.api.DuckPlayerSettingsPlugin
66-
import com.duckduckgo.settings.api.NewSettingsFeature
6766
import com.duckduckgo.settings.api.ProSettingsPlugin
67+
import com.duckduckgo.settings.api.SettingsPageFeature
6868
import com.duckduckgo.sync.api.SyncActivityWithEmptyParams
6969
import com.duckduckgo.windows.api.ui.WindowsScreenWithEmptyParams
7070
import javax.inject.Inject
@@ -107,7 +107,7 @@ class LegacySettingsActivity : DuckDuckGoActivity() {
107107
}
108108

109109
@Inject
110-
lateinit var newSettingsFeature: NewSettingsFeature
110+
lateinit var settingsPageFeature: SettingsPageFeature
111111

112112
private val viewsPrivacy
113113
get() = binding.includeSettings.contentSettingsPrivacy

app/src/main/java/com/duckduckgo/app/settings/SettingsActivity.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,20 @@ import com.duckduckgo.anvil.annotations.InjectWith
2424
import com.duckduckgo.browser.api.ui.BrowserScreens.SettingsScreenNoParams
2525
import com.duckduckgo.common.ui.DuckDuckGoActivity
2626
import com.duckduckgo.di.scopes.ActivityScope
27-
import com.duckduckgo.settings.api.NewSettingsFeature
27+
import com.duckduckgo.settings.api.SettingsPageFeature
2828
import javax.inject.Inject
2929

3030
@InjectWith(ActivityScope::class)
3131
@ContributeToActivityStarter(SettingsScreenNoParams::class, screenName = "settings")
3232
class SettingsActivity : DuckDuckGoActivity() {
3333

3434
@Inject
35-
lateinit var newSettingsFeature: NewSettingsFeature
35+
lateinit var settingsPageFeature: SettingsPageFeature
3636

3737
override fun onCreate(savedInstanceState: Bundle?) {
3838
super.onCreate(savedInstanceState)
3939

40-
if (newSettingsFeature.self().isEnabled()) {
40+
if (settingsPageFeature.newSettingsPage().isEnabled()) {
4141
startActivity(NewSettingsActivity.intent(this))
4242
} else {
4343
startActivity(LegacySettingsActivity.intent(this))

app/src/main/java/com/duckduckgo/app/webtrackingprotection/WebTrackingProtectionActivity.kt

+7-7
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ import com.duckduckgo.common.utils.extensions.html
4444
import com.duckduckgo.di.scopes.ActivityScope
4545
import com.duckduckgo.mobile.android.R as CommonR
4646
import com.duckduckgo.navigation.api.GlobalActivityStarter
47-
import com.duckduckgo.settings.api.NewSettingsFeature
47+
import com.duckduckgo.settings.api.SettingsPageFeature
4848
import javax.inject.Inject
4949
import kotlinx.coroutines.flow.launchIn
5050
import kotlinx.coroutines.flow.onEach
@@ -57,7 +57,7 @@ class WebTrackingProtectionActivity : DuckDuckGoActivity() {
5757
lateinit var globalActivityStarter: GlobalActivityStarter
5858

5959
@Inject
60-
lateinit var newSettingsFeature: NewSettingsFeature
60+
lateinit var settingsPageFeature: SettingsPageFeature
6161

6262
private val viewModel: WebTrackingProtectionViewModel by bindViewModel()
6363
private val binding: ActivityWebTrackingProtectionBinding by viewBinding()
@@ -70,7 +70,7 @@ class WebTrackingProtectionActivity : DuckDuckGoActivity() {
7070

7171
override fun updateDrawState(ds: TextPaint) {
7272
super.updateDrawState(ds)
73-
if (newSettingsFeature.self().isEnabled()) {
73+
if (settingsPageFeature.newSettingsPage().isEnabled()) {
7474
ds.color = getColorFromAttr(CommonR.attr.daxColorAccentBlue)
7575
ds.isUnderlineText = false
7676
}
@@ -83,7 +83,7 @@ class WebTrackingProtectionActivity : DuckDuckGoActivity() {
8383
setContentView(binding.root)
8484
setupToolbar(binding.includeToolbar.toolbar)
8585

86-
if (newSettingsFeature.self().isEnabled()) {
86+
if (settingsPageFeature.newSettingsPage().isEnabled()) {
8787
with(binding) {
8888
webTrackingProtectionHeaderImage.isGone = true
8989
webTrackingProtectionTitle.isGone = true
@@ -108,7 +108,7 @@ class WebTrackingProtectionActivity : DuckDuckGoActivity() {
108108

109109
private fun configureClickableLink() {
110110
val htmlGPCText = getString(
111-
if (newSettingsFeature.self().isEnabled()) {
111+
if (settingsPageFeature.newSettingsPage().isEnabled()) {
112112
R.string.webTrackingProtectionDescriptionNew
113113
} else {
114114
R.string.webTrackingProtectionDescription
@@ -118,7 +118,7 @@ class WebTrackingProtectionActivity : DuckDuckGoActivity() {
118118
val urlSpans = htmlGPCText.getSpans(0, htmlGPCText.length, URLSpan::class.java)
119119
urlSpans?.forEach {
120120
gpcSpannableString.apply {
121-
if (newSettingsFeature.self().isEnabled()) {
121+
if (settingsPageFeature.newSettingsPage().isEnabled()) {
122122
insert(getSpanStart(it), "\n")
123123
}
124124
setSpan(
@@ -131,7 +131,7 @@ class WebTrackingProtectionActivity : DuckDuckGoActivity() {
131131
trim()
132132
}
133133
}
134-
if (newSettingsFeature.self().isEnabled()) {
134+
if (settingsPageFeature.newSettingsPage().isEnabled()) {
135135
binding.webTrackingProtectionDescriptionNew.apply {
136136
text = gpcSpannableString
137137
movementMethod = LinkMovementMethod.getInstance()

autoconsent/autoconsent-impl/src/main/java/com/duckduckgo/autoconsent/impl/ui/AutoconsentSettingsActivity.kt

+8-8
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ import com.duckduckgo.common.utils.extensions.html
4545
import com.duckduckgo.di.scopes.ActivityScope
4646
import com.duckduckgo.mobile.android.R as CommonR
4747
import com.duckduckgo.navigation.api.GlobalActivityStarter
48-
import com.duckduckgo.settings.api.NewSettingsFeature
48+
import com.duckduckgo.settings.api.SettingsPageFeature
4949
import javax.inject.Inject
5050
import kotlinx.coroutines.flow.launchIn
5151
import kotlinx.coroutines.flow.onEach
@@ -57,7 +57,7 @@ class AutoconsentSettingsActivity : DuckDuckGoActivity() {
5757
lateinit var globalActivityStarter: GlobalActivityStarter
5858

5959
@Inject
60-
lateinit var newSettingsFeature: NewSettingsFeature
60+
lateinit var settingsPageFeature: SettingsPageFeature
6161

6262
private val binding: ActivityAutoconsentSettingsBinding by viewBinding()
6363

@@ -77,7 +77,7 @@ class AutoconsentSettingsActivity : DuckDuckGoActivity() {
7777

7878
override fun updateDrawState(ds: TextPaint) {
7979
super.updateDrawState(ds)
80-
if (newSettingsFeature.self().isEnabled()) {
80+
if (settingsPageFeature.newSettingsPage().isEnabled()) {
8181
ds.color = getColorFromAttr(CommonR.attr.daxColorAccentBlue)
8282
ds.isUnderlineText = false
8383
}
@@ -90,7 +90,7 @@ class AutoconsentSettingsActivity : DuckDuckGoActivity() {
9090
setContentView(binding.root)
9191
setupToolbar(toolbar)
9292

93-
if (newSettingsFeature.self().isEnabled()) {
93+
if (settingsPageFeature.newSettingsPage().isEnabled()) {
9494
with(binding) {
9595
autoconsentHeaderImage.isVisible = true
9696
autoconsentTitle.isVisible = true
@@ -121,7 +121,7 @@ class AutoconsentSettingsActivity : DuckDuckGoActivity() {
121121
}
122122

123123
private fun render(viewState: ViewState) {
124-
if (newSettingsFeature.self().isEnabled()) {
124+
if (settingsPageFeature.newSettingsPage().isEnabled()) {
125125
with(binding) {
126126
autoconsentHeaderImage.setImageResource(
127127
if (viewState.autoconsentEnabled) R.drawable.cookie_popups_check_128 else R.drawable.cookie_block_128,
@@ -145,7 +145,7 @@ class AutoconsentSettingsActivity : DuckDuckGoActivity() {
145145

146146
private fun configureClickableLink() {
147147
val htmlText = getString(
148-
if (newSettingsFeature.self().isEnabled()) {
148+
if (settingsPageFeature.newSettingsPage().isEnabled()) {
149149
R.string.autoconsentDescriptionNew
150150
} else {
151151
R.string.autoconsentDescription
@@ -155,7 +155,7 @@ class AutoconsentSettingsActivity : DuckDuckGoActivity() {
155155
val urlSpans = htmlText.getSpans(0, htmlText.length, URLSpan::class.java)
156156
urlSpans?.forEach {
157157
spannableString.apply {
158-
if (newSettingsFeature.self().isEnabled()) {
158+
if (settingsPageFeature.newSettingsPage().isEnabled()) {
159159
insert(spannableString.getSpanStart(it), "\n")
160160
}
161161
setSpan(
@@ -168,7 +168,7 @@ class AutoconsentSettingsActivity : DuckDuckGoActivity() {
168168
trim()
169169
}
170170
}
171-
if (newSettingsFeature.self().isEnabled()) {
171+
if (settingsPageFeature.newSettingsPage().isEnabled()) {
172172
binding.autoconsentDescriptionNew.apply {
173173
text = spannableString
174174
movementMethod = LinkMovementMethod.getInstance()

autoconsent/autoconsent-impl/src/main/java/com/duckduckgo/autoconsent/impl/ui/AutoconsentSettingsViewModel.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import com.duckduckgo.autoconsent.impl.pixels.AutoConsentPixel.SETTINGS_AUTOCONS
2727
import com.duckduckgo.autoconsent.impl.pixels.AutoConsentPixel.SETTINGS_AUTOCONSENT_ON
2828
import com.duckduckgo.autoconsent.impl.pixels.AutoConsentPixel.SETTINGS_AUTOCONSENT_SHOWN
2929
import com.duckduckgo.di.scopes.ActivityScope
30-
import com.duckduckgo.settings.api.NewSettingsFeature
30+
import com.duckduckgo.settings.api.SettingsPageFeature
3131
import javax.inject.Inject
3232
import kotlinx.coroutines.channels.BufferOverflow
3333
import kotlinx.coroutines.channels.Channel
@@ -41,7 +41,7 @@ import kotlinx.coroutines.launch
4141
class AutoconsentSettingsViewModel @Inject constructor(
4242
private val autoconsent: Autoconsent,
4343
private val pixel: Pixel,
44-
private val newSettingsFeature: NewSettingsFeature,
44+
private val settingsPageFeature: SettingsPageFeature,
4545
) : ViewModel() {
4646
data class ViewState(
4747
val autoconsentEnabled: Boolean,
@@ -57,7 +57,7 @@ class AutoconsentSettingsViewModel @Inject constructor(
5757
val viewState: StateFlow<ViewState> = viewStateFlow
5858

5959
init {
60-
if (newSettingsFeature.self().isEnabled()) {
60+
if (settingsPageFeature.newSettingsPage().isEnabled()) {
6161
pixel.fire(SETTINGS_AUTOCONSENT_SHOWN)
6262
}
6363
}
@@ -68,7 +68,7 @@ class AutoconsentSettingsViewModel @Inject constructor(
6868

6969
fun onUserToggleAutoconsent(enabled: Boolean) {
7070
viewModelScope.launch {
71-
if (newSettingsFeature.self().isEnabled()) {
71+
if (settingsPageFeature.newSettingsPage().isEnabled()) {
7272
pixel.fire(
7373
if (enabled) {
7474
SETTINGS_AUTOCONSENT_ON

0 commit comments

Comments
 (0)