Skip to content

Commit af9157b

Browse files
authored
Input Screen - Individual Feature/Button Usage pixels (#6748)
Task/Issue URL: https://app.asana.com/1/137249556945/project/1208671518894266/task/1211257482984657?focus=true ### Description Adds pixels for various interactions with the Input Screen and its buttons. ### Steps to test this PR - [x] (optional) Setup your logcat filter to: `package:mine message:Pixel sent: aichat` - [x] Install the app and ensure that the Input Screen is disabled. - [x] Click the omnibar to focus it. - [x] Click the back arrow in the omnibar. - [x] Verify `m_aichat_legacy_omnibar_back_button_pressed` pixel is sent. - [x] Go to Settings -> AI Features and enabled the Input Screen. - [x] Go back to the browser and click on the omnibar. - [x] Verify that `m_aichat_experimental_omnibar_text_area_focused` pixel is sent with `orientation=portrait` params. - [x] Use the "x" button to clear omnibar text. - [x] Verify that `m_aichat_experimental_omnibar_clear_button_pressed` pixel is sent with `mode=search` params. - [x] Switch to Duck.ai. - [x] Verify that `m_aichat_experimental_omnibar_mode_switched` pixel is sent with `direction=to_duckai, had_text=false` params. - [x] Type text into the input box. - [x] Click the new line button. - [x] Verify that `m_aichat_experimental_omnibar_floating_return_pressed` pixel is sent. - [x] Switch to Search (do not submit). - [x] Verify that `m_aichat_experimental_omnibar_mode_switched` pixel is sent with `direction=to_search, had_text=true` params. - [x] Click on the floating arrow button to submit the search query. - [x] Verify that `m_aichat_experimental_omnibar_floating_submit_pressed` pixel is sent with `mode=search` params. - [x] Click on the omnibar. - [x] Type anything. - [x] Click the submit button on the floating keyboard. - [x] Verify that `m_aichat_experimental_omnibar_keyboard_go_pressed` pixel is sent with `mode=search` params. - [x] Click on the omnibar. - [x] Switch to Duck.ai. - [x] Click on the back arrow in the toolbar. - [x] Verify that `m_aichat_experimental_omnibar_back_button_pressed` pixel is sent with `mode=aiChat` params. - [x] Rotate the device to landscape. - [x] Click on the omnibar. - [x] Verify that `m_aichat_experimental_omnibar_text_area_focused` pixel is sent with `orientation=landscape` params.
1 parent 0526418 commit af9157b

File tree

8 files changed

+219
-12
lines changed

8 files changed

+219
-12
lines changed

app/src/main/java/com/duckduckgo/app/browser/omnibar/OmnibarLayoutViewModel.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -768,6 +768,7 @@ class OmnibarLayoutViewModel @Inject constructor(
768768
AppPixelName.ADDRESS_BAR_SERP_CLOSED,
769769
AppPixelName.ADDRESS_BAR_WEBSITE_CLOSED,
770770
)
771+
pixel.fire(DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_LEGACY_OMNIBAR_BACK_BUTTON_PRESSED)
771772
}
772773

773774
fun onEnterKeyPressed() {

app/src/test/java/com/duckduckgo/app/browser/omnibar/OmnibarLayoutViewModelTest.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1920,4 +1920,10 @@ class OmnibarLayoutViewModelTest {
19201920
assertTrue(capturedHasQueryChanged == true)
19211921
}
19221922
}
1923+
1924+
@Test
1925+
fun whenBackButtonPressedThenDuckChatLegacyOmnibarBackButtonPixelSent() = runTest {
1926+
testee.onBackButtonPressed()
1927+
verify(pixel).fire(DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_LEGACY_OMNIBAR_BACK_BUTTON_PRESSED)
1928+
}
19231929
}

duckchat/duckchat-impl/src/main/java/com/duckduckgo/duckchat/impl/inputscreen/ui/InputScreenActivity.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,19 @@
1616

1717
package com.duckduckgo.duckchat.impl.inputscreen.ui
1818

19+
import android.content.res.Configuration
1920
import android.os.Build.VERSION
2021
import android.os.Bundle
2122
import com.duckduckgo.anvil.annotations.ContributeToActivityStarter
2223
import com.duckduckgo.anvil.annotations.InjectWith
24+
import com.duckduckgo.app.statistics.pixels.Pixel
2325
import com.duckduckgo.common.ui.DuckDuckGoActivity
2426
import com.duckduckgo.di.scopes.ActivityScope
2527
import com.duckduckgo.duckchat.api.inputscreen.BrowserAndInputScreenTransitionProvider
2628
import com.duckduckgo.duckchat.api.inputscreen.InputScreenActivityParams
2729
import com.duckduckgo.duckchat.impl.R
2830
import com.duckduckgo.duckchat.impl.inputscreen.ui.metrics.discovery.InputScreenDiscoveryFunnel
31+
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName
2932
import javax.inject.Inject
3033

3134
@InjectWith(ActivityScope::class)
@@ -38,10 +41,21 @@ class InputScreenActivity : DuckDuckGoActivity() {
3841
@Inject
3942
lateinit var inputScreenDiscoveryFunnel: InputScreenDiscoveryFunnel
4043

44+
@Inject
45+
lateinit var pixel: Pixel
46+
4147
override fun onCreate(savedInstanceState: Bundle?) {
4248
super.onCreate(savedInstanceState)
4349
setContentView(R.layout.activity_input_screen)
4450
inputScreenDiscoveryFunnel.onInputScreenOpened()
51+
val params = mapOf(
52+
"orientation" to if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
53+
"landscape"
54+
} else {
55+
"portrait"
56+
},
57+
)
58+
pixel.fire(pixel = DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_TEXT_AREA_FOCUSED, parameters = params)
4559
}
4660

4761
override fun finish() {

duckchat/duckchat-impl/src/main/java/com/duckduckgo/duckchat/impl/inputscreen/ui/InputScreenFragment.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import androidx.lifecycle.ViewModelProvider
2727
import androidx.lifecycle.lifecycleScope
2828
import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback
2929
import com.duckduckgo.anvil.annotations.InjectWith
30+
import com.duckduckgo.app.statistics.pixels.Pixel
3031
import com.duckduckgo.common.ui.DuckDuckGoFragment
3132
import com.duckduckgo.common.ui.viewbinding.viewBinding
3233
import com.duckduckgo.common.utils.extensions.hideKeyboard
@@ -52,6 +53,7 @@ import com.duckduckgo.duckchat.impl.inputscreen.ui.tabs.InputScreenPagerAdapter
5253
import com.duckduckgo.duckchat.impl.inputscreen.ui.viewmodel.InputScreenViewModel
5354
import com.duckduckgo.duckchat.impl.inputscreen.ui.viewmodel.InputScreenViewModel.InputScreenViewModelFactory
5455
import com.duckduckgo.duckchat.impl.inputscreen.ui.viewmodel.InputScreenViewModel.InputScreenViewModelProviderFactory
56+
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName
5557
import com.duckduckgo.navigation.api.getActivityParams
5658
import com.duckduckgo.voice.api.VoiceSearchAvailability
5759
import com.duckduckgo.voice.api.VoiceSearchLauncher
@@ -72,6 +74,9 @@ class InputScreenFragment : DuckDuckGoFragment(R.layout.fragment_input_screen) {
7274
@Inject
7375
lateinit var voiceSearchAvailability: VoiceSearchAvailability
7476

77+
@Inject
78+
lateinit var pixel: Pixel
79+
7580
@Inject
7681
lateinit var viewModelFactory: InputScreenViewModelFactory
7782

@@ -120,13 +125,16 @@ class InputScreenFragment : DuckDuckGoFragment(R.layout.fragment_input_screen) {
120125
)
121126

122127
binding.actionSend.setOnClickListener {
128+
// todo remove round-tripping through the input mode widget - actions should go directly to the view model
123129
binding.inputModeWidget.submitMessage()
130+
viewModel.onSendButtonClicked()
124131
}
125132
binding.inputModeWidget.inputField.post {
126133
showKeyboard(binding.inputModeWidget.inputField)
127134
}
128135
binding.actionNewLine.setOnClickListener {
129136
binding.inputModeWidget.printNewLine()
137+
pixel.fire(DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_FLOATING_RETURN_PRESSED)
130138
}
131139

132140
viewModel.fireShownPixel()

duckchat/duckchat-impl/src/main/java/com/duckduckgo/duckchat/impl/inputscreen/ui/view/InputModeWidget.kt

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,19 +40,27 @@ import androidx.core.view.isVisible
4040
import androidx.core.widget.doAfterTextChanged
4141
import androidx.core.widget.doOnTextChanged
4242
import com.duckduckgo.anvil.annotations.InjectWith
43+
import com.duckduckgo.app.statistics.pixels.Pixel
4344
import com.duckduckgo.common.ui.view.addBottomShadow
44-
import com.duckduckgo.di.scopes.ActivityScope
45+
import com.duckduckgo.di.scopes.ViewScope
4546
import com.duckduckgo.duckchat.impl.R
47+
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName
48+
import com.duckduckgo.duckchat.impl.pixel.inputScreenPixelsModeParam
4649
import com.google.android.material.card.MaterialCardView
4750
import com.google.android.material.tabs.TabLayout
51+
import dagger.android.support.AndroidSupportInjection
52+
import javax.inject.Inject
4853

49-
@InjectWith(ActivityScope::class)
54+
@InjectWith(ViewScope::class)
5055
class InputModeWidget @JvmOverloads constructor(
5156
context: Context,
5257
attrs: AttributeSet? = null,
5358
defStyle: Int = 0,
5459
) : ConstraintLayout(context, attrs, defStyle) {
5560

61+
@Inject
62+
lateinit var pixel: Pixel
63+
5664
val inputField: EditText
5765
private val inputFieldClearText: View
5866
private val inputModeWidgetBack: View
@@ -113,6 +121,11 @@ class InputModeWidget @JvmOverloads constructor(
113121
configureShadow()
114122
}
115123

124+
override fun onAttachedToWindow() {
125+
AndroidSupportInjection.inject(this)
126+
super.onAttachedToWindow()
127+
}
128+
116129
fun provideInitialText(text: String) {
117130
originalText = text
118131
this.text = text
@@ -128,8 +141,15 @@ class InputModeWidget @JvmOverloads constructor(
128141
inputField.setSelection(0)
129142
inputField.scrollTo(0, 0)
130143
beginChangeBoundsTransition()
144+
val params = inputScreenPixelsModeParam(isSearchMode = inputModeSwitch.selectedTabPosition == 0)
145+
pixel.fire(DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_CLEAR_BUTTON_PRESSED, parameters = params)
146+
}
147+
inputModeWidgetBack.setOnClickListener {
148+
onBack?.invoke()
149+
150+
val params = inputScreenPixelsModeParam(isSearchMode = inputModeSwitch.selectedTabPosition == 0)
151+
pixel.fire(DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_BACK_BUTTON_PRESSED, parameters = params)
131152
}
132-
inputModeWidgetBack.setOnClickListener { onBack?.invoke() }
133153
inputField.setOnClickListener {
134154
onInputFieldClicked?.invoke()
135155
}
@@ -141,6 +161,9 @@ class InputModeWidget @JvmOverloads constructor(
141161
setOnEditorActionListener { _, actionId, _ ->
142162
if (actionId == EditorInfo.IME_ACTION_GO) {
143163
submitMessage()
164+
165+
val params = inputScreenPixelsModeParam(isSearchMode = inputModeSwitch.selectedTabPosition == 0)
166+
pixel.fire(DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_KEYBOARD_GO_PRESSED, parameters = params)
144167
true
145168
} else {
146169
false

duckchat/duckchat-impl/src/main/java/com/duckduckgo/duckchat/impl/inputscreen/ui/viewmodel/InputScreenViewModel.kt

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENT
6666
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_SESSION_BOTH_MODES_DAILY
6767
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_SHOWN
6868
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelParameters
69+
import com.duckduckgo.duckchat.impl.pixel.inputScreenPixelsModeParam
6970
import com.duckduckgo.history.api.NavigationHistory
7071
import com.duckduckgo.voice.api.VoiceSearchAvailability
7172
import dagger.assisted.Assisted
@@ -140,6 +141,7 @@ class InputScreenViewModel @AssistedInject constructor(
140141

141142
private val initialSearchInputText = currentOmnibarText.trim()
142143
private val searchInputTextState = MutableStateFlow(initialSearchInputText)
144+
private val chatInputTextState = MutableStateFlow("")
143145

144146
private val _submitButtonIconState = MutableStateFlow(SubmitButtonIconState(SubmitButtonIcon.SEARCH))
145147
val submitButtonIconState: StateFlow<SubmitButtonIconState> = _submitButtonIconState.asStateFlow()
@@ -352,6 +354,7 @@ class InputScreenViewModel @AssistedInject constructor(
352354
}
353355

354356
fun onChatInputTextChanged(query: String) {
357+
chatInputTextState.value = query.trim()
355358
_visibilityState.update {
356359
it.copy(showChatLogo = (query == initialSearchInputText && !it.autoCompleteSuggestionsVisible) || query.isEmpty())
357360
}
@@ -414,7 +417,7 @@ class InputScreenViewModel @AssistedInject constructor(
414417
}
415418
}
416419
if (userSelectedMode == SEARCH) {
417-
fireModeSwitchedPixel()
420+
fireModeSwitchedPixel(directionToSearch = false)
418421
}
419422
userSelectedMode = CHAT
420423
}
@@ -426,11 +429,16 @@ class InputScreenViewModel @AssistedInject constructor(
426429
}
427430
}
428431
if (userSelectedMode == CHAT) {
429-
fireModeSwitchedPixel()
432+
fireModeSwitchedPixel(directionToSearch = true)
430433
}
431434
userSelectedMode = SEARCH
432435
}
433436

437+
fun onSendButtonClicked() {
438+
val pixelParams = inputScreenPixelsModeParam(isSearchMode = userSelectedMode == SEARCH)
439+
pixel.fire(DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_FLOATING_SUBMIT_PRESSED, parameters = pixelParams)
440+
}
441+
434442
fun onVoiceSearchDisabled() {
435443
voiceServiceAvailable.value = false
436444
}
@@ -484,8 +492,21 @@ class InputScreenViewModel @AssistedInject constructor(
484492
pixel.fire(DUCK_CHAT_EXPERIMENTAL_OMNIBAR_SHOWN, type = Daily())
485493
}
486494

487-
private fun fireModeSwitchedPixel() {
488-
pixel.fire(DUCK_CHAT_EXPERIMENTAL_OMNIBAR_MODE_SWITCHED)
495+
private fun fireModeSwitchedPixel(directionToSearch: Boolean) {
496+
val hadText = if (directionToSearch) {
497+
chatInputTextState.value.isNotBlank()
498+
} else {
499+
searchInputTextState.value.isNotBlank()
500+
}
501+
val params = mapOf(
502+
"direction" to if (directionToSearch) {
503+
"to_search"
504+
} else {
505+
"to_duckai"
506+
},
507+
"had_text" to hadText.toString(),
508+
)
509+
pixel.fire(pixel = DUCK_CHAT_EXPERIMENTAL_OMNIBAR_MODE_SWITCHED, parameters = params)
489510
}
490511

491512
private suspend fun checkAndFireBothModesPixel() {

duckchat/duckchat-impl/src/main/java/com/duckduckgo/duckchat/impl/pixel/DuckChatPixels.kt

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,21 @@ import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENT
3535
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_ADDRESS_BAR_SETTING_ON
3636
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_LEGACY_OMNIBAR_AICHAT_BUTTON_PRESSED
3737
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_LEGACY_OMNIBAR_AICHAT_BUTTON_PRESSED_DAILY
38+
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_LEGACY_OMNIBAR_BACK_BUTTON_PRESSED
3839
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_LEGACY_OMNIBAR_QUERY_SUBMITTED
3940
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_LEGACY_OMNIBAR_QUERY_SUBMITTED_DAILY
4041
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_LEGACY_OMNIBAR_SHOWN
42+
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_BACK_BUTTON_PRESSED
43+
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_CLEAR_BUTTON_PRESSED
4144
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_FIRST_ENABLED
4245
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_FIRST_INTERACTION
4346
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_FIRST_PROMPT_SUBMISSION
4447
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_FIRST_SEARCH_SUBMISSION
4548
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_FIRST_SETTINGS_VIEWED
49+
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_FLOATING_RETURN_PRESSED
50+
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_FLOATING_SUBMIT_PRESSED
4651
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_FULL_CONVERSION_USER
52+
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_KEYBOARD_GO_PRESSED
4753
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_MODE_SWITCHED
4854
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_PROMPT_SUBMITTED
4955
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_PROMPT_SUBMITTED_DAILY
@@ -53,6 +59,7 @@ import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENT
5359
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_SESSION_BOTH_MODES_DAILY
5460
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_SESSION_SUMMARY
5561
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_SHOWN
62+
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_EXPERIMENTAL_OMNIBAR_TEXT_AREA_FOCUSED
5663
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_IS_ENABLED_DAILY
5764
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_MENU_SETTING_OFF
5865
import com.duckduckgo.duckchat.impl.pixel.DuckChatPixelName.DUCK_CHAT_MENU_SETTING_ON
@@ -93,7 +100,6 @@ class RealDuckChatPixels @Inject constructor(
93100
private val duckChatFeatureRepository: DuckChatFeatureRepository,
94101
@AppCoroutineScope private val appCoroutineScope: CoroutineScope,
95102
private val dispatcherProvider: DispatcherProvider,
96-
97103
) : DuckChatPixels {
98104

99105
override fun sendReportMetricPixel(reportMetric: ReportMetric) {
@@ -164,11 +170,20 @@ enum class DuckChatPixelName(override val pixelName: String) : Pixel.PixelName {
164170
DUCK_CHAT_EXPERIMENTAL_OMNIBAR_FIRST_SEARCH_SUBMISSION("m_aichat_experimental_omnibar_first_search_submission"),
165171
DUCK_CHAT_EXPERIMENTAL_OMNIBAR_FIRST_PROMPT_SUBMISSION("m_aichat_experimental_omnibar_first_prompt_submission"),
166172
DUCK_CHAT_EXPERIMENTAL_OMNIBAR_FULL_CONVERSION_USER("m_aichat_experimental_omnibar_full_conversion_user"),
173+
AUTOCOMPLETE_DUCKAI_PROMPT_EXPERIMENTAL_SELECTION("m_autocomplete_click_duckai_experimental"),
174+
DUCK_CHAT_EXPERIMENTAL_OMNIBAR_TEXT_AREA_FOCUSED("m_aichat_experimental_omnibar_text_area_focused"),
175+
DUCK_CHAT_EXPERIMENTAL_OMNIBAR_CLEAR_BUTTON_PRESSED("m_aichat_experimental_omnibar_clear_button_pressed"),
176+
DUCK_CHAT_EXPERIMENTAL_OMNIBAR_BACK_BUTTON_PRESSED("m_aichat_experimental_omnibar_back_button_pressed"),
177+
DUCK_CHAT_EXPERIMENTAL_OMNIBAR_KEYBOARD_GO_PRESSED("m_aichat_experimental_omnibar_keyboard_go_pressed"),
178+
DUCK_CHAT_EXPERIMENTAL_OMNIBAR_FLOATING_SUBMIT_PRESSED("m_aichat_experimental_omnibar_floating_submit_pressed"),
179+
DUCK_CHAT_EXPERIMENTAL_OMNIBAR_FLOATING_RETURN_PRESSED("m_aichat_experimental_omnibar_floating_return_pressed"),
180+
DUCK_CHAT_EXPERIMENTAL_LEGACY_OMNIBAR_BACK_BUTTON_PRESSED("m_aichat_legacy_omnibar_back_button_pressed"),
167181
}
168182

169183
object DuckChatPixelParameters {
170184
const val WAS_USED_BEFORE = "was_used_before"
171185
const val DELTA_TIMESTAMP_PARAMETERS = "delta-timestamp-minutes"
186+
const val INPUT_SCREEN_MODE = "mode"
172187
}
173188

174189
@ContributesMultibinding(AppScope::class)
@@ -222,6 +237,21 @@ class DuckChatParamRemovalPlugin @Inject constructor() : PixelParamRemovalPlugin
222237
DUCK_CHAT_EXPERIMENTAL_OMNIBAR_FIRST_SEARCH_SUBMISSION.pixelName to PixelParameter.removeAtb(),
223238
DUCK_CHAT_EXPERIMENTAL_OMNIBAR_FIRST_PROMPT_SUBMISSION.pixelName to PixelParameter.removeAtb(),
224239
DUCK_CHAT_EXPERIMENTAL_OMNIBAR_FULL_CONVERSION_USER.pixelName to PixelParameter.removeAtb(),
240+
DUCK_CHAT_EXPERIMENTAL_OMNIBAR_TEXT_AREA_FOCUSED.pixelName to PixelParameter.removeAtb(),
241+
DUCK_CHAT_EXPERIMENTAL_OMNIBAR_CLEAR_BUTTON_PRESSED.pixelName to PixelParameter.removeAtb(),
242+
DUCK_CHAT_EXPERIMENTAL_OMNIBAR_BACK_BUTTON_PRESSED.pixelName to PixelParameter.removeAtb(),
243+
DUCK_CHAT_EXPERIMENTAL_OMNIBAR_KEYBOARD_GO_PRESSED.pixelName to PixelParameter.removeAtb(),
244+
DUCK_CHAT_EXPERIMENTAL_OMNIBAR_FLOATING_SUBMIT_PRESSED.pixelName to PixelParameter.removeAtb(),
245+
DUCK_CHAT_EXPERIMENTAL_OMNIBAR_FLOATING_RETURN_PRESSED.pixelName to PixelParameter.removeAtb(),
246+
DUCK_CHAT_EXPERIMENTAL_LEGACY_OMNIBAR_BACK_BUTTON_PRESSED.pixelName to PixelParameter.removeAtb(),
225247
)
226248
}
227249
}
250+
251+
internal fun inputScreenPixelsModeParam(isSearchMode: Boolean) = mapOf(
252+
DuckChatPixelParameters.INPUT_SCREEN_MODE to if (isSearchMode) {
253+
"search"
254+
} else {
255+
"aiChat"
256+
},
257+
)

0 commit comments

Comments
 (0)