target android sdk 26 with fixes to HybridWebView

This commit is contained in:
Kyle Spearrin 2018-10-08 23:21:29 -04:00
parent 144d932591
commit 9593f330db
2 changed files with 24 additions and 13 deletions

View file

@ -7,7 +7,6 @@ using Android.Webkit;
using AWebkit = Android.Webkit; using AWebkit = Android.Webkit;
using Java.Interop; using Java.Interop;
using Android.Content; using Android.Content;
using Plugin.CurrentActivity;
[assembly: ExportRenderer(typeof(HybridWebView), typeof(HybridWebViewRenderer))] [assembly: ExportRenderer(typeof(HybridWebView), typeof(HybridWebViewRenderer))]
namespace Bit.Android.Controls namespace Bit.Android.Controls
@ -16,9 +15,13 @@ namespace Bit.Android.Controls
{ {
private const string JSFunction = "function invokeCSharpAction(data){jsBridge.invokeAction(data);}"; private const string JSFunction = "function invokeCSharpAction(data){jsBridge.invokeAction(data);}";
private readonly Context _context;
public HybridWebViewRenderer(Context context) public HybridWebViewRenderer(Context context)
: base(context) : base(context)
{ } {
_context = context;
}
protected override void OnElementChanged(ElementChangedEventArgs<HybridWebView> e) protected override void OnElementChanged(ElementChangedEventArgs<HybridWebView> e)
{ {
@ -26,8 +29,9 @@ namespace Bit.Android.Controls
if(Control == null) if(Control == null)
{ {
var webView = new AWebkit.WebView(CrossCurrentActivity.Current.Activity); var webView = new AWebkit.WebView(_context);
webView.Settings.JavaScriptEnabled = true; webView.Settings.JavaScriptEnabled = true;
webView.SetWebViewClient(new JSWebViewClient(string.Format("javascript: {0}", JSFunction)));
SetNativeControl(webView); SetNativeControl(webView);
} }
@ -42,15 +46,6 @@ namespace Bit.Android.Controls
{ {
Control.AddJavascriptInterface(new JSBridge(this), "jsBridge"); Control.AddJavascriptInterface(new JSBridge(this), "jsBridge");
Control.LoadUrl(Element.Uri); Control.LoadUrl(Element.Uri);
InjectJS(JSFunction);
}
}
private void InjectJS(string script)
{
if(Control != null)
{
Control.LoadUrl(string.Format("javascript: {0}", script));
} }
} }
@ -74,5 +69,21 @@ namespace Bit.Android.Controls
} }
} }
} }
public class JSWebViewClient : WebViewClient
{
private readonly string _javascript;
public JSWebViewClient(string javascript)
{
_javascript = javascript;
}
public override void OnPageFinished(AWebkit.WebView view, string url)
{
base.OnPageFinished(view, url);
view.EvaluateJavascript(_javascript, null);
}
}
} }
} }

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.x8bit.bitwarden" android:versionName="1.19.4" android:installLocation="auto" android:versionCode="502" xmlns:tools="http://schemas.android.com/tools"> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.x8bit.bitwarden" android:versionName="1.19.4" android:installLocation="auto" android:versionCode="502" xmlns:tools="http://schemas.android.com/tools">
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" /> <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="26" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.NFC" /> <uses-permission android:name="android.permission.NFC" />