From 71f63d7b331af07bdcbb236f28474a874383f4e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Gon=C3=A7alves?= Date: Tue, 14 Apr 2020 19:48:06 +0100 Subject: [PATCH] Prevent exit fullscreen mode from closing application (#823) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * (android) wrap custom view in FrameLayout Wraps the custom view in a FrameLayout in order to capture key events and redirect them to SystemWebView's dispatchKeyEvent. * Update framework/src/org/apache/cordova/CordovaWebViewImpl.java Co-Authored-By: エリス * Update framework/src/org/apache/cordova/CordovaWebViewImpl.java Co-Authored-By: エリス * Update framework/src/org/apache/cordova/CordovaWebViewImpl.java Co-Authored-By: エリス * remove empty line below @override Co-authored-by: Norman Breau Co-authored-by: エリス --- .../apache/cordova/CordovaWebViewImpl.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/framework/src/org/apache/cordova/CordovaWebViewImpl.java b/framework/src/org/apache/cordova/CordovaWebViewImpl.java index 1db2e955..a77502d6 100644 --- a/framework/src/org/apache/cordova/CordovaWebViewImpl.java +++ b/framework/src/org/apache/cordova/CordovaWebViewImpl.java @@ -244,6 +244,21 @@ public class CordovaWebViewImpl implements CordovaWebView { } } + private static class WrapperView extends FrameLayout { + + private final CordovaWebViewEngine engine; + + public WrapperView(Context context, CordovaWebViewEngine engine) { + super(context); + this.engine = engine; + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + return engine.getView().dispatchKeyEvent(event); + } + } + @Override @Deprecated public void showCustomView(View view, WebChromeClient.CustomViewCallback callback) { @@ -255,13 +270,16 @@ public class CordovaWebViewImpl implements CordovaWebView { return; } + WrapperView wrapperView = new WrapperView(getContext(), engine); + wrapperView.addView(view); + // Store the view and its callback for later (to kill it properly) - mCustomView = view; + mCustomView = wrapperView; mCustomViewCallback = callback; // Add the custom view to its container. ViewGroup parent = (ViewGroup) engine.getView().getParent(); - parent.addView(view, new FrameLayout.LayoutParams( + parent.addView(wrapperView, new FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, Gravity.CENTER));