public async Task Navigate_To_Page_With_UseTitleBarBackButton_False_Does_Not_Change_Back_Button_Visibility() { await DispatcherHelper.ExecuteOnUIThread(() => { var eventAggregator = new EventAggregator(); var frame = new FrameFacadeAdapter(new Frame()); var sessionStateService = new MockSessionStateService(); sessionStateService.GetSessionStateForFrameDelegate = (currentFrame) => new Dictionary <string, object>(); var navigationService = new FrameNavigationService(frame, (pageToken) => typeof(MockPage), sessionStateService); var deviceGestureService = new DeviceGestureService(eventAggregator); deviceGestureService.UseTitleBarBackButton = true; var navigationManager = SystemNavigationManager.GetForCurrentView(); // Reset back button visibility before running, can't do this in TestInitialize because CoreWindow sometimes isn't ready SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Collapsed; // If it's collapsed and we navigate, it stays collapsed Assert.AreEqual(AppViewBackButtonVisibility.Collapsed, navigationManager.AppViewBackButtonVisibility); navigationService.Navigate("Mock", 1); Assert.AreEqual(AppViewBackButtonVisibility.Collapsed, navigationManager.AppViewBackButtonVisibility); // If it's visible and our back stack is emptied, it stays visible navigationManager.AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible; navigationService.ClearHistory(); Assert.AreEqual(AppViewBackButtonVisibility.Visible, navigationManager.AppViewBackButtonVisibility); }); }
public async Task Remove_All_Back_Button_Collapsed() { await DispatcherHelper.ExecuteOnUIThread(() => { var eventAggregator = new EventAggregator(); var frame = new FrameFacadeAdapter(new Frame(), eventAggregator); var sessionStateService = new MockSessionStateService(); sessionStateService.GetSessionStateForFrameDelegate = (currentFrame) => new Dictionary <string, object>(); var navigationService = new FrameNavigationService(frame, (pageToken) => typeof(MockPage), sessionStateService); var deviceGestureService = new DeviceGestureService(eventAggregator); deviceGestureService.UseTitleBarBackButton = true; var navigationManager = SystemNavigationManager.GetForCurrentView(); // Reset back button visibility before running, can't do this in TestInitialize because CoreWindow sometimes isn't ready SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Collapsed; Assert.AreEqual(AppViewBackButtonVisibility.Collapsed, navigationManager.AppViewBackButtonVisibility); navigationService.Navigate("Mock", 1); Assert.AreEqual(AppViewBackButtonVisibility.Collapsed, navigationManager.AppViewBackButtonVisibility); navigationService.Navigate("Mock", 2); Assert.AreEqual(AppViewBackButtonVisibility.Visible, navigationManager.AppViewBackButtonVisibility); navigationService.RemoveAllPages(); Assert.AreEqual(AppViewBackButtonVisibility.Collapsed, navigationManager.AppViewBackButtonVisibility); }); }
/// <summary> /// /// </summary> /// <returns></returns> protected virtual IDeviceGestureService CreateDeviceGestureService() { DeviceGestureService deviceGestureService = new DeviceGestureService(); deviceGestureService.UseTitleBarBackButton = true; return(deviceGestureService); }
/// <summary> /// Creates the device gesture service. /// </summary> /// <returns>The initialized device gesture service.</returns> private IDeviceGestureService CreateDeviceGestureService() { var deviceGestureService = OnCreateDeviceGestureService(); if (deviceGestureService == null) { deviceGestureService = new DeviceGestureService(EventAggregator); deviceGestureService.UseTitleBarBackButton = true; } return(deviceGestureService); }
/// <summary> /// Initializes the Frame and its content. /// </summary> /// <param name="args">The <see cref="IActivatedEventArgs"/> instance containing the event data.</param> /// <returns>A task of a Frame that holds the app content.</returns> protected async Task <Frame> InitializeFrameAsync(IActivatedEventArgs args) { // Create a Frame to act as the navigation context and navigate to the first page var rootFrame = new Frame(); if (ExtendedSplashScreenFactory != null) { Page extendedSplashScreen = this.ExtendedSplashScreenFactory.Invoke(args.SplashScreen); rootFrame.Content = extendedSplashScreen; } rootFrame.Navigated += OnNavigated; var frameFacade = new FrameFacadeAdapter(rootFrame); //Initialize PrismApplication common services SessionStateService = new SessionStateService(); //Configure VisualStateAwarePage with the ability to get the session state for its frame VisualStateAwarePage.GetSessionStateForFrame = frame => SessionStateService.GetSessionStateForFrame(frameFacade); //Associate the frame with a key SessionStateService.RegisterFrame(frameFacade, "AppFrame"); NavigationService = CreateNavigationService(frameFacade, SessionStateService); DeviceGestureService = CreateDeviceGestureService(); DeviceGestureService.InitializeEventHandlers(); DeviceGestureService.GoBackRequested += OnGoBackRequested; DeviceGestureService.GoForwardRequested += OnGoForwardRequested; // Set a factory for the ViewModelLocator to use the default resolution mechanism to construct view models ViewModelLocationProvider.SetDefaultViewModelFactory(Resolve); OnRegisterKnownTypesForSerialization(); if (args.PreviousExecutionState == ApplicationExecutionState.Terminated) { await SessionStateService.RestoreSessionStateAsync(); } await OnInitializeAsync(args); if (args.PreviousExecutionState == ApplicationExecutionState.Terminated) { // Restore the saved session state and navigate to the last page visited try { SessionStateService.RestoreFrameState(); NavigationService.RestoreSavedNavigation(); _isRestoringFromTermination = true; } catch (SessionStateServiceException) { // Something went wrong restoring state. // Assume there is no state and continue } } return(rootFrame); }
/// <summary> /// Initializes the Frame and its content. /// </summary> /// <param name="args">The <see cref="IActivatedEventArgs"/> instance containing the event data.</param> /// <returns>A task of a Frame that holds the app content.</returns> protected async Task <Frame> InitializeFrameAsync(IActivatedEventArgs args) { var rootFrame = Window.Current.Content as Frame; // Do not repeat app initialization when the Window already has content, // just ensure that the window is active if (rootFrame == null) { // Create a Frame to act as the navigation context and navigate to the first page rootFrame = new Frame(); if (ExtendedSplashScreenFactory != null) { Page extendedSplashScreen = this.ExtendedSplashScreenFactory.Invoke(args.SplashScreen); rootFrame.Content = extendedSplashScreen; } rootFrame.Navigated += OnNavigated; var frameFacade = new FrameFacadeAdapter(rootFrame); //Initialize PrismApplication common services SessionStateService = new SessionStateService(); //Configure VisualStateAwarePage with the ability to get the session state for its frame VisualStateAwarePage.GetSessionStateForFrame = frame => SessionStateService.GetSessionStateForFrame(frameFacade); //Associate the frame with a key SessionStateService.RegisterFrame(frameFacade, "AppFrame"); NavigationService = CreateNavigationService(frameFacade, SessionStateService); // Register hardware back button event if present if (ApiInformation.IsEventPresent("Windows.Phone.UI.Input.HardwareButtons", "BackPressed")) { HardwareButtons.BackPressed += HardwareButtonsOnBackPressed; } DeviceGestureService = CreateDeviceGestureService(); DeviceGestureService.InitializeEventHandlers(); DeviceGestureService.GoBackRequested += OnGoBackRequested; DeviceGestureService.GoForwardRequested += OnGoForwardRequested; // Set a factory for the ViewModelLocator to use the default resolution mechanism to construct view models ViewModelLocationProvider.SetDefaultViewModelFactory(Resolve); OnRegisterKnownTypesForSerialization(); if (args.PreviousExecutionState == ApplicationExecutionState.Terminated) { await SessionStateService.RestoreSessionStateAsync(); } await OnInitializeAsync(args); if (args.PreviousExecutionState == ApplicationExecutionState.Terminated) { // Restore the saved session state and navigate to the last page visited try { SessionStateService.RestoreFrameState(); NavigationService.RestoreSavedNavigation(); _isRestoringFromTermination = true; } catch (SessionStateServiceException) { // Something went wrong restoring state. // Assume there is no state and continue } } // Place the frame in the current Window Window.Current.Content = rootFrame; } return(rootFrame); }