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) adapter.setDropDownViewResource(R.layout.quicksetting_permission_spinner_dropdown)
viewHolder.status.adapter = adapter viewHolder.status.adapter = adapter
viewHolder.status.setSelection(selectedIndex, false) viewHolder.status.tag = permissionState.autoplayValue
viewHolder.status.setSelection(selectedIndex)
viewHolder.status.onItemSelectedListener = viewHolder.status.onItemSelectedListener =
object : AdapterView.OnItemSelectedListener { object : AdapterView.OnItemSelectedListener {
override fun onItemSelected( override fun onItemSelected(
@ -168,6 +169,14 @@ class WebsitePermissionsView(
position: Int, position: Int,
id: Long 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 val type = viewHolder.status.selectedItem as AutoplayValue
interactor.onAutoplayChanged(type) interactor.onAutoplayChanged(type)
} }

@ -195,6 +195,18 @@ class WebsitePermissionViewTest {
0L 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