mirror of
https://github.com/bitwarden/android.git
synced 2024-10-31 07:05:35 +03:00
PM-10631 store when the user selects to turn auto fill on later (#3925)
This commit is contained in:
parent
3238279290
commit
5667a1cfd0
9 changed files with 120 additions and 3 deletions
|
@ -258,4 +258,16 @@ interface SettingsDiskSource {
|
|||
* @see [storeUseHasLoggedInPreviously]
|
||||
*/
|
||||
fun getUserHasSignedInPreviously(userId: String): Boolean
|
||||
|
||||
/**
|
||||
* Gets whether or not the given [userId] has signalled they want to enable autofill in
|
||||
* onboarding.
|
||||
*/
|
||||
fun getShowAutoFillSettingBadge(userId: String): Boolean?
|
||||
|
||||
/**
|
||||
* Stores the given value for whether or not the given [userId] has signalled they want to
|
||||
* enable autofill in onboarding.
|
||||
*/
|
||||
fun storeShowAutoFillSettingBadge(userId: String, showBadge: Boolean?)
|
||||
}
|
||||
|
|
|
@ -33,6 +33,7 @@ private const val CRASH_LOGGING_ENABLED_KEY = "crashLoggingEnabled"
|
|||
private const val CLEAR_CLIPBOARD_INTERVAL_KEY = "clearClipboard"
|
||||
private const val INITIAL_AUTOFILL_DIALOG_SHOWN = "addSitePromptShown"
|
||||
private const val HAS_USER_LOGGED_IN_OR_CREATED_AN_ACCOUNT_KEY = "hasUserLoggedInOrCreatedAccount"
|
||||
private const val SHOW_AUTOFILL_SETTING_BADGE = "showAutofillSettingBadge"
|
||||
|
||||
/**
|
||||
* Primary implementation of [SettingsDiskSource].
|
||||
|
@ -395,4 +396,15 @@ class SettingsDiskSourceImpl(
|
|||
getBoolean(
|
||||
key = HAS_USER_LOGGED_IN_OR_CREATED_AN_ACCOUNT_KEY.appendIdentifier(userId),
|
||||
) == true
|
||||
|
||||
override fun getShowAutoFillSettingBadge(userId: String): Boolean? =
|
||||
getBoolean(
|
||||
key = SHOW_AUTOFILL_SETTING_BADGE.appendIdentifier(userId),
|
||||
)
|
||||
|
||||
override fun storeShowAutoFillSettingBadge(userId: String, showBadge: Boolean?) =
|
||||
putBoolean(
|
||||
key = SHOW_AUTOFILL_SETTING_BADGE.appendIdentifier(userId),
|
||||
value = showBadge,
|
||||
)
|
||||
}
|
||||
|
|
|
@ -254,4 +254,16 @@ interface SettingsRepository {
|
|||
* Record that a user has logged in on this device.
|
||||
*/
|
||||
fun storeUserHasLoggedInValue(userId: String)
|
||||
|
||||
/**
|
||||
* Gets whether or not the given [userId] has signalled they want to enable autofill in
|
||||
* onboarding.
|
||||
*/
|
||||
fun getShowAutoFillSettingBadge(userId: String): Boolean
|
||||
|
||||
/**
|
||||
* Stores the given value for whether or not the given [userId] has signalled they want to
|
||||
* enable autofill in onboarding.
|
||||
*/
|
||||
fun storeShowAutoFillSettingBadge(userId: String, showBadge: Boolean)
|
||||
}
|
||||
|
|
|
@ -538,6 +538,13 @@ class SettingsRepositoryImpl(
|
|||
settingsDiskSource.storeUseHasLoggedInPreviously(userId)
|
||||
}
|
||||
|
||||
override fun getShowAutoFillSettingBadge(userId: String): Boolean =
|
||||
settingsDiskSource.getShowAutoFillSettingBadge(userId) ?: false
|
||||
|
||||
override fun storeShowAutoFillSettingBadge(userId: String, showBadge: Boolean) {
|
||||
settingsDiskSource.storeShowAutoFillSettingBadge(userId, showBadge)
|
||||
}
|
||||
|
||||
/**
|
||||
* If there isn't already one generated, generate a symmetric sync key that would be used
|
||||
* for communicating via IPC.
|
||||
|
|
|
@ -78,7 +78,7 @@ class SetupAutoFillViewModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun handleTurnOnLaterConfirmClick() {
|
||||
// TODO PM-10631 record user chose to turn on later for settings badging.
|
||||
settingsRepository.storeShowAutoFillSettingBadge(state.userId, true)
|
||||
updateOnboardingStatusToNextStep()
|
||||
}
|
||||
|
||||
|
|
|
@ -1029,4 +1029,28 @@ class SettingsDiskSourceTest {
|
|||
fun `hasUserSignedInPreviously returns false if value is not present in shared preferences`() {
|
||||
assertFalse(settingsDiskSource.getUserHasSignedInPreviously(userId = "haveNotSignedIn"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `storeShowAutoFillSettingBadge should update SharedPreferences`() {
|
||||
val mockUserId = "mockUserId"
|
||||
val showAutofillSettingBadgeKey =
|
||||
"bwPreferencesStorage:showAutofillSettingBadge_$mockUserId"
|
||||
settingsDiskSource.storeShowAutoFillSettingBadge(
|
||||
userId = mockUserId,
|
||||
showBadge = true,
|
||||
)
|
||||
assertTrue(fakeSharedPreferences.getBoolean(showAutofillSettingBadgeKey, false))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `getShowAutoFillSettingBadge should pull value from shared preferences`() {
|
||||
val mockUserId = "mockUserId"
|
||||
val showAutofillSettingBadgeKey =
|
||||
"bwPreferencesStorage:showAutofillSettingBadge_$mockUserId"
|
||||
fakeSharedPreferences.edit {
|
||||
putBoolean(showAutofillSettingBadgeKey, true)
|
||||
}
|
||||
|
||||
assertTrue(settingsDiskSource.getShowAutoFillSettingBadge(userId = mockUserId)!!)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -61,6 +61,7 @@ class FakeSettingsDiskSource : SettingsDiskSource {
|
|||
private var storedSystemBiometricIntegritySource: String? = null
|
||||
private val storedAccountBiometricIntegrityValidity = mutableMapOf<String, Boolean?>()
|
||||
private val userSignIns = mutableMapOf<String, Boolean>()
|
||||
private val userShowAutoFillBadge = mutableMapOf<String, Boolean?>()
|
||||
|
||||
override var appLanguage: AppLanguage? = null
|
||||
|
||||
|
@ -284,6 +285,13 @@ class FakeSettingsDiskSource : SettingsDiskSource {
|
|||
|
||||
override fun getUserHasSignedInPreviously(userId: String): Boolean = userSignIns[userId] == true
|
||||
|
||||
override fun getShowAutoFillSettingBadge(userId: String): Boolean? =
|
||||
userShowAutoFillBadge[userId]
|
||||
|
||||
override fun storeShowAutoFillSettingBadge(userId: String, showBadge: Boolean?) {
|
||||
userShowAutoFillBadge[userId] = showBadge
|
||||
}
|
||||
|
||||
private fun getMutableScreenCaptureAllowedFlow(userId: String): MutableSharedFlow<Boolean?> {
|
||||
return mutableScreenCaptureAllowedFlowMap.getOrPut(userId) {
|
||||
bufferedMutableSharedFlow(replay = 1)
|
||||
|
|
|
@ -1148,6 +1148,33 @@ class SettingsRepositoryTest {
|
|||
fakeAuthDiskSource.userState = MOCK_USER_STATE
|
||||
assertFalse(settingsRepository.isAuthenticatorSyncEnabled)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `storeShowAutoFillSettingBadge should store value of false to disk`() {
|
||||
val userId = "userId"
|
||||
settingsRepository.storeShowAutoFillSettingBadge(userId = userId, showBadge = false)
|
||||
assertFalse(fakeSettingsDiskSource.getShowAutoFillSettingBadge(userId = userId)!!)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `storeShowAutoFillSettingBadge should store value of true to disk`() {
|
||||
val userId = "userId"
|
||||
settingsRepository.storeShowAutoFillSettingBadge(userId = userId, showBadge = true)
|
||||
assertTrue(fakeSettingsDiskSource.getShowAutoFillSettingBadge(userId = userId)!!)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `getShowAutoFillSettingBadge get value of false if does not exist`() {
|
||||
val userId = "userId"
|
||||
assertFalse(settingsRepository.getShowAutoFillSettingBadge(userId = userId))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `getShowAutoFillSettingBadge should return the value saved to disk`() {
|
||||
val userId = "userId"
|
||||
fakeSettingsDiskSource.storeShowAutoFillSettingBadge(userId = userId, showBadge = true)
|
||||
assertTrue(settingsRepository.getShowAutoFillSettingBadge(userId = userId))
|
||||
}
|
||||
}
|
||||
|
||||
private const val USER_ID: String = "userId"
|
||||
|
|
|
@ -22,9 +22,10 @@ import org.junit.jupiter.api.Test
|
|||
class SetupAutoFillViewModelTest : BaseViewModelTest() {
|
||||
|
||||
private val mutableAutoFillEnabledStateFlow = MutableStateFlow(false)
|
||||
private val settingsRepository = mockk<SettingsRepository>(relaxed = true) {
|
||||
private val settingsRepository = mockk<SettingsRepository> {
|
||||
every { isAutofillEnabledStateFlow } returns mutableAutoFillEnabledStateFlow
|
||||
every { disableAutofill() } just runs
|
||||
every { storeShowAutoFillSettingBadge(any(), any()) } just runs
|
||||
}
|
||||
|
||||
private val mockUserState = mockk<UserState> {
|
||||
|
@ -127,8 +128,22 @@ class SetupAutoFillViewModelTest : BaseViewModelTest() {
|
|||
)
|
||||
}
|
||||
}
|
||||
@Test
|
||||
fun `handleTurnOnLaterConfirmClick sets showAutoFillSettingBadge to true`() {
|
||||
val viewModel = createViewModel()
|
||||
viewModel.trySendAction(SetupAutoFillAction.TurnOnLaterConfirmClick)
|
||||
verify {
|
||||
settingsRepository.storeShowAutoFillSettingBadge(
|
||||
userId = DEFAULT_USER_ID,
|
||||
showBadge = true,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun createViewModel() = SetupAutoFillViewModel(settingsRepository, authRepository)
|
||||
private fun createViewModel() = SetupAutoFillViewModel(
|
||||
settingsRepository = settingsRepository,
|
||||
authRepository = authRepository,
|
||||
)
|
||||
}
|
||||
|
||||
private const val DEFAULT_USER_ID = "userId"
|
||||
|
|
Loading…
Reference in a new issue