Skip to content

Commit eb03c0b

Browse files
committed
Expand Android url's which can be cancelled
1 parent 71ad25f commit eb03c0b

5 files changed

Lines changed: 46 additions & 10 deletions

File tree

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
33
<PropertyGroup>
4-
<SelectedDevice>Nexus_9_API_26</SelectedDevice>
5-
<DefaultDevice>Nexus_9_API_26</DefaultDevice>
4+
<SelectedDevice>HUAWEI MHA-L09</SelectedDevice>
5+
<DefaultDevice>Android_5</DefaultDevice>
66
</PropertyGroup>
77
</Project>

SampleApp/SampleApp.UWP/App.xaml.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
using System;
2+
using System.Collections.Generic;
3+
using System.Reflection;
24
using Windows.ApplicationModel;
35
using Windows.ApplicationModel.Activation;
46
using Windows.UI.Xaml;
57
using Windows.UI.Xaml.Controls;
68
using Windows.UI.Xaml.Navigation;
9+
using Xam.Plugin.WebView.Abstractions;
710
using Xam.Plugin.WebView.UWP;
811

912
namespace SampleApp.UWP
@@ -50,6 +53,7 @@ protected override void OnLaunched(LaunchActivatedEventArgs e)
5053
rootFrame.NavigationFailed += OnNavigationFailed;
5154

5255
FormsWebViewRenderer.Initialize();
56+
5357
Xamarin.Forms.Forms.Init(e);
5458

5559
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
4+
<DebugEngines>
5+
</DebugEngines>
6+
<BackgroundTaskDebugEngines>
7+
</BackgroundTaskDebugEngines>
8+
</PropertyGroup>
9+
</Project>

Xam.Plugin.WebView.Droid/FormsWebViewChromeClient.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,6 @@ public FormsWebViewChromeClient(FormsWebViewRenderer renderer)
2222
{
2323
Reference = new WeakReference<FormsWebViewRenderer>(renderer);
2424
}
25+
2526
}
2627
}

Xam.Plugin.WebView.Droid/FormsWebViewClient.cs

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,24 +40,46 @@ public override void OnReceivedError(Android.Webkit.WebView view, IWebResourceRe
4040
renderer.Element.Navigating = false;
4141
}
4242

43-
public override bool ShouldOverrideUrlLoading(Android.Webkit.WebView view, IWebResourceRequest request)
43+
public override WebResourceResponse ShouldInterceptRequest(Android.Webkit.WebView view, IWebResourceRequest request)
4444
{
45-
if (Reference == null || !Reference.TryGetTarget(out FormsWebViewRenderer renderer)) return true;
46-
if (renderer.Element == null) return true;
45+
if (Reference == null || !Reference.TryGetTarget(out FormsWebViewRenderer renderer)) goto EndShouldInterceptRequest;
46+
if (renderer.Element == null) goto EndShouldInterceptRequest;
4747

4848
string url = request.Url.ToString();
4949
var response = renderer.Element.HandleNavigationStartRequest(url);
5050

5151
if (response.Cancel || response.OffloadOntoDevice)
5252
{
53-
if (response.OffloadOntoDevice)
54-
AttemptToHandleCustomUrlScheme(view, url);
53+
Device.BeginInvokeOnMainThread(() =>
54+
{
55+
if (response.OffloadOntoDevice)
56+
AttemptToHandleCustomUrlScheme(view, url);
5557

56-
view.StopLoading();
57-
return true;
58+
view.StopLoading();
59+
});
5860
}
5961

60-
return false;
62+
EndShouldInterceptRequest:
63+
return base.ShouldInterceptRequest(view, request);
64+
}
65+
66+
void CheckResponseValidity(Android.Webkit.WebView view, string url)
67+
{
68+
if (Reference == null || !Reference.TryGetTarget(out FormsWebViewRenderer renderer)) return;
69+
if (renderer.Element == null) return;
70+
71+
var response = renderer.Element.HandleNavigationStartRequest(url);
72+
73+
if (response.Cancel || response.OffloadOntoDevice)
74+
{
75+
Device.BeginInvokeOnMainThread(() =>
76+
{
77+
if (response.OffloadOntoDevice)
78+
AttemptToHandleCustomUrlScheme(view, url);
79+
80+
view.StopLoading();
81+
});
82+
}
6183
}
6284

6385
public override void OnPageStarted(Android.Webkit.WebView view, string url, Bitmap favicon)

0 commit comments

Comments
 (0)