private static readonly SemaphoreSlim semaphore = new SemaphoreSlim(1);
+ private static Stack<View> gadgetViews = new Stack<View>();
+
static GadgetNavigation()
{
SystemSettings.LocaleLanguageChanged += (object sender, LocaleLanguageChangedEventArgs e) => {
if (baseContentPage is BaseContentPage)
{
- NUIApplication.GetDefaultWindow().GetDefaultNavigator().Pop();
+ RemoveGadgetView();
}
else
{
try
{
- // CreateTransitions issue
- NUIApplication.GetDefaultWindow().GetDefaultNavigator().PopWithTransition();
+ RemoveGadgetView();
}
catch (Exception ex)
{
if (info == null)
{
Logger.Warn($"could not find gadget for menupath: {menuPath}");
- return;
- }
-
- if (gadgetPages.Values.Select(x => x.ClassName).Contains(info.ClassName))
- {
- Logger.Verbose($"Already navigated to menupath: {menuPath}");
+ semaphore.Release();
return;
}
try
{
- // CreateTransitions issue
- NUIApplication.GetDefaultWindow().GetDefaultNavigator().PushWithTransition(contentPage);
+ AddGadgetView(contentPage);
}
catch (Exception ex)
{
}
gadgetPages.Add(contentPage, gadget);
+ semaphore.Release();
return;
}
var backButton = new BackButton();
backButton.Margin = new Extents(0, 8, 0, 0).SpToPx();
backButton.Clicked += (s, e) => NavigateBack();
+ backButton.AccessibilityActivated += (s, e) => NavigateBack();
var moreItems = new List<View>();
gadget.OnPageAppeared?.Invoke();
};
- NUIApplication.GetDefaultWindow().GetDefaultNavigator().Push(page);
+ AddGadgetView(page);
gadgetPages.Add(page, gadget);
}
catch (Exception e)
}
}
+ public static void AddGadgetView(View newView)
+ {
+ Logger.Debug("Adding New Gadget View");
+ View currentView = NUIApplication.GetDefaultWindow().GetDefaultNavigator().GetChildAt(0);
+ if (currentView == null)
+ {
+ Logger.Warn("CurrentView is Null.");
+ return;
+ }
+ gadgetViews.Push(currentView);
+ NUIApplication.GetDefaultWindow().GetDefaultNavigator().Remove(currentView);
+ NUIApplication.GetDefaultWindow().GetDefaultNavigator().Add(newView);
+ }
+
+ public static void RemoveGadgetView()
+ {
+ Logger.Debug($"Removing Gadget View");
+ View previousView = gadgetViews.Pop();
+ if (previousView == null)
+ {
+ Logger.Warn("LastPage is Null.");
+ return;
+ }
+ Page currentPage = (Page)NUIApplication.GetDefaultWindow().GetDefaultNavigator().GetChildAt(0);
+ NUIApplication.GetDefaultWindow().GetDefaultNavigator().Remove(currentPage);
+ NUIApplication.GetDefaultWindow().GetDefaultNavigator().Add(previousView);
+ }
+
private static Control GetMoreButton(IEnumerable<MoreMenuItem> moreMenu)
{
if (moreMenu == null)
Direction = FlexLayout.FlexDirection.Row,
ItemsAlignment = FlexLayout.AlignmentType.Center
};
-
+
// remove buttons icon
item.Remove(item.Children[0]);