Skip to content

Commit 8056e17

Browse files
committed
Add source to import flow pixels
1 parent dd71734 commit 8056e17

File tree

8 files changed

+100
-62
lines changed

8 files changed

+100
-62
lines changed

autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/AutofillImportLaunchSource.kt

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,14 @@
1616

1717
package com.duckduckgo.autofill.impl.importing
1818

19-
enum class AutofillImportLaunchSource(val value: String) {
20-
PasswordManagementPromo("passwords_management_promo"),
21-
AutofillSettings("autofill_settings"),
22-
PasswordManagementEmpty("passwords_management_empty"),
19+
import android.os.Parcelable
20+
import kotlinx.parcelize.Parcelize
21+
22+
@Parcelize
23+
enum class AutofillImportLaunchSource(val value: String) : Parcelable {
24+
PasswordManagementPromo("password_management_promo"),
25+
PasswordManagementEmptyState("password_management_empty_state"),
26+
PasswordManagementOverflow("password_management_overflow"),
27+
AutofillSettings("autofill_settings_button"),
28+
Unknown("unknown"),
2329
}

autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/ui/credential/management/AutofillPasswordsManagementViewModel.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import com.duckduckgo.autofill.impl.asString
3434
import com.duckduckgo.autofill.impl.deviceauth.DeviceAuthenticator
3535
import com.duckduckgo.autofill.impl.deviceauth.DeviceAuthenticator.AuthConfiguration
3636
import com.duckduckgo.autofill.impl.importing.AutofillImportLaunchSource
37+
import com.duckduckgo.autofill.impl.importing.AutofillImportLaunchSource.PasswordManagementPromo
3738
import com.duckduckgo.autofill.impl.pixel.AutofillPixelNames
3839
import com.duckduckgo.autofill.impl.pixel.AutofillPixelNames.AUTOFILL_DELETE_LOGIN
3940
import com.duckduckgo.autofill.impl.pixel.AutofillPixelNames.AUTOFILL_ENABLE_AUTOFILL_TOGGLE_MANUALLY_DISABLED
@@ -454,7 +455,7 @@ class AutofillPasswordsManagementViewModel @Inject constructor(
454455
viewModelScope.launch(dispatchers.io()) {
455456
autofillEffectDispatcher.effects.collect { effect ->
456457
when {
457-
effect is LaunchImportPasswords -> addCommand(LaunchImportGooglePasswords(showImportInstructions = false))
458+
effect is LaunchImportPasswords -> addCommand(LaunchImportGooglePasswords(PasswordManagementPromo))
458459
}
459460
}
460461
}
@@ -740,7 +741,7 @@ class AutofillPasswordsManagementViewModel @Inject constructor(
740741

741742
fun onImportPasswordsFromGooglePasswordManager() {
742743
viewModelScope.launch(dispatchers.io()) {
743-
addCommand(LaunchImportGooglePasswords(showImportInstructions = true))
744+
addCommand(LaunchImportGooglePasswords(importSource = AutofillImportLaunchSource.PasswordManagementEmptyState))
744745
}
745746
}
746747

@@ -814,7 +815,7 @@ class AutofillPasswordsManagementViewModel @Inject constructor(
814815
fun recordImportGooglePasswordButtonShown() {
815816
if (!importGooglePasswordButtonShownPixelSent) {
816817
importGooglePasswordButtonShownPixelSent = true
817-
val params = mapOf("source" to AutofillImportLaunchSource.PasswordManagementEmpty.value)
818+
val params = mapOf("source" to AutofillImportLaunchSource.PasswordManagementEmptyState.value)
818819
pixel.fire(AUTOFILL_IMPORT_GOOGLE_PASSWORDS_EMPTY_STATE_CTA_BUTTON_SHOWN, params)
819820
}
820821
}
@@ -904,7 +905,7 @@ class AutofillPasswordsManagementViewModel @Inject constructor(
904905
data object LaunchResetNeverSaveListConfirmation : ListModeCommand()
905906
data class LaunchDeleteAllPasswordsConfirmation(val numberToDelete: Int) : ListModeCommand()
906907
data class PromptUserToAuthenticateMassDeletion(val authConfiguration: AuthConfiguration) : ListModeCommand()
907-
data class LaunchImportGooglePasswords(val showImportInstructions: Boolean) : ListModeCommand()
908+
data class LaunchImportGooglePasswords(val importSource: AutofillImportLaunchSource) : ListModeCommand()
908909
data class LaunchReportAutofillBreakageConfirmation(val eTldPlusOne: String) : ListModeCommand()
909910
data object ShowUserReportSentMessage : ListModeCommand()
910911
data object ReevalutePromotions : ListModeCommand()

autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/ui/credential/management/importpassword/ImportPasswordsPixelSender.kt

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,12 @@ import com.squareup.anvil.annotations.ContributesBinding
3535
import javax.inject.Inject
3636

3737
interface ImportPasswordsPixelSender {
38-
fun onImportPasswordsDialogDisplayed()
39-
fun onImportPasswordsDialogImportButtonClicked()
40-
fun onUserCancelledImportPasswordsDialog()
41-
fun onUserCancelledImportWebFlow(stage: String)
42-
fun onImportSuccessful(savedCredentials: Int, numberSkipped: Int)
43-
fun onImportFailed(reason: UserCannotImportReason)
38+
fun onImportPasswordsDialogDisplayed(source: AutofillImportLaunchSource)
39+
fun onImportPasswordsDialogImportButtonClicked(source: AutofillImportLaunchSource)
40+
fun onUserCancelledImportPasswordsDialog(source: AutofillImportLaunchSource)
41+
fun onUserCancelledImportWebFlow(stage: String, source: AutofillImportLaunchSource)
42+
fun onImportSuccessful(savedCredentials: Int, numberSkipped: Int, source: AutofillImportLaunchSource)
43+
fun onImportFailed(reason: UserCannotImportReason, source: AutofillImportLaunchSource)
4444
fun onImportPasswordsButtonTapped(launchSource: AutofillImportLaunchSource)
4545
fun onImportPasswordsOverflowMenuTapped()
4646
fun onImportPasswordsViaDesktopSyncButtonTapped()
@@ -53,39 +53,49 @@ class ImportPasswordsPixelSenderImpl @Inject constructor(
5353
private val engagementBucketing: AutofillEngagementBucketing,
5454
) : ImportPasswordsPixelSender {
5555

56-
override fun onImportPasswordsDialogDisplayed() {
57-
pixel.fire(AUTOFILL_IMPORT_GOOGLE_PASSWORDS_PREIMPORT_PROMPT_DISPLAYED)
56+
override fun onImportPasswordsDialogDisplayed(source: AutofillImportLaunchSource) {
57+
val params = mapOf(SOURCE_KEY to source.value)
58+
pixel.fire(AUTOFILL_IMPORT_GOOGLE_PASSWORDS_PREIMPORT_PROMPT_DISPLAYED, params)
5859
}
5960

60-
override fun onImportPasswordsDialogImportButtonClicked() {
61-
pixel.fire(AUTOFILL_IMPORT_GOOGLE_PASSWORDS_PREIMPORT_PROMPT_CONFIRMED)
61+
override fun onImportPasswordsDialogImportButtonClicked(source: AutofillImportLaunchSource) {
62+
val params = mapOf(SOURCE_KEY to source.value)
63+
pixel.fire(AUTOFILL_IMPORT_GOOGLE_PASSWORDS_PREIMPORT_PROMPT_CONFIRMED, params)
6264
}
6365

64-
override fun onUserCancelledImportPasswordsDialog() {
65-
val params = mapOf(CANCELLATION_STAGE_KEY to PRE_IMPORT_DIALOG_STAGE)
66+
override fun onUserCancelledImportPasswordsDialog(source: AutofillImportLaunchSource) {
67+
val params = mapOf(
68+
CANCELLATION_STAGE_KEY to PRE_IMPORT_DIALOG_STAGE,
69+
SOURCE_KEY to source.value,
70+
)
6671
pixel.fire(AUTOFILL_IMPORT_GOOGLE_PASSWORDS_RESULT_FAILURE_USER_CANCELLED, params)
6772
}
6873

69-
override fun onUserCancelledImportWebFlow(stage: String) {
70-
val params = mapOf(CANCELLATION_STAGE_KEY to stage)
74+
override fun onUserCancelledImportWebFlow(stage: String, source: AutofillImportLaunchSource) {
75+
val params = mapOf(
76+
CANCELLATION_STAGE_KEY to stage,
77+
SOURCE_KEY to source.value,
78+
)
7179
pixel.fire(AUTOFILL_IMPORT_GOOGLE_PASSWORDS_RESULT_FAILURE_USER_CANCELLED, params)
7280
}
7381

74-
override fun onImportSuccessful(savedCredentials: Int, numberSkipped: Int) {
82+
override fun onImportSuccessful(savedCredentials: Int, numberSkipped: Int, source: AutofillImportLaunchSource) {
7583
val savedCredentialsBucketed = engagementBucketing.bucketNumberOfCredentials(savedCredentials)
7684
val skippedCredentialsBucketed = engagementBucketing.bucketNumberOfCredentials(numberSkipped)
7785
val params = mapOf(
7886
"saved_credentials" to savedCredentialsBucketed,
7987
"skipped_credentials" to skippedCredentialsBucketed,
88+
SOURCE_KEY to source.value,
8089
)
8190
pixel.fire(AUTOFILL_IMPORT_GOOGLE_PASSWORDS_RESULT_SUCCESS, params)
8291
}
8392

84-
override fun onImportFailed(reason: UserCannotImportReason) {
93+
override fun onImportFailed(reason: UserCannotImportReason, source: AutofillImportLaunchSource) {
8594
val pixelName = when (reason) {
8695
ErrorParsingCsv -> AUTOFILL_IMPORT_GOOGLE_PASSWORDS_RESULT_FAILURE_ERROR_PARSING
8796
}
88-
pixel.fire(pixelName)
97+
val params = mapOf(SOURCE_KEY to source.value)
98+
pixel.fire(pixelName, params)
8999
}
90100

91101
override fun onImportPasswordsButtonTapped(launchSource: AutofillImportLaunchSource) {

autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/ui/credential/management/importpassword/google/ImportFromGooglePasswordsDialog.kt

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import android.view.ViewGroup
2727
import androidx.activity.result.contract.ActivityResultContracts
2828
import androidx.core.content.ContextCompat
2929
import androidx.core.content.IntentCompat
30+
import androidx.core.os.BundleCompat
3031
import androidx.lifecycle.Lifecycle
3132
import androidx.lifecycle.ViewModel
3233
import androidx.lifecycle.ViewModelProvider
@@ -37,6 +38,9 @@ import com.duckduckgo.app.browser.favicon.FaviconManager
3738
import com.duckduckgo.autofill.impl.R
3839
import com.duckduckgo.autofill.impl.databinding.ContentImportFromGooglePasswordDialogBinding
3940
import com.duckduckgo.autofill.impl.deviceauth.AutofillAuthorizationGracePeriod
41+
import com.duckduckgo.autofill.impl.importing.AutofillImportLaunchSource
42+
import com.duckduckgo.autofill.impl.importing.AutofillImportLaunchSource.PasswordManagementPromo
43+
import com.duckduckgo.autofill.impl.importing.AutofillImportLaunchSource.Unknown
4044
import com.duckduckgo.autofill.impl.importing.CredentialImporter
4145
import com.duckduckgo.autofill.impl.importing.gpm.webflow.ImportGooglePassword
4246
import com.duckduckgo.autofill.impl.importing.gpm.webflow.ImportGooglePasswordResult
@@ -102,18 +106,22 @@ class ImportFromGooglePasswordsDialog : BottomSheetDialogFragment() {
102106
if (activityResult.resultCode == Activity.RESULT_OK) {
103107
lifecycleScope.launch {
104108
activityResult.data?.let { data ->
105-
processImportFlowResult(data)
109+
val launchSource = getLaunchSource()
110+
processImportFlowResult(data, launchSource)
106111
}
107112
}
108113
}
109114
}
110115

111-
private fun ImportFromGooglePasswordsDialog.processImportFlowResult(data: Intent) {
116+
private fun getLaunchSource() =
117+
BundleCompat.getParcelable(arguments ?: Bundle(), KEY_LAUNCH_SOURCE, AutofillImportLaunchSource::class.java) ?: Unknown
118+
119+
private fun ImportFromGooglePasswordsDialog.processImportFlowResult(data: Intent, launchSource: AutofillImportLaunchSource) {
112120
(IntentCompat.getParcelableExtra(data, ImportGooglePasswordResult.RESULT_KEY_DETAILS, ImportGooglePasswordResult::class.java)).let {
113121
when (it) {
114-
is ImportGooglePasswordResult.Success -> viewModel.onImportFlowFinishedSuccessfully()
115-
is ImportGooglePasswordResult.Error -> viewModel.onImportFlowFinishedWithError(it.reason)
116-
is ImportGooglePasswordResult.UserCancelled -> viewModel.onImportFlowCancelledByUser(it.stage, canShowPreImportDialog())
122+
is ImportGooglePasswordResult.Success -> viewModel.onImportFlowFinishedSuccessfully(launchSource)
123+
is ImportGooglePasswordResult.Error -> viewModel.onImportFlowFinishedWithError(it.reason, launchSource)
124+
is ImportGooglePasswordResult.UserCancelled -> viewModel.onImportFlowCancelledByUser(it.stage, canShowPreImportDialog(), launchSource)
117125
else -> {}
118126
}
119127
}
@@ -204,13 +212,18 @@ class ImportFromGooglePasswordsDialog : BottomSheetDialogFragment() {
204212

205213
// check if we should show the initial instructional prompt
206214
if (canShowPreImportDialog()) {
207-
viewModel.shouldShowInitialInstructionalPrompt()
215+
viewModel.shouldShowInitialInstructionalPrompt(getLaunchSource())
208216
} else {
209217
startImportWebFlow()
210218
}
211219
}
212220

213-
private fun canShowPreImportDialog() = arguments?.getBoolean(KEY_SHOW_INITIAL_INSTRUCTIONAL_PROMPT, true) ?: true
221+
private fun canShowPreImportDialog(): Boolean {
222+
return when (getLaunchSource()) {
223+
PasswordManagementPromo -> false
224+
else -> true
225+
}
226+
}
214227

215228
override fun onCreateView(
216229
inflater: LayoutInflater,
@@ -263,7 +276,7 @@ class ImportFromGooglePasswordsDialog : BottomSheetDialogFragment() {
263276

264277
private fun onImportGcmButtonClicked() {
265278
startImportWebFlow()
266-
importPasswordsPixelSender.onImportPasswordsDialogImportButtonClicked()
279+
importPasswordsPixelSender.onImportPasswordsDialogImportButtonClicked(getLaunchSource())
267280
}
268281

269282
private fun startImportWebFlow() {
@@ -285,7 +298,7 @@ class ImportFromGooglePasswordsDialog : BottomSheetDialogFragment() {
285298
return
286299
}
287300

288-
importPasswordsPixelSender.onUserCancelledImportPasswordsDialog()
301+
importPasswordsPixelSender.onUserCancelledImportPasswordsDialog(getLaunchSource())
289302

290303
dismiss()
291304
}
@@ -298,12 +311,12 @@ class ImportFromGooglePasswordsDialog : BottomSheetDialogFragment() {
298311

299312
companion object {
300313

301-
private const val KEY_SHOW_INITIAL_INSTRUCTIONAL_PROMPT = "showInitialInstructionalPrompt"
314+
private const val KEY_LAUNCH_SOURCE = "launchSource"
302315

303-
fun instance(showInitialInstructionalPrompt: Boolean): ImportFromGooglePasswordsDialog {
316+
fun instance(importSource: AutofillImportLaunchSource): ImportFromGooglePasswordsDialog {
304317
val fragment = ImportFromGooglePasswordsDialog()
305318
fragment.arguments = Bundle().apply {
306-
putBoolean(KEY_SHOW_INITIAL_INSTRUCTIONAL_PROMPT, showInitialInstructionalPrompt)
319+
putParcelable(KEY_LAUNCH_SOURCE, importSource)
307320
}
308321
return fragment
309322
}

autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/ui/credential/management/importpassword/google/ImportFromGooglePasswordsDialogViewModel.kt

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package com.duckduckgo.autofill.impl.ui.credential.management.importpassword.goo
1919
import androidx.lifecycle.ViewModel
2020
import androidx.lifecycle.viewModelScope
2121
import com.duckduckgo.anvil.annotations.ContributesViewModel
22+
import com.duckduckgo.autofill.impl.importing.AutofillImportLaunchSource
2223
import com.duckduckgo.autofill.impl.importing.CredentialImporter
2324
import com.duckduckgo.autofill.impl.importing.CredentialImporter.ImportResult
2425
import com.duckduckgo.autofill.impl.importing.gpm.webflow.ImportGooglePasswordsWebFlowViewModel.UserCannotImportReason
@@ -41,13 +42,13 @@ class ImportFromGooglePasswordsDialogViewModel @Inject constructor(
4142
private val importPasswordsPixelSender: ImportPasswordsPixelSender,
4243
) : ViewModel() {
4344

44-
fun onImportFlowFinishedSuccessfully() {
45+
fun onImportFlowFinishedSuccessfully(importSource: AutofillImportLaunchSource) {
4546
viewModelScope.launch(dispatchers.main()) {
46-
observeImportJob()
47+
observeImportJob(importSource)
4748
}
4849
}
4950

50-
private suspend fun observeImportJob() {
51+
private suspend fun observeImportJob(importSource: AutofillImportLaunchSource) {
5152
credentialImporter.getImportStatus().collect {
5253
when (it) {
5354
is ImportResult.InProgress -> {
@@ -57,36 +58,40 @@ class ImportFromGooglePasswordsDialogViewModel @Inject constructor(
5758

5859
is ImportResult.Finished -> {
5960
logcat { "Import finished: ${it.savedCredentials} imported. ${it.numberSkipped} skipped." }
60-
fireImportSuccessPixel(savedCredentials = it.savedCredentials, numberSkipped = it.numberSkipped)
61+
fireImportSuccessPixel(savedCredentials = it.savedCredentials, numberSkipped = it.numberSkipped, importSource = importSource)
6162
_viewState.value = ViewState(viewMode = ViewMode.ImportSuccess(it))
6263
}
6364
}
6465
}
6566
}
6667

67-
fun onImportFlowFinishedWithError(reason: UserCannotImportReason) {
68-
fireImportFailedPixel(reason)
68+
fun onImportFlowFinishedWithError(reason: UserCannotImportReason, importSource: AutofillImportLaunchSource) {
69+
fireImportFailedPixel(reason, importSource)
6970
_viewState.value = ViewState(viewMode = ViewMode.ImportError)
7071
}
7172

72-
fun onImportFlowCancelledByUser(stage: String, canShowPreImportDialog: Boolean) {
73-
importPasswordsPixelSender.onUserCancelledImportWebFlow(stage)
73+
fun onImportFlowCancelledByUser(stage: String, canShowPreImportDialog: Boolean, importSource: AutofillImportLaunchSource) {
74+
importPasswordsPixelSender.onUserCancelledImportWebFlow(stage, importSource)
7475

7576
if (!canShowPreImportDialog) {
7677
_viewState.value = ViewState(viewMode = ViewMode.FlowTerminated)
7778
}
7879
}
7980

80-
private fun fireImportSuccessPixel(savedCredentials: Int, numberSkipped: Int) {
81-
importPasswordsPixelSender.onImportSuccessful(savedCredentials = savedCredentials, numberSkipped = numberSkipped)
81+
private fun fireImportSuccessPixel(savedCredentials: Int, numberSkipped: Int, importSource: AutofillImportLaunchSource) {
82+
importPasswordsPixelSender.onImportSuccessful(
83+
savedCredentials = savedCredentials,
84+
numberSkipped = numberSkipped,
85+
source = importSource,
86+
)
8287
}
8388

84-
private fun fireImportFailedPixel(reason: UserCannotImportReason) {
85-
importPasswordsPixelSender.onImportFailed(reason)
89+
private fun fireImportFailedPixel(reason: UserCannotImportReason, importSource: AutofillImportLaunchSource) {
90+
importPasswordsPixelSender.onImportFailed(reason, importSource)
8691
}
8792

88-
fun shouldShowInitialInstructionalPrompt() {
89-
importPasswordsPixelSender.onImportPasswordsDialogDisplayed()
93+
fun shouldShowInitialInstructionalPrompt(importSource: AutofillImportLaunchSource) {
94+
importPasswordsPixelSender.onImportPasswordsDialogDisplayed(importSource)
9095
_viewState.value = viewState.value.copy(viewMode = PreImport)
9196
}
9297

autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/ui/credential/management/viewing/AutofillManagementListMode.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ import com.duckduckgo.autofill.impl.databinding.FragmentAutofillManagementListMo
3737
import com.duckduckgo.autofill.impl.deviceauth.DeviceAuthenticator
3838
import com.duckduckgo.autofill.impl.deviceauth.DeviceAuthenticator.AuthConfiguration
3939
import com.duckduckgo.autofill.impl.deviceauth.DeviceAuthenticator.AuthResult.Success
40-
import com.duckduckgo.autofill.impl.importing.AutofillImportLaunchSource.PasswordManagementEmpty
40+
import com.duckduckgo.autofill.impl.importing.AutofillImportLaunchSource
41+
import com.duckduckgo.autofill.impl.importing.AutofillImportLaunchSource.PasswordManagementEmptyState
4142
import com.duckduckgo.autofill.impl.ui.credential.management.AutofillManagementActivity
4243
import com.duckduckgo.autofill.impl.ui.credential.management.AutofillManagementRecyclerAdapter
4344
import com.duckduckgo.autofill.impl.ui.credential.management.AutofillManagementRecyclerAdapter.AutofillToggleState
@@ -339,7 +340,7 @@ class AutofillManagementListMode : DuckDuckGoFragment(R.layout.fragment_autofill
339340
LaunchResetNeverSaveListConfirmation -> launchResetNeverSavedSitesConfirmation()
340341
is LaunchDeleteAllPasswordsConfirmation -> launchDeleteAllLoginsConfirmationDialog(command.numberToDelete)
341342
is PromptUserToAuthenticateMassDeletion -> promptUserToAuthenticateMassDeletion(command.authConfiguration)
342-
is LaunchImportGooglePasswords -> launchImportPasswordsScreen(showInitialInstructionalPrompt = command.showImportInstructions)
343+
is LaunchImportGooglePasswords -> launchImportPasswordsScreen(importSource = command.importSource)
343344
is LaunchReportAutofillBreakageConfirmation -> launchReportBreakageConfirmation(command.eTldPlusOne)
344345
is ShowUserReportSentMessage -> showUserReportSentMessage()
345346
is ReevalutePromotions -> evaluatePromotions()
@@ -357,9 +358,9 @@ class AutofillManagementListMode : DuckDuckGoFragment(R.layout.fragment_autofill
357358
Snackbar.make(binding.root, R.string.autofillManagementReportBreakageSuccessMessage, Snackbar.LENGTH_LONG).show()
358359
}
359360

360-
private fun launchImportPasswordsScreen(showInitialInstructionalPrompt: Boolean) {
361+
private fun launchImportPasswordsScreen(importSource: AutofillImportLaunchSource) {
361362
context?.let {
362-
val dialog = ImportFromGooglePasswordsDialog.instance(showInitialInstructionalPrompt = showInitialInstructionalPrompt)
363+
val dialog = ImportFromGooglePasswordsDialog.instance(importSource = importSource)
363364
dialog.show(parentFragmentManager, IMPORT_FROM_GPM_DIALOG_TAG)
364365
}
365366
}
@@ -538,7 +539,7 @@ class AutofillManagementListMode : DuckDuckGoFragment(R.layout.fragment_autofill
538539

539540
private fun onImportFromGoogleClicked() {
540541
viewModel.onImportPasswordsFromGooglePasswordManager()
541-
importPasswordsPixelSender.onImportPasswordsButtonTapped(PasswordManagementEmpty)
542+
importPasswordsPixelSender.onImportPasswordsButtonTapped(PasswordManagementEmptyState)
542543
}
543544

544545
private fun onImportViaDesktopSyncClicked() {

0 commit comments

Comments
 (0)