8 #if !UNITY_EDITOR && UNITY_WSA && !(ENABLE_IL2CPP && NET_STANDARD_2_0) 9 using System.Threading.Tasks;
10 using Windows.ApplicationModel.Core;
11 using Windows.UI.Core;
12 using Windows.UI.ViewManagement;
13 using Windows.UI.Xaml;
14 using Windows.UI.Xaml.Controls;
30 #if !UNITY_EDITOR && UNITY_WSA && !(ENABLE_IL2CPP && NET_STANDARD_2_0) 34 Full3DViewId = ApplicationView.GetForCurrentView().Id;
39 #if !UNITY_EDITOR && UNITY_WSA && !(ENABLE_IL2CPP && NET_STANDARD_2_0) 40 static int Full3DViewId {
get;
set; }
41 static System.Collections.Concurrent.ConcurrentDictionary<int, Action<object>> CallbackDictionary
42 =
new System.Collections.Concurrent.ConcurrentDictionary<int, Action<object>>();
49 #if !UNITY_EDITOR && UNITY_WSA && !(ENABLE_IL2CPP && NET_STANDARD_2_0) 50 public static async
void CallbackReturnValue(
object returnValue)
52 var viewId = ApplicationView.GetForCurrentView().Id;
53 var view = CoreApplication.GetCurrentView();
54 if (CallbackDictionary.TryRemove(viewId, out var cb))
65 view.CoreWindow.Close();
73 public IEnumerator OnLaunchXamlView<TReturnValue>(
string xamlPageName, Action<TReturnValue> callback,
object pageNavigateParameter = null)
82 bool isCompleted =
false;
83 #if !UNITY_EDITOR && UNITY_WSA && !(ENABLE_IL2CPP && NET_STANDARD_2_0) 84 object returnValue = null;
85 CoreApplicationView newView = CoreApplication.CreateNewView();
87 var dispt = newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
90 void CoreWindow_VisibilityChanged(CoreWindow sender, VisibilityChangedEventArgs args)
92 if (args.Visible == false)
94 CallbackReturnValue(null);
97 newView.CoreWindow.VisibilityChanged += CoreWindow_VisibilityChanged;
98 Frame frame =
new Frame();
99 var pageType = Type.GetType(Windows.UI.Xaml.Application.Current.GetType().AssemblyQualifiedName.Replace(
".App,", $
".{xamlPageName},"));
100 var appv = ApplicationView.GetForCurrentView();
102 var cb =
new Action<object>(rval =>
107 frame.Navigate(pageType,pageNavigateParameter);
108 CallbackDictionary[newViewId] = cb;
109 Window.Current.Content = frame;
110 Window.Current.Activate();
113 yield
return new WaitUntil(() => dispt.IsCompleted || dispt.IsCanceled || dispt.IsFaulted);
114 Task viewShownTask = null;
118 viewShownTask = ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId).AsTask();
121 yield
return new WaitUntil(() => viewShownTask.IsCompleted || viewShownTask.IsCanceled || viewShownTask.IsFaulted);
122 yield
return new WaitUntil(() => isCompleted);
125 if (returnValue is TReturnValue)
127 callback?.Invoke((TReturnValue)returnValue);
131 callback?.Invoke(
default(TReturnValue));
140 yield
return new WaitUntil(() => isCompleted);