For issue #17457: Prevent page refresh when tapping the security icon

upstream-sync
Arturo Mejia 3 years ago
parent 90575e6dd7
commit a6495347fd

@ -159,7 +159,8 @@ class WebsitePermissionsView(
adapter.setDropDownViewResource(R.layout.quicksetting_permission_spinner_dropdown)
viewHolder.status.adapter = adapter
viewHolder.status.setSelection(selectedIndex, false)
viewHolder.status.tag = permissionState.autoplayValue
viewHolder.status.setSelection(selectedIndex)
viewHolder.status.onItemSelectedListener =
object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(
@ -168,6 +169,14 @@ class WebsitePermissionsView(
position: Int,
id: Long
) {
// Unfortunately the spinner component triggers an selection event when initialized,
// to avoid that, we are using the tag property to store the selected value and
// be able to differentiate from an initialization event from a normal selection event
// see https://stackoverflow.com/questions/21747917/undesired-onitemselected-calls/21751327#21751327
if (viewHolder.status.selectedItem == viewHolder.status.tag) {
return
}
viewHolder.status.tag = viewHolder.status.selectedItem
val type = viewHolder.status.selectedItem as AutoplayValue
interactor.onAutoplayChanged(type)
}

@ -195,6 +195,18 @@ class WebsitePermissionViewTest {
0L
)
verify { interactor.onAutoplayChanged(permissionView.status.selectedItem as AutoplayValue) }
// Selecting the same item should not trigger a selection event.
verify(exactly = 0) { interactor.onAutoplayChanged(permissionView.status.selectedItem as AutoplayValue) }
permissionView.status.setSelection(2)
permissionView.status.onItemSelectedListener!!.onItemSelected(
mock(),
permissionView.status,
2,
0L
)
// Selecting a different item from the selected one should trigger an selection event.
verify(exactly = 1) { interactor.onAutoplayChanged(permissionView.status.selectedItem as AutoplayValue) }
}
}

Loading…
Cancel
Save