Browse Source

Merge pull request #503 from mschneider/mschneider/fullscreen_video

Allow video players in Android WebView to maximize from Widget mode
Rafal Wachol 6 years ago
parent
commit
955f970736
1 changed files with 51 additions and 0 deletions
  1. 51 0
      android/src/main/java/com/flutter_webview_plugin/WebviewManager.java

+ 51 - 0
android/src/main/java/com/flutter_webview_plugin/WebviewManager.java

@@ -244,9 +244,60 @@ class WebviewManager {
                 FlutterWebviewPlugin.channel.invokeMethod("onProgressChanged", args);
             }
 
+            // Allow switching to fullscreen e.g when playing a video
+
+            private View customView;
+            private CustomViewCallback customViewCallback;
+
+            @Override
+            public void onShowCustomView(View view, int requestedOrientation, CustomViewCallback callback) {
+                onShowCustomView(view, callback);
+            }
+
+            @Override
+            public void onShowCustomView(View view, CustomViewCallback callback) {
+                // if a view already exists then immediately terminate the new one
+                if (customView != null) {
+                    callback.onCustomViewHidden();
+                    return;
+                }
+
+                // add custom view to container and save reference
+                customView = view;
+                customViewCallback = callback;
+
+                FrameLayout rootView = (FrameLayout)webView.getRootView();
+                rootView.addView(customView);
+
+                // hide webview and show custom view
+                customView.setVisibility(View.VISIBLE);
+                FrameLayout contentView = (FrameLayout)rootView.findViewById(android.R.id.content);
+                contentView.setVisibility(View.GONE);
+            }
+
+            @Override
+            public void onHideCustomView() {
+                super.onHideCustomView();
+                if (customView == null)
+                    return;
+
+                // Hide the custom view and show Webview
+                FrameLayout rootView = (FrameLayout)webView.getRootView();
+                FrameLayout contentView = (FrameLayout)rootView.findViewById(android.R.id.content);
+                contentView.setVisibility(View.VISIBLE);
+                customView.setVisibility(View.GONE);
+
+                // Remove the custom view from its container and clear reference
+                rootView.removeView(customView);
+                customViewCallback.onCustomViewHidden();
+                customView = null;
+            }
+          
             public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
                 callback.invoke(origin, true, false);
+
             }
+           
         });
     }