public void Show(SplashScreen splashScreen, Func <SplashScreen, UserControl> splashFactory, WindowLogic windowLogic) { if (splashFactory == null) { return; } var splash = splashFactory(splashScreen); var service = new PopupService(); popup = service.Show(PopupService.PopupSize.FullScreen, splash); windowLogic.ActivateWindow(WindowLogic.ActivateWindowSources.SplashScreen, this); }
private async void StartupOrchestratorAsync(IActivatedEventArgs e, StartKind kind) { DebugWrite($"kind:{kind} previous:{e.PreviousExecutionState}"); if (OriginalActivatedArgs == null) { OriginalActivatedArgs = e; // if resume tries to launch, don't continue on // StartupOrchestratorAsync will be called twice if (OriginalActivatedArgs == null) { OnResuming(this, null, AppExecutionState.Terminated); return; } } // is the kind really right? if (kind == StartKind.Launch && CurrentStateHistory.ContainsValue(BootstrapperStates.Launched)) { kind = StartKind.Activate; } else if (kind == StartKind.Launch && e.PreviousExecutionState == ApplicationExecutionState.Running) { kind = StartKind.Activate; } else if (kind == StartKind.Activate && e.PreviousExecutionState != ApplicationExecutionState.Running) { kind = StartKind.Launch; } // handle activate if (kind == StartKind.Activate) { // never activate until launch has completed while (!CurrentStateHistory.ContainsValue(BootstrapperStates.Launched)) { await Task.Delay(10); } await OnStartAsync(kind, e); CurrentState = BootstrapperStates.Started; WindowLogic.ActivateWindow(ActivateWindowSources.Activating, SplashLogic); CurrentState = BootstrapperStates.Activated; } // handle first-time launch else if (kind == StartKind.Launch) { SplashLogic.Show(e.SplashScreen, this); // do some one-time things SetupKeyboardListeners(); SetupLifecycleListeners(); SetupSystemListeners(); SetupCustomTitleBar(); // default Unspecified extended session await ExtendedSessionService.StartAsync(); // OnInitializeAsync await OnInitializeAsync(e); CurrentState = BootstrapperStates.Initialized; // if there no pre-existing root then generate root if (SplashLogic.Splashing || Window.Current.Content == null) { Window.Current.Content = CreateRootElement(e); } // okay, now handle launch bool restored = false; var IsPrelaunch = (e as LaunchActivatedEventArgs)?.PrelaunchActivated ?? false; switch (e.PreviousExecutionState) { case ApplicationExecutionState.Suspended: case ApplicationExecutionState.Terminated: OnResuming(this, null, IsPrelaunch ? AppExecutionState.Prelaunch : AppExecutionState.Terminated); if (AutoRestoreAfterTerminated) { restored = await LifecycleLogic.AutoRestoreAsync(e as ILaunchActivatedEventArgs, NavigationService); CurrentState = BootstrapperStates.Restored; } break; } // handle if pre-launch (no UI) if (IsPrelaunch) { var runOnStartAsync = false; await OnPrelaunchAsync(e, out runOnStartAsync); CurrentState = BootstrapperStates.Prelaunched; if (!runOnStartAsync) { return; } } // handle if not restored (new launch) if (!restored) { await OnStartAsync(StartKind.Launch, e); CurrentState = BootstrapperStates.Started; } // this will also hide any showing splashscreen WindowLogic.ActivateWindow(ActivateWindowSources.Launching, SplashLogic); CurrentState = BootstrapperStates.Launched; } }
private async void StartupOrchestratorAsync(IActivatedEventArgs e, StartKind kind) { DebugWrite($"kind:{kind} previous:{e.PreviousExecutionState}"); // check if this is the first activation at all, when we can save PreviousExecutionState and PrelaunchActivated if (!_firstActivationExecuted) { _firstActivationExecuted = true; PreviousExecutionState = e.PreviousExecutionState; PrelaunchActivated = (e as LaunchActivatedEventArgs)?.PrelaunchActivated ?? false; } // is the kind really right? if (kind == StartKind.Launch && CurrentStateHistory.ContainsValue(BootstrapperStates.Launching)) { kind = StartKind.Activate; } else if (kind == StartKind.Launch && e.PreviousExecutionState == ApplicationExecutionState.Running) { kind = StartKind.Activate; } else if (kind == StartKind.Activate && e.PreviousExecutionState != ApplicationExecutionState.Running) { kind = StartKind.Launch; } // handle activate if (kind == StartKind.Activate) { CurrentState = BootstrapperStates.Activating; // never activate until launch has completed while (!CurrentStateHistory.ContainsValue(BootstrapperStates.Launched)) { await Task.Delay(10); } while (CurrentStateHistory.Count(x => x.Value == BootstrapperStates.Starting) != CurrentStateHistory.Count(x => x.Value == BootstrapperStates.Started)) { await Task.Delay(10); } CurrentState = BootstrapperStates.Starting; await OnStartAsync(kind, e); CurrentState = BootstrapperStates.Started; WindowLogic.ActivateWindow(ActivateWindowSources.Activating, SplashLogic); CurrentState = BootstrapperStates.Activated; } // handle first-time launch else if (kind == StartKind.Launch) { CurrentState = BootstrapperStates.Launching; SplashLogic.Show(e.SplashScreen, this); // do some one-time things SetupKeyboardListeners(); SetupLifecycleListeners(); SetupSystemListeners(); SetupCustomTitleBar(); // default Unspecified extended session if (AutoExtendExecutionSession) { await ExtendedSessionService.StartUnspecifiedAsync(); } CurrentState = BootstrapperStates.Initializing; // OnInitializeAsync await OnInitializeAsync(e); CurrentState = BootstrapperStates.Initialized; // if there no pre-existing root then generate root if (SplashLogic.Splashing || Window.Current.Content == null) { Window.Current.Content = CreateRootElement(e); } // okay, now handle launch bool restored = false; var IsPrelaunch = (e as LaunchActivatedEventArgs)?.PrelaunchActivated ?? false; switch (e.PreviousExecutionState) { case ApplicationExecutionState.Suspended: case ApplicationExecutionState.Terminated: OnResuming(this, null, IsPrelaunch ? AppExecutionState.Prelaunch : AppExecutionState.Terminated); var launchedEventArgs = e as ILaunchActivatedEventArgs; if (AutoRestoreAfterTerminated && DetermineStartCause(e) == AdditionalKinds.Primary || launchedEventArgs?.TileId == string.Empty) { CurrentState = BootstrapperStates.Restoring; restored = await NavigationService.LoadAsync(); CurrentState = BootstrapperStates.Restored; } break; } // handle if pre-launch (no UI) if (IsPrelaunch) { CurrentState = BootstrapperStates.Prelaunching; var runOnStartAsync = false; await OnPrelaunchAsync(e, out runOnStartAsync); CurrentState = BootstrapperStates.Prelaunched; if (!runOnStartAsync) { return; } } // handle if not restored (new launch) if (!restored) { CurrentState = BootstrapperStates.Starting; await OnStartAsync(StartKind.Launch, e); CurrentState = BootstrapperStates.Started; } // this will also hide any showing splashscreen WindowLogic.ActivateWindow(ActivateWindowSources.Launching, SplashLogic); CurrentState = BootstrapperStates.Launched; } }