// runs only when not restored from state public override async Task OnStartAsync(StartKind startKind, IActivatedEventArgs args) { var launch = args as LaunchActivatedEventArgs; if (launch?.PreviousExecutionState == ApplicationExecutionState.NotRunning || launch?.PreviousExecutionState == ApplicationExecutionState.Terminated || launch?.PreviousExecutionState == ApplicationExecutionState.ClosedByUser) { if (Shell.Instance.ViewModel.CurrentUser == null) { var userAccountDatabase = new UserAccountDatabase(new SQLitePlatformWinRT(), DatabaseWinRTHelpers.GetWinRTDatabasePath(StringConstants.UserDatabase)); if (await userAccountDatabase.HasAccounts()) { if (await userAccountDatabase.HasDefaultAccounts()) { try { var result = await Shell.Instance.ViewModel.LoginDefaultUser(); NavigationService.Navigate(result ? typeof(Views.MainPage) : typeof(Views.AccountPage)); } catch (Exception) { // error happened, send them to account page so we can check on it. NavigationService.Navigate(typeof(Views.AccountPage)); } } else { NavigationService.Navigate(typeof(Views.AccountPage)); } } else { NavigationService.Navigate(typeof(Views.LoginPage)); } } else { NavigationService.Navigate(typeof(Views.MainPage)); } } await Task.CompletedTask; }