Added logic to launch Browser from Windows
This commit is contained in:
parent
de9102f38a
commit
b8e71c9c66
|
@ -24,7 +24,8 @@ namespace Ooui
|
||||||
x => x.GetName().Name);
|
x => x.GetName().Name);
|
||||||
|
|
||||||
asms.TryGetValue("Xamarin.iOS", out iosAssembly);
|
asms.TryGetValue("Xamarin.iOS", out iosAssembly);
|
||||||
if (iosAssembly != null) {
|
if (iosAssembly != null)
|
||||||
|
{
|
||||||
iosUIViewControllerType = iosAssembly.GetType("UIKit.UIViewController");
|
iosUIViewControllerType = iosAssembly.GetType("UIKit.UIViewController");
|
||||||
iosUIApplicationType = iosAssembly.GetType("UIKit.UIApplication");
|
iosUIApplicationType = iosAssembly.GetType("UIKit.UIApplication");
|
||||||
iosUIWebViewType = iosAssembly.GetType("UIKit.UIWebView");
|
iosUIWebViewType = iosAssembly.GetType("UIKit.UIWebView");
|
||||||
|
@ -33,7 +34,8 @@ namespace Ooui
|
||||||
}
|
}
|
||||||
|
|
||||||
asms.TryGetValue("Mono.Android", out androidAssembly);
|
asms.TryGetValue("Mono.Android", out androidAssembly);
|
||||||
if (androidAssembly != null) {
|
if (androidAssembly != null)
|
||||||
|
{
|
||||||
androidActivityType = androidAssembly.GetType("Android.App.Activity");
|
androidActivityType = androidAssembly.GetType("Android.App.Activity");
|
||||||
androidWebViewType = androidAssembly.GetType("Android.Webkit.WebView");
|
androidWebViewType = androidAssembly.GetType("Android.Webkit.WebView");
|
||||||
}
|
}
|
||||||
|
@ -41,13 +43,16 @@ namespace Ooui
|
||||||
|
|
||||||
public static void OpenBrowser(string url, object presenter)
|
public static void OpenBrowser(string url, object presenter)
|
||||||
{
|
{
|
||||||
if (iosAssembly != null) {
|
if (iosAssembly != null)
|
||||||
|
{
|
||||||
OpenBrowserOniOS(url, presenter);
|
OpenBrowserOniOS(url, presenter);
|
||||||
}
|
}
|
||||||
else if (androidAssembly != null) {
|
else if (androidAssembly != null)
|
||||||
|
{
|
||||||
OpenBrowserOnAndroid(url, presenter);
|
OpenBrowserOnAndroid(url, presenter);
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
StartBrowserProcess(url);
|
StartBrowserProcess(url);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -57,11 +62,13 @@ namespace Ooui
|
||||||
var presenterType = GetObjectType(presenter);
|
var presenterType = GetObjectType(presenter);
|
||||||
|
|
||||||
object presenterWebView = null;
|
object presenterWebView = null;
|
||||||
if (presenter != null && androidWebViewType.IsAssignableFrom (presenterType)) {
|
if (presenter != null && androidWebViewType.IsAssignableFrom(presenterType))
|
||||||
|
{
|
||||||
presenterWebView = presenter;
|
presenterWebView = presenter;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (presenterWebView == null) {
|
if (presenterWebView == null)
|
||||||
|
{
|
||||||
throw new ArgumentException("Presenter must be a WebView", nameof(presenter));
|
throw new ArgumentException("Presenter must be a WebView", nameof(presenter));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,23 +87,28 @@ namespace Ooui
|
||||||
// 3. Create a window?
|
// 3. Create a window?
|
||||||
//
|
//
|
||||||
object presenterViewController = null;
|
object presenterViewController = null;
|
||||||
if (presenter != null && iosUIViewControllerType.IsAssignableFrom (presenterType)) {
|
if (presenter != null && iosUIViewControllerType.IsAssignableFrom(presenterType))
|
||||||
|
{
|
||||||
presenterViewController = presenter;
|
presenterViewController = presenter;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (presenterViewController == null) {
|
if (presenterViewController == null)
|
||||||
|
{
|
||||||
var app = iosUIApplicationType.GetProperty("SharedApplication").GetValue(null, null);
|
var app = iosUIApplicationType.GetProperty("SharedApplication").GetValue(null, null);
|
||||||
var window = iosUIApplicationType.GetProperty("KeyWindow").GetValue(app, null);
|
var window = iosUIApplicationType.GetProperty("KeyWindow").GetValue(app, null);
|
||||||
if (window != null) {
|
if (window != null)
|
||||||
|
{
|
||||||
var rvc = window.GetType().GetProperty("RootViewController").GetValue(window, null);
|
var rvc = window.GetType().GetProperty("RootViewController").GetValue(window, null);
|
||||||
if (rvc != null) {
|
if (rvc != null)
|
||||||
|
{
|
||||||
var pvc = rvc.GetType().GetProperty("PresentedViewController").GetValue(rvc, null);
|
var pvc = rvc.GetType().GetProperty("PresentedViewController").GetValue(rvc, null);
|
||||||
presenterViewController = pvc ?? rvc;
|
presenterViewController = pvc ?? rvc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (presenterViewController == null) {
|
if (presenterViewController == null)
|
||||||
|
{
|
||||||
throw new InvalidOperationException("Cannot find a view controller from which to present");
|
throw new InvalidOperationException("Cannot find a view controller from which to present");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -121,10 +133,12 @@ namespace Ooui
|
||||||
static Type GetObjectType(object o)
|
static Type GetObjectType(object o)
|
||||||
{
|
{
|
||||||
var t = typeof(object);
|
var t = typeof(object);
|
||||||
if (o is IReflectableType rt) {
|
if (o is IReflectableType rt)
|
||||||
|
{
|
||||||
t = rt.GetTypeInfo().AsType();
|
t = rt.GetTypeInfo().AsType();
|
||||||
}
|
}
|
||||||
else if (o != null) {
|
else if (o != null)
|
||||||
|
{
|
||||||
t = o.GetType();
|
t = o.GetType();
|
||||||
}
|
}
|
||||||
return t;
|
return t;
|
||||||
|
@ -133,21 +147,34 @@ namespace Ooui
|
||||||
static Process StartBrowserProcess(string url)
|
static Process StartBrowserProcess(string url)
|
||||||
{
|
{
|
||||||
var cmd = url;
|
var cmd = url;
|
||||||
var args = "";
|
var args = string.Empty;
|
||||||
|
|
||||||
var osv = Environment.OSVersion;
|
var osv = Environment.OSVersion;
|
||||||
if (osv.Platform == PlatformID.Unix) {
|
|
||||||
|
if (osv.Platform == PlatformID.Unix)
|
||||||
|
{
|
||||||
cmd = "open";
|
cmd = "open";
|
||||||
args = url;
|
args = url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var platform = (int)Environment.OSVersion.Platform;
|
||||||
|
var isWindows = ((platform != 4) && (platform != 6) && (platform != 128));
|
||||||
|
|
||||||
|
if (isWindows)
|
||||||
|
{
|
||||||
|
cmd = "explorer.exe";
|
||||||
|
args = url;
|
||||||
|
}
|
||||||
|
|
||||||
// var vs = Environment.GetEnvironmentVariables ();
|
// var vs = Environment.GetEnvironmentVariables ();
|
||||||
// foreach (System.Collections.DictionaryEntry kv in vs) {
|
// foreach (System.Collections.DictionaryEntry kv in vs) {
|
||||||
// System.Console.WriteLine($"K={kv.Key}, V={kv.Value}");
|
// System.Console.WriteLine($"K={kv.Key}, V={kv.Value}");
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// Console.WriteLine ($"Process.Start {cmd} {args}");
|
// Console.WriteLine ($"Process.Start {cmd} {args}");
|
||||||
|
|
||||||
return Process.Start(cmd, args);
|
return Process.Start(cmd, args);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue