Skip to content

Commit e8210d9

Browse files
authored
Add light theme pixels (#372)
1 parent f2e3e75 commit e8210d9

File tree

4 files changed

+40
-3
lines changed

4 files changed

+40
-3
lines changed

app/src/androidTest/java/com/duckduckgo/app/settings/SettingsViewModelTest.kt

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import com.duckduckgo.app.settings.db.SettingsDataStore
2929
import com.duckduckgo.app.statistics.Variant
3030
import com.duckduckgo.app.statistics.VariantManager
3131
import com.duckduckgo.app.statistics.VariantManager.VariantFeature.ThemeFeature.ThemeToggle
32+
import com.duckduckgo.app.statistics.pixels.Pixel
3233
import com.nhaarman.mockito_kotlin.*
3334
import org.junit.Assert.*
3435
import org.junit.Before
@@ -59,6 +60,9 @@ class SettingsViewModelTest {
5960
@Mock
6061
private lateinit var mockVariantManager: VariantManager
6162

63+
@Mock
64+
private lateinit var mockPixel: Pixel
65+
6266
private lateinit var commandCaptor: KArgumentCaptor<Command>
6367

6468
@Before
@@ -68,12 +72,18 @@ class SettingsViewModelTest {
6872
context = InstrumentationRegistry.getTargetContext()
6973
commandCaptor = argumentCaptor()
7074

71-
testee = SettingsViewModel(mockAppSettingsDataStore, mockDefaultBrowserDetector, mockVariantManager)
75+
testee = SettingsViewModel(mockAppSettingsDataStore, mockDefaultBrowserDetector, mockVariantManager, mockPixel)
7276
testee.command.observeForever(commandObserver)
7377

7478
whenever(mockVariantManager.getVariant()).thenReturn(VariantManager.DEFAULT_VARIANT)
7579
}
7680

81+
@Test
82+
fun whenViewModelInitialisedThenPixelIsFired() {
83+
testee // init
84+
verify(mockPixel).fire(Pixel.PixelName.SETTINGS_OPENED)
85+
}
86+
7787
@Test
7888
fun whenStartNotCalledYetThenViewStateInitialisedDefaultValues() {
7989
assertNotNull(testee.viewState)
@@ -111,6 +121,12 @@ class SettingsViewModelTest {
111121
assertEquals(Command.UpdateTheme, commandCaptor.firstValue)
112122
}
113123

124+
@Test
125+
fun whenLightThemeToggledOnThenLighThemePixelIsSent() {
126+
testee.onLightThemeToggled(true)
127+
verify(mockPixel).fire(Pixel.PixelName.SETTINGS_THEME_TOGGLED_LIGHT)
128+
}
129+
114130
@Test
115131
fun whenLightThemeTogglesOffThenDataStoreIsUpdatedAndUpdateThemeCommandIsSent() {
116132
testee.onLightThemeToggled(false)
@@ -121,6 +137,12 @@ class SettingsViewModelTest {
121137
assertEquals(Command.UpdateTheme, commandCaptor.firstValue)
122138
}
123139

140+
@Test
141+
fun whenLightThemeToggledOffThenDarkThemePixelIsSent() {
142+
testee.onLightThemeToggled(false)
143+
verify(mockPixel).fire(Pixel.PixelName.SETTINGS_THEME_TOGGLED_DARK)
144+
}
145+
124146
@Test
125147
fun whenAutocompleteSwitchedOnThenDataStoreIsUpdated() {
126148
testee.onAutocompleteSettingChanged(true)

app/src/main/java/com/duckduckgo/app/global/ViewModelFactory.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,8 @@ class ViewModelFactory @Inject constructor(
9494
isAssignableFrom(SettingsViewModel::class.java) -> SettingsViewModel(
9595
appSettingsPreferencesStore,
9696
defaultBrowserDetector,
97-
variantManager
97+
variantManager,
98+
pixel
9899
)
99100
isAssignableFrom(BookmarksViewModel::class.java) -> BookmarksViewModel(bookmarksDao)
100101
else -> throw IllegalArgumentException("Unknown ViewModel class: ${modelClass.name}")

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,16 @@ import com.duckduckgo.app.global.SingleLiveEvent
2525
import com.duckduckgo.app.settings.db.SettingsDataStore
2626
import com.duckduckgo.app.statistics.VariantManager
2727
import com.duckduckgo.app.statistics.VariantManager.VariantFeature.ThemeFeature.ThemeToggle
28+
import com.duckduckgo.app.statistics.pixels.Pixel
29+
import com.duckduckgo.app.statistics.pixels.Pixel.PixelName.*
2830
import timber.log.Timber
2931
import javax.inject.Inject
3032

3133
class SettingsViewModel @Inject constructor(
3234
private val settingsDataStore: SettingsDataStore,
3335
private val defaultWebBrowserCapability: DefaultBrowserDetector,
34-
private val variantManager: VariantManager
36+
private val variantManager: VariantManager,
37+
private val pixel: Pixel
3538
) : ViewModel() {
3639

3740
data class ViewState(
@@ -58,6 +61,10 @@ class SettingsViewModel @Inject constructor(
5861

5962
val command: SingleLiveEvent<Command> = SingleLiveEvent()
6063

64+
init {
65+
pixel.fire(SETTINGS_OPENED)
66+
}
67+
6168
fun start() {
6269

6370
val defaultBrowserAlready = defaultWebBrowserCapability.isCurrentlyConfiguredAsDefaultBrowser()
@@ -83,6 +90,9 @@ class SettingsViewModel @Inject constructor(
8390
Timber.i("User toggled light theme, is now enabled: $enabled")
8491
settingsDataStore.theme = if (enabled) DuckDuckGoTheme.LIGHT else DuckDuckGoTheme.DARK
8592
command.value = Command.UpdateTheme
93+
94+
val pixelName = if (enabled) SETTINGS_THEME_TOGGLED_LIGHT else SETTINGS_THEME_TOGGLED_DARK
95+
pixel.fire(pixelName)
8696
}
8797

8898
fun onAutocompleteSettingChanged(enabled: Boolean) {

app/src/main/java/com/duckduckgo/app/statistics/pixels/Pixel.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ interface Pixel {
5050
LONG_PRESS_SHARE("mlp_s"),
5151
LONG_PRESS_COPY_URL("mlp_c"),
5252

53+
SETTINGS_OPENED("ms"),
54+
SETTINGS_THEME_TOGGLED_LIGHT("ms_tl"),
55+
SETTINGS_THEME_TOGGLED_DARK("ms_td"),
56+
5357
HTTPS_UPGRADE_SITE_ERROR("ehd"),
5458
HTTPS_UPGRADE_SITE_SUMMARY("ehs")
5559
}

0 commit comments

Comments
 (0)