Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/SunboX/Prism.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornuits.jp <nuits.jp@live.jp>2017-05-12 16:37:04 +0300
committernuits.jp <nuits.jp@live.jp>2017-05-12 16:37:04 +0300
commit892c6cc6f72c89067004aaf2b5f68fb0d8dc3b86 (patch)
tree498b207e9f444c52914df04a96360bf7033c2fef
parent00a3aa5a920b0220f90a92c253d1cfd71fe2798c (diff)
Updating MasterDetailPage Navigation
If Detail is null, change to set the next Page to Detail in all cases.
-rw-r--r--Source/PrismLibrary_XF.sln5
-rw-r--r--Source/Xamarin/Prism.Forms.Tests/Mocks/Views/MasterDetailPageMock.cs1
-rw-r--r--Source/Xamarin/Prism.Forms.Tests/Navigation/PageNavigationServiceFixture.cs41
-rw-r--r--Source/Xamarin/Prism.Forms/Navigation/PageNavigationService.cs22
4 files changed, 56 insertions, 13 deletions
diff --git a/Source/PrismLibrary_XF.sln b/Source/PrismLibrary_XF.sln
index 33b3ccb..09daf72 100644
--- a/Source/PrismLibrary_XF.sln
+++ b/Source/PrismLibrary_XF.sln
@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 14
-VisualStudioVersion = 14.0.25420.1
+# Visual Studio 15
+VisualStudioVersion = 15.0.26403.7
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Prism", "Prism\Prism.csproj", "{E6C50355-D01E-4CAA-884D-D7929861315C}"
EndProject
@@ -114,6 +114,7 @@ Global
{B6E74918-D92B-4690-BEC9-0BB199A6E933}.Test|x64.ActiveCfg = Test|Any CPU
{B6E74918-D92B-4690-BEC9-0BB199A6E933}.Test|x86.ActiveCfg = Test|Any CPU
{DD171BA8-7B2D-4722-B5BF-E0A9EBFA1D5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DD171BA8-7B2D-4722-B5BF-E0A9EBFA1D5F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DD171BA8-7B2D-4722-B5BF-E0A9EBFA1D5F}.Debug|ARM.ActiveCfg = Debug|Any CPU
{DD171BA8-7B2D-4722-B5BF-E0A9EBFA1D5F}.Debug|x64.ActiveCfg = Debug|Any CPU
{DD171BA8-7B2D-4722-B5BF-E0A9EBFA1D5F}.Debug|x86.ActiveCfg = Debug|Any CPU
diff --git a/Source/Xamarin/Prism.Forms.Tests/Mocks/Views/MasterDetailPageMock.cs b/Source/Xamarin/Prism.Forms.Tests/Mocks/Views/MasterDetailPageMock.cs
index 1bcc79a..60f902e 100644
--- a/Source/Xamarin/Prism.Forms.Tests/Mocks/Views/MasterDetailPageMock.cs
+++ b/Source/Xamarin/Prism.Forms.Tests/Mocks/Views/MasterDetailPageMock.cs
@@ -35,6 +35,7 @@ namespace Prism.Forms.Tests.Mocks.Views
public MasterDetailPageEmptyMock()
{
ViewModelLocator.SetAutowireViewModel(this, true);
+ Master = new ContentPageMock {Title = "Master"};
}
}
}
diff --git a/Source/Xamarin/Prism.Forms.Tests/Navigation/PageNavigationServiceFixture.cs b/Source/Xamarin/Prism.Forms.Tests/Navigation/PageNavigationServiceFixture.cs
index fd2e11b..f3998a2 100644
--- a/Source/Xamarin/Prism.Forms.Tests/Navigation/PageNavigationServiceFixture.cs
+++ b/Source/Xamarin/Prism.Forms.Tests/Navigation/PageNavigationServiceFixture.cs
@@ -659,6 +659,26 @@ namespace Prism.Forms.Tests.Navigation
await navigationService.NavigateAsync("MasterDetailPage-Empty/ContentPage");
+ Assert.Equal(1, rootPage.Navigation.ModalStack.Count);
+ Assert.Equal(0, rootPage.Navigation.NavigationStack.Count);
+
+ var masterDetail = rootPage.Navigation.ModalStack[0] as MasterDetailPageEmptyMock;
+ Assert.NotNull(masterDetail);
+ Assert.NotNull(masterDetail.Detail);
+ Assert.IsType(typeof(ContentPageMock), masterDetail.Detail);
+ }
+
+ [Fact]
+ public async void DeepNavigate_ToEmptyMasterDetailPage_ToContentPage_UseModalNavigation()
+ {
+ var navigationService = new PageNavigationServiceMock(_container, _applicationProvider, _loggerFacade);
+ var rootPage = new Xamarin.Forms.ContentPage();
+ ((IPageAware)navigationService).Page = rootPage;
+
+ await navigationService.NavigateAsync("MasterDetailPage-Empty/ContentPage", useModalNavigation: true);
+
+ Assert.Equal(1, rootPage.Navigation.ModalStack.Count);
+ Assert.Equal(0, rootPage.Navigation.NavigationStack.Count);
var masterDetail = rootPage.Navigation.ModalStack[0] as MasterDetailPageEmptyMock;
Assert.NotNull(masterDetail);
Assert.NotNull(masterDetail.Detail);
@@ -666,6 +686,27 @@ namespace Prism.Forms.Tests.Navigation
}
[Fact]
+ public async void DeepNavigate_ToEmptyMasterDetailPage_ToContentPage_NotUseModalNavigation()
+ {
+ var navigationService = new PageNavigationServiceMock(_container, _applicationProvider, _loggerFacade);
+ var rootPage = new ContentPageMock();
+ var navigationPage = new NavigationPage(rootPage);
+ ((IPageAware)navigationService).Page = rootPage;
+
+ Assert.Equal(1, rootPage.Navigation.NavigationStack.Count);
+ Assert.IsType<ContentPageMock>(navigationPage.CurrentPage);
+
+ await navigationService.NavigateAsync("MasterDetailPage-Empty/ContentPage", useModalNavigation: false);
+
+ Assert.Equal(0, rootPage.Navigation.ModalStack.Count);
+ Assert.Equal(2, rootPage.Navigation.NavigationStack.Count);
+ var masterDetail = rootPage.Navigation.NavigationStack[1] as MasterDetailPageEmptyMock;
+ Assert.NotNull(masterDetail);
+ Assert.NotNull(masterDetail.Detail);
+ Assert.IsType(typeof(ContentPageMock), masterDetail.Detail);
+ }
+
+ [Fact]
public async void DeepNavigate_ToEmptyMasterDetailPage_ToNavigationPage()
{
var navigationService = new PageNavigationServiceMock(_container, _applicationProvider, _loggerFacade);
diff --git a/Source/Xamarin/Prism.Forms/Navigation/PageNavigationService.cs b/Source/Xamarin/Prism.Forms/Navigation/PageNavigationService.cs
index bb30e80..2f79d6c 100644
--- a/Source/Xamarin/Prism.Forms/Navigation/PageNavigationService.cs
+++ b/Source/Xamarin/Prism.Forms/Navigation/PageNavigationService.cs
@@ -299,27 +299,27 @@ namespace Prism.Navigation
{
bool isPresented = GetMasterDetailPageIsPresented(currentPage);
- if (useModalNavigation.HasValue && useModalNavigation.Value)
+ var detail = currentPage.Detail;
+ if (detail == null)
{
- var nextPage = CreatePageFromSegment(nextSegment);
- await ProcessNavigation(nextPage, segments, parameters, useModalNavigation, animated);
- await DoNavigateAction(currentPage, nextSegment, nextPage, parameters, async () =>
+ var newDetail = CreatePageFromSegment(nextSegment);
+ await ProcessNavigation(newDetail, segments, parameters, newDetail is NavigationPage ? false : true, animated);
+ await DoNavigateAction(null, nextSegment, newDetail, parameters, onNavigationActionCompleted: () =>
{
currentPage.IsPresented = isPresented;
- await DoPush(currentPage, nextPage, true, animated);
+ currentPage.Detail = newDetail;
});
return;
}
- var detail = currentPage.Detail;
- if (detail == null)
+ if (useModalNavigation.HasValue && useModalNavigation.Value)
{
- var newDetail = CreatePageFromSegment(nextSegment);
- await ProcessNavigation(newDetail, segments, parameters, newDetail is NavigationPage ? false : true, animated);
- await DoNavigateAction(null, nextSegment, newDetail, parameters, onNavigationActionCompleted: () =>
+ var nextPage = CreatePageFromSegment(nextSegment);
+ await ProcessNavigation(nextPage, segments, parameters, useModalNavigation, animated);
+ await DoNavigateAction(currentPage, nextSegment, nextPage, parameters, async () =>
{
currentPage.IsPresented = isPresented;
- currentPage.Detail = newDetail;
+ await DoPush(currentPage, nextPage, true, animated);
});
return;
}