From 5978aba78f8bb12486aef4a12cfcd6a572711318 Mon Sep 17 00:00:00 2001
From: pichillilorenzo <pichillilorenzo@gmail.com>
Date: Sun, 23 Sep 2018 18:35:32 +0200
Subject: [PATCH] fix hidden attribute, added isHidden() method

---
 .idea/workspace.xml                           |  68 ++++++------
 README.md                                     |   4 -
 .../InAppBrowserFlutterPlugin.java            |  17 ++-
 .../InAppBrowserWebViewClient.java            |   2 +
 .../flutter_inappbrowser/WebViewActivity.java |  23 ++--
 example/lib/main.dart                         |  54 +++++-----
 .../InAppBrowserWebViewController.swift       |   1 +
 ios/Classes/SwiftFlutterPlugin.swift          | 100 +++++++++++-------
 lib/flutter_inappbrowser.dart                 |   7 +-
 9 files changed, 160 insertions(+), 116 deletions(-)

diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 582e23d..75ebc0b 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -12,7 +12,9 @@
     <list default="true" id="9b41f7a2-a71e-4923-91fb-249d7815b3e7" name="Default" comment="">
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
       <change beforePath="$PROJECT_DIR$/README.md" afterPath="$PROJECT_DIR$/README.md" />
+      <change beforePath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserFlutterPlugin.java" afterPath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserFlutterPlugin.java" />
       <change beforePath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserWebViewClient.java" afterPath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserWebViewClient.java" />
+      <change beforePath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/WebViewActivity.java" afterPath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/WebViewActivity.java" />
       <change beforePath="$PROJECT_DIR$/example/lib/main.dart" afterPath="$PROJECT_DIR$/example/lib/main.dart" />
       <change beforePath="$PROJECT_DIR$/ios/Classes/InAppBrowserWebViewController.swift" afterPath="$PROJECT_DIR$/ios/Classes/InAppBrowserWebViewController.swift" />
       <change beforePath="$PROJECT_DIR$/ios/Classes/SwiftFlutterPlugin.swift" afterPath="$PROJECT_DIR$/ios/Classes/SwiftFlutterPlugin.swift" />
@@ -36,8 +38,8 @@
       <file leaf-file-name="flutter_inappbrowser.dart" pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/lib/flutter_inappbrowser.dart">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="270">
-              <caret line="37" column="27" lean-forward="false" selection-start-line="37" selection-start-column="27" selection-end-line="37" selection-end-column="27" />
+            <state relative-caret-position="570">
+              <caret line="213" column="67" lean-forward="false" selection-start-line="213" selection-start-column="67" selection-end-line="213" selection-end-column="67" />
               <folding>
                 <element signature="e#814#834#0" expanded="true" />
               </folding>
@@ -48,8 +50,8 @@
       <file leaf-file-name="main.dart" pinned="false" current-in-tab="true">
         <entry file="file://$PROJECT_DIR$/example/lib/main.dart">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="243">
-              <caret line="20" column="19" lean-forward="true" selection-start-line="20" selection-start-column="19" selection-end-line="20" selection-end-column="19" />
+            <state relative-caret-position="330">
+              <caret line="30" column="6" lean-forward="false" selection-start-line="30" selection-start-column="6" selection-end-line="30" selection-end-column="6" />
               <folding />
             </state>
           </provider>
@@ -136,8 +138,8 @@
         <option value="$PROJECT_DIR$/ios/flutter_inappbrowser.podspec" />
         <option value="$PROJECT_DIR$/android/build.gradle" />
         <option value="$PROJECT_DIR$/pubspec.yaml" />
-        <option value="$PROJECT_DIR$/lib/flutter_inappbrowser.dart" />
         <option value="$PROJECT_DIR$/README.md" />
+        <option value="$PROJECT_DIR$/lib/flutter_inappbrowser.dart" />
         <option value="$PROJECT_DIR$/example/lib/main.dart" />
       </list>
     </option>
@@ -440,9 +442,9 @@
       <window_info id="Palette&#9;" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
       <window_info id="Image Layers" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
       <window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
-      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.36208734" sideWeight="0.4973545" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.36208734" sideWeight="0.4973545" order="2" side_tool="false" content_ui="tabs" />
       <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
-      <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3258786" sideWeight="0.4973545" order="10" side_tool="false" content_ui="tabs" />
+      <window_info id="Terminal" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.3258786" sideWeight="0.4973545" order="10" side_tool="false" content_ui="tabs" />
       <window_info id="Captures" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32936507" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
       <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.17798743" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
       <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3290735" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
@@ -829,29 +831,29 @@
     <entry file="file://$PROJECT_DIR$/README.md">
       <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
         <state split_layout="SPLIT">
-          <first_editor relative-caret-position="416">
-            <caret line="41" column="11" lean-forward="true" selection-start-line="41" selection-start-column="11" selection-end-line="41" selection-end-column="11" />
+          <first_editor relative-caret-position="280">
+            <caret line="45" column="17" lean-forward="true" selection-start-line="45" selection-start-column="17" selection-end-line="45" selection-end-column="17" />
             <folding>
-              <marker date="1537620468637" expanded="false" signature="933:1031" ph="..." />
-              <marker date="1537620468637" expanded="true" signature="1075:1571" ph="{...}" />
-              <marker date="1537620468637" expanded="true" signature="1121:1189" ph="{...}" />
-              <marker date="1537620468637" expanded="true" signature="1233:1300" ph="{...}" />
-              <marker date="1537620468637" expanded="true" signature="1371:1475" ph="{...}" />
-              <marker date="1537620468637" expanded="true" signature="1505:1568" ph="{...}" />
-              <marker date="1537620468637" expanded="true" signature="1698:1763" ph="{...}" />
-              <marker date="1537620468637" expanded="true" signature="1804:2315" ph="{...}" />
-              <marker date="1537620468637" expanded="true" signature="1838:1866" ph="{...}" />
-              <marker date="1537620468637" expanded="true" signature="1917:2313" ph="{...}" />
-              <marker date="1537620468637" expanded="true" signature="1945:2308" ph="(...)" />
-              <marker date="1537620468637" expanded="true" signature="1971:2301" ph="(...)" />
-              <marker date="1537620468637" expanded="true" signature="1999:2082" ph="(...)" />
-              <marker date="1537620468637" expanded="true" signature="2028:2071" ph="(...)" />
-              <marker date="1537620468637" expanded="true" signature="2108:2292" ph="(...)" />
-              <marker date="1537620468637" expanded="true" signature="2143:2281" ph="(...)" />
-              <marker date="1537620468637" expanded="true" signature="10474:10507" ph="{...}" />
-              <marker date="1537620468637" expanded="true" signature="10626:10658" ph="{...}" />
-              <marker date="1537620468637" expanded="true" signature="10818:10850" ph="{...}" />
-              <marker date="1537620468637" expanded="true" signature="10946:10971" ph="{...}" />
+              <marker date="1537705565637" expanded="false" signature="933:1031" ph="..." />
+              <marker date="1537705565637" expanded="true" signature="1075:1453" ph="{...}" />
+              <marker date="1537705565637" expanded="true" signature="1121:1161" ph="{...}" />
+              <marker date="1537705565637" expanded="true" signature="1205:1245" ph="{...}" />
+              <marker date="1537705565637" expanded="true" signature="1316:1377" ph="{...}" />
+              <marker date="1537705565637" expanded="true" signature="1407:1450" ph="{...}" />
+              <marker date="1537705565637" expanded="true" signature="1580:1645" ph="{...}" />
+              <marker date="1537705565637" expanded="true" signature="1686:2197" ph="{...}" />
+              <marker date="1537705565637" expanded="true" signature="1720:1748" ph="{...}" />
+              <marker date="1537705565637" expanded="true" signature="1799:2195" ph="{...}" />
+              <marker date="1537705565637" expanded="true" signature="1827:2190" ph="(...)" />
+              <marker date="1537705565637" expanded="true" signature="1853:2183" ph="(...)" />
+              <marker date="1537705565637" expanded="true" signature="1881:1964" ph="(...)" />
+              <marker date="1537705565637" expanded="true" signature="1910:1953" ph="(...)" />
+              <marker date="1537705565637" expanded="true" signature="1990:2174" ph="(...)" />
+              <marker date="1537705565637" expanded="true" signature="2025:2163" ph="(...)" />
+              <marker date="1537705565637" expanded="true" signature="10356:10389" ph="{...}" />
+              <marker date="1537705565637" expanded="true" signature="10508:10540" ph="{...}" />
+              <marker date="1537705565637" expanded="true" signature="10700:10732" ph="{...}" />
+              <marker date="1537705565637" expanded="true" signature="10828:10853" ph="{...}" />
             </folding>
           </first_editor>
           <second_editor />
@@ -860,8 +862,8 @@
     </entry>
     <entry file="file://$PROJECT_DIR$/lib/flutter_inappbrowser.dart">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="270">
-          <caret line="37" column="27" lean-forward="false" selection-start-line="37" selection-start-column="27" selection-end-line="37" selection-end-column="27" />
+        <state relative-caret-position="570">
+          <caret line="213" column="67" lean-forward="false" selection-start-line="213" selection-start-column="67" selection-end-line="213" selection-end-column="67" />
           <folding>
             <element signature="e#814#834#0" expanded="true" />
           </folding>
@@ -870,8 +872,8 @@
     </entry>
     <entry file="file://$PROJECT_DIR$/example/lib/main.dart">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="243">
-          <caret line="20" column="19" lean-forward="true" selection-start-line="20" selection-start-column="19" selection-end-line="20" selection-end-column="19" />
+        <state relative-caret-position="330">
+          <caret line="30" column="6" lean-forward="false" selection-start-line="30" selection-start-column="6" selection-end-line="30" selection-end-column="6" />
           <folding />
         </state>
       </provider>
diff --git a/README.md b/README.md
index 7364537..8352d77 100644
--- a/README.md
+++ b/README.md
@@ -29,25 +29,21 @@ class MyInAppBrowser extends InAppBrowser {
 
   @override
   void onLoadStart(String url) {
-    super.onLoadStart(url);
     print("\n\nStarted $url\n\n");
   }
 
   @override
   void onLoadStop(String url) {
-    super.onLoadStop(url);
     print("\n\nStopped $url\n\n");
   }
 
   @override
   void onLoadError(String url, int code, String message) {
-    super.onLoadError(url, code, message);
     print("\n\nCan't load $url.. Error: $message\n\n");
   }
 
   @override
   void onExit() {
-    super.onExit();
     print("\n\nBrowser closed!\n\n");
   }
 
diff --git a/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserFlutterPlugin.java b/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserFlutterPlugin.java
index 9a722d3..a83353d 100644
--- a/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserFlutterPlugin.java
+++ b/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserFlutterPlugin.java
@@ -195,13 +195,16 @@ public class InAppBrowserFlutterPlugin implements MethodCallHandler {
       case "canGoForward":
         result.success(canGoForward());
         break;
-      case "isLoading":
-        result.success(isLoading());
-        break;
       case "stopLoading":
         stopLoading();
         result.success(true);
         break;
+      case "isLoading":
+        result.success(isLoading());
+        break;
+      case "isHidden":
+        result.success(isHidden());
+        break;
       default:
         result.notImplemented();
     }
@@ -343,7 +346,7 @@ public class InAppBrowserFlutterPlugin implements MethodCallHandler {
     }
     // If the current app package isn't a target for this URL, then use
     // the normal launch behavior
-    if (hasCurrentPackage == false || targetIntents.size() == 0) {
+    if (!hasCurrentPackage || targetIntents.size() == 0) {
       activity.startActivity(intent);
     }
     // If there's only one possible intent, launch it directly
@@ -400,6 +403,12 @@ public class InAppBrowserFlutterPlugin implements MethodCallHandler {
     return false;
   }
 
+  public boolean isHidden() {
+    if (webViewActivity != null)
+      return webViewActivity.isHidden;
+    return false;
+  }
+
   public void stopLoading() {
     if (webViewActivity != null)
       webViewActivity.stopLoading();
diff --git a/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserWebViewClient.java b/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserWebViewClient.java
index fc24372..b2b2ef4 100644
--- a/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserWebViewClient.java
+++ b/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserWebViewClient.java
@@ -28,6 +28,8 @@ public class InAppBrowserWebViewClient extends WebViewClient {
     @Override
     public boolean shouldOverrideUrlLoading(WebView webView, String url) {
 
+        //return true;
+
         if (url.startsWith(WebView.SCHEME_TEL)) {
             try {
                 Intent intent = new Intent(Intent.ACTION_DIAL);
diff --git a/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/WebViewActivity.java b/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/WebViewActivity.java
index 0790451..a72cb82 100644
--- a/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/WebViewActivity.java
+++ b/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/WebViewActivity.java
@@ -7,6 +7,7 @@ import android.os.Build;
 import android.support.v7.app.ActionBar;
 import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
+import android.util.Log;
 import android.view.KeyEvent;
 import android.view.Menu;
 import android.view.MenuInflater;
@@ -34,10 +35,12 @@ public class WebViewActivity extends AppCompatActivity {
     InAppBrowserOptions options;
     ProgressBar progressBar;
     public boolean isLoading = false;
+    public boolean isHidden = false;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+
         setContentView(R.layout.activity_web_view);
 
         webView = findViewById(R.id.webView);
@@ -273,12 +276,21 @@ public class WebViewActivity extends AppCompatActivity {
     }
 
     public void hide() {
-        if (webView != null)
-            webView.setVisibility(View.INVISIBLE);
+        isHidden = true;
+        Intent openMainActivity= new Intent(this, InAppBrowserFlutterPlugin.registrar.activity().getClass());
+        openMainActivity.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
+        startActivityIfNeeded(openMainActivity, 0);
     }
     public void show() {
+        isHidden = false;
+        Intent openMainActivity= new Intent(InAppBrowserFlutterPlugin.registrar.activity(), WebViewActivity.class);
+        openMainActivity.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
+        startActivityIfNeeded(openMainActivity, 0);
+    }
+
+    public void stopLoading(){
         if (webView != null)
-            webView.setVisibility(View.VISIBLE);
+            webView.stopLoading();
     }
 
     public boolean isLoading() {
@@ -287,11 +299,6 @@ public class WebViewActivity extends AppCompatActivity {
         return false;
     }
 
-    public void stopLoading(){
-        if (webView != null)
-            webView.stopLoading();
-    }
-
     private void clearCookies() {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
             CookieManager.getInstance().removeAllCookies(new ValueCallback<Boolean>() {
diff --git a/example/lib/main.dart b/example/lib/main.dart
index 121a140..3d4ce3c 100644
--- a/example/lib/main.dart
+++ b/example/lib/main.dart
@@ -5,30 +5,30 @@ import 'package:flutter_inappbrowser/flutter_inappbrowser.dart';
 class MyInAppBrowser extends InAppBrowser {
 
   @override
-  void onLoadStart(String url) {
-    super.onLoadStart(url);
+  Future onLoadStart(String url) async {
     print("\n\nStarted $url\n\n");
+    //print("\n\n ${await this.isHidden()} \n\n");
   }
 
   @override
-  void onLoadStop(String url) async {
-    super.onLoadStop(url);
+  Future onLoadStop(String url) async {
     print("\n\nStopped $url\n\n");
-    print(await this.injectScriptCode("document.body.innerHTML"));
-    print(await this.injectScriptCode("3"));
-    print(await this.injectScriptCode("""
-      function asd (a,b) {
-        return a+b;
-       };
-       asd(3,5);
-    """));
-    print(await this.injectScriptCode("""
-      ["3",56,"sdf"];
-    """));
-    print(await this.injectScriptCode("""
-      var x = {"as":4, "dfdfg": 6};
-      x;
-    """));
+//    print(await this.injectScriptCode("document.body.innerHTML"));
+//    print(await this.injectScriptCode("3"));
+//    print(await this.injectScriptCode("""
+//      function asd (a,b) {
+//        return a+b;
+//       };
+//       asd(3,5);
+//    """));
+//    print(await this.injectScriptCode("""
+//      ["3",56,"sdf"];
+//    """));
+//    print(await this.injectScriptCode("""
+//      var x = {"as":4, "dfdfg": 6};
+//      x;
+//    """));
+    //print("\n\n ${await this.isHidden()} \n\n");
     /*this.injectScriptFile("https://code.jquery.com/jquery-3.3.1.min.js");
     this.injectScriptCode("""
       \$( "body" ).html( "Next Step..." )
@@ -44,13 +44,11 @@ class MyInAppBrowser extends InAppBrowser {
 
   @override
   void onLoadError(String url, int code, String message) {
-    super.onLoadError(url, code, message);
     print("\n\nCan't load $url.. Error: $message\n\n");
   }
 
   @override
   void onExit() {
-    super.onExit();
     print("\n\nBrowser closed!\n\n");
   }
 
@@ -81,12 +79,14 @@ class _MyAppState extends State<MyApp> {
         ),
         body: new Center(
           child: new RaisedButton(onPressed: () {
-            inAppBrowser.open("https://flutter.io/", options: {
-              //"toolbarTopFixedTitle": "Fixed title",
-              //"hideUrlBar": true,
-              //"toolbarTop": false,
-              //"toolbarBottom": false
-            });
+              inAppBrowser.open("https://flutter.io/", options: {
+                //"hidden": true
+                //"toolbarTopFixedTitle": "Fixed title",
+                //"hideUrlBar": true,
+                //"toolbarTop": false,
+                //"toolbarBottom": false
+              });
+
           },
           child: Text("Open InAppBrowser")
           ),
diff --git a/ios/Classes/InAppBrowserWebViewController.swift b/ios/Classes/InAppBrowserWebViewController.swift
index 56528d3..81b6d29 100644
--- a/ios/Classes/InAppBrowserWebViewController.swift
+++ b/ios/Classes/InAppBrowserWebViewController.swift
@@ -79,6 +79,7 @@ class InAppBrowserWebViewController: UIViewController, WKUIDelegate, WKNavigatio
     var tmpWindow: UIWindow?
     var browserOptions: InAppBrowserOptions?
     var initHeaders: [String: String]?
+    var isHidden = false
     
     required init(coder aDecoder: NSCoder) {
         super.init(coder: aDecoder)!
diff --git a/ios/Classes/SwiftFlutterPlugin.swift b/ios/Classes/SwiftFlutterPlugin.swift
index b6ae537..e624f99 100644
--- a/ios/Classes/SwiftFlutterPlugin.swift
+++ b/ios/Classes/SwiftFlutterPlugin.swift
@@ -87,6 +87,9 @@ public class SwiftFlutterPlugin: NSObject, FlutterPlugin {
             self.webViewController?.webView.stopLoading()
             result(true)
             break
+        case "isHidden":
+            result((self.webViewController?.isHidden ?? false) == true)
+            break
         case "injectScriptCode":
             self.injectScriptCode(arguments: arguments!, result: result)
             break
@@ -176,76 +179,97 @@ public class SwiftFlutterPlugin: NSObject, FlutterPlugin {
         let browserOptions = InAppBrowserOptions()
         browserOptions.parse(options: options)
         
-        if webViewController == nil {
+        if webViewController != nil {
+            close()
+        }
+        else if self.previousStatusBarStyle == -1 {
+            self.previousStatusBarStyle = UIApplication.shared.statusBarStyle.rawValue
+        }
+        
+        if !(self.tmpWindow != nil) {
+            let frame: CGRect = UIScreen.main.bounds
+            self.tmpWindow = UIWindow(frame: frame)
+        }
+        
+        let storyboard = UIStoryboard(name: WEBVIEW_STORYBOARD, bundle: nil)
+        let vc = storyboard.instantiateViewController(withIdentifier: WEBVIEW_STORYBOARD_CONTROLLER_ID)
+        webViewController = vc as? InAppBrowserWebViewController
+        webViewController?.browserOptions = browserOptions
+        webViewController?.isHidden = browserOptions.hidden
+        webViewController?.tmpWindow = tmpWindow
+        webViewController?.currentURL = url
+        webViewController?.initHeaders = headers
+        webViewController?.navigationDelegate = self
 
-            if !(self.tmpWindow != nil) {
-                let frame: CGRect = UIScreen.main.bounds
-                self.tmpWindow = UIWindow(frame: frame)
+        let tmpController = UIViewController()
+        let baseWindowLevel = UIApplication.shared.keyWindow?.windowLevel
+        self.tmpWindow?.rootViewController = tmpController
+        self.tmpWindow?.windowLevel = UIWindowLevel(baseWindowLevel! + 1)
+        self.tmpWindow?.makeKeyAndVisible()
+        if browserOptions.hidden {
+            webViewController!.view.isHidden = true
+            tmpController.present(self.webViewController!, animated: false, completion: {() -> Void in
+                if self.previousStatusBarStyle != -1 {
+                    UIApplication.shared.statusBarStyle = UIStatusBarStyle(rawValue: self.previousStatusBarStyle)!
+                }
+            })
+            if self.previousStatusBarStyle != -1 {
+                UIApplication.shared.statusBarStyle = UIStatusBarStyle(rawValue: self.previousStatusBarStyle)!
             }
-            
-            let storyboard = UIStoryboard(name: WEBVIEW_STORYBOARD, bundle: nil)
-            let vc = storyboard.instantiateViewController(withIdentifier: WEBVIEW_STORYBOARD_CONTROLLER_ID)
-            webViewController = vc as? InAppBrowserWebViewController
-            webViewController?.browserOptions = browserOptions
-            webViewController?.tmpWindow = tmpWindow
-            webViewController?.currentURL = url
-            webViewController?.initHeaders = headers
-            webViewController?.navigationDelegate = self
+            webViewController?.presentingViewController?.dismiss(animated: false, completion: {() -> Void in
+                self.tmpWindow?.windowLevel = 0.0
+                UIApplication.shared.delegate?.window??.makeKeyAndVisible()
+                if self.previousStatusBarStyle != -1 {
+                    UIApplication.shared.statusBarStyle = UIStatusBarStyle(rawValue: self.previousStatusBarStyle)!
+                }
+            })
         }
-        
-        if !browserOptions.hidden {
-            show()
+        else {
+            tmpController.present(webViewController!, animated: true, completion: nil)
         }
     }
     
     public func show() {
+        
         if webViewController == nil {
-            print("Tried to show IAB after it was closed.")
-            return
-        }
-        if previousStatusBarStyle != -1 {
-            print("Tried to show IAB while already shown")
+            print("Tried to hide IAB after it was closed.")
             return
         }
         
-        weak var weakSelf: SwiftFlutterPlugin? = self
+        self.webViewController?.isHidden = false
+        self.webViewController!.view.isHidden = false
         
         // Run later to avoid the "took a long time" log message.
         DispatchQueue.main.async(execute: {() -> Void in
-            if weakSelf?.webViewController != nil {
-                if !(self.tmpWindow != nil) {
-                    let frame: CGRect = UIScreen.main.bounds
-                    self.tmpWindow = UIWindow(frame: frame)
-                }
-                let tmpController = UIViewController()
+            if self.webViewController != nil {
                 let baseWindowLevel = UIApplication.shared.keyWindow?.windowLevel
-                self.tmpWindow?.rootViewController = tmpController
                 self.tmpWindow?.windowLevel = UIWindowLevel(baseWindowLevel! + 1)
                 self.tmpWindow?.makeKeyAndVisible()
-                
-                tmpController.present(self.webViewController!, animated: true, completion: nil)
+                UIApplication.shared.delegate?.window??.makeKeyAndVisible()
+                self.tmpWindow?.rootViewController?.present(self.webViewController!, animated: true, completion: nil)
             }
         })
     }
-    
+
     public func hide() {
         if webViewController == nil {
             print("Tried to hide IAB after it was closed.")
             return
         }
-        if previousStatusBarStyle == -1 {
-            print("Tried to hide IAB while already hidden")
-            return
+        
+        if self.webViewController != nil {
+            self.webViewController?.isHidden = true
         }
         
-        previousStatusBarStyle = UIApplication.shared.statusBarStyle.rawValue
         // Run later to avoid the "took a long time" log message.
         DispatchQueue.main.async(execute: {() -> Void in
             if self.webViewController != nil {
-                self.previousStatusBarStyle = -1
                 self.webViewController?.presentingViewController?.dismiss(animated: true, completion: {() -> Void in
                     self.tmpWindow?.windowLevel = 0.0
                     UIApplication.shared.delegate?.window??.makeKeyAndVisible()
+                    if self.previousStatusBarStyle != -1 {
+                        UIApplication.shared.statusBarStyle = UIStatusBarStyle(rawValue: self.previousStatusBarStyle)!
+                    }
                 })
             }
         })
@@ -345,8 +369,6 @@ public class SwiftFlutterPlugin: NSObject, FlutterPlugin {
             UIApplication.shared.statusBarStyle = UIStatusBarStyle(rawValue: previousStatusBarStyle)!
         }
         
-        previousStatusBarStyle = -1
-        // this value was reset before reapplying it. caused statusbar to stay black on ios7
     }
     
 }
diff --git a/lib/flutter_inappbrowser.dart b/lib/flutter_inappbrowser.dart
index 5a76eda..fbc0132 100644
--- a/lib/flutter_inappbrowser.dart
+++ b/lib/flutter_inappbrowser.dart
@@ -173,8 +173,13 @@ class InAppBrowser {
     return await _channel.invokeMethod('stopLoading');
   }
 
+  ///Check if the Web View of the [InAppBrowser] instance is hidden.
+  Future<bool> isHidden() async {
+    return await _channel.invokeMethod('isHidden');
+  }
+
   ///Injects JavaScript code into the [InAppBrowser] window. (Only available when the target is set to `_blank` or to `_self`)
-  Future<dynamic> injectScriptCode(String source) async {
+  Future<String> injectScriptCode(String source) async {
     Map<String, dynamic> args = <String, dynamic>{};
     args.putIfAbsent('source', () => source);
     return await _channel.invokeMethod('injectScriptCode', args);
-- 
2.26.2