Back button web view to esc (revive fixed version of: https://github.com/element-hq/element-x-android/pull/6724) (#6725)

* Change native back button behavior in EC view:
 - inject escape into webview instead of going back.
 - the webview will call back when no other modal is open.

* call down and up in the webview + make sure that we fall back to close
pip in case the webview did not handle the esc action.

* Tests and refactor to CallScreenBackPressPolicy

---------

Co-authored-by: Jorge Martín <jorgem@element.io>
This commit is contained in:
Timo 2026-05-13 16:17:23 +08:00 committed by GitHub
parent 2ea23bcc3e
commit c959f50d53
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 317 additions and 11 deletions

View file

@ -23,9 +23,11 @@ import androidx.compose.ui.test.hasContentDescription
import androidx.compose.ui.test.hasTestTag
import androidx.compose.ui.test.hasText
import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.junit4.AndroidComposeTestRule
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import io.element.android.libraries.ui.strings.CommonStrings
import org.junit.rules.TestRule
val trueMatcher = SemanticsMatcher("true matcher") { true }
@ -48,6 +50,14 @@ fun AndroidComposeUiTest<ComponentActivity>.pressBack() {
onNode(hasContentDescription(text)).performClick()
}
/**
* Press the back button in the app bar.
*/
fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.pressBack() {
val text = activity.getString(CommonStrings.action_back)
onNode(hasContentDescription(text)).performClick()
}
/**
* Press the back key.
*/
@ -55,6 +65,13 @@ fun AndroidComposeUiTest<ComponentActivity>.pressBackKey() {
activity!!.onBackPressedDispatcher.onBackPressed()
}
/**
* Press the back key.
*/
fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.pressBackKey() {
activity.onBackPressedDispatcher.onBackPressed()
}
fun SemanticsNodeInteractionsProvider.pressTag(tag: String) {
onNode(hasTestTag(tag)).performClick()
}