summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue973.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue973.cs')
-rw-r--r--Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue973.cs164
1 files changed, 164 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue973.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue973.cs
new file mode 100644
index 00000000..71a9a629
--- /dev/null
+++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue973.cs
@@ -0,0 +1,164 @@
+using System.Diagnostics;
+
+using Xamarin.Forms.CustomAttributes;
+using System;
+
+#if UITEST
+using NUnit.Framework;
+using Xamarin.UITest;
+#endif
+
+namespace Xamarin.Forms.Controls
+{
+ internal class PageNameObject
+ {
+ public string PageName { get; private set; }
+
+ public PageNameObject (string pageName)
+ {
+ PageName = pageName;
+ }
+ }
+
+ [Preserve (AllMembers=true)]
+ [Issue (IssueTracker.Github, 973, "ActionBar doesn't immediately update when nested TabbedPage is changed", PlatformAffected.Android)]
+ public class Issue973 : TestMasterDetailPage
+ {
+ protected override void Init ()
+ {
+ var cells = new [] {
+ new PageNameObject ("Close Master"),
+ new PageNameObject ("Page 1"),
+ new PageNameObject ("Page 2"),
+ new PageNameObject ("Page 3"),
+ new PageNameObject ("Page 4"),
+ new PageNameObject ("Page 5"),
+ new PageNameObject ("Page 6"),
+ new PageNameObject ("Page 7"),
+ new PageNameObject ("Page 8"),
+ };
+
+ var template = new DataTemplate (typeof (TextCell));
+ template.SetBinding (TextCell.TextProperty, "PageName");
+
+ var listView = new ListView {
+ ItemTemplate = template,
+ ItemsSource = cells
+ };
+
+ listView.BindingContext = cells;
+
+ listView.ItemTapped += (sender, e) => {
+
+ var cellName = ((PageNameObject)e.Item).PageName;
+
+ if (cellName == "Close Master") {
+ IsPresented = false;
+ } else {
+ var d = new CustomDetailPage (cellName) {
+ Title = "Detail"
+ };
+
+ d.PresentMaster += (s, args) => {
+ IsPresented = true;
+ };
+
+ Detail = d;
+ }
+ };
+
+ var master = new ContentPage {
+ Padding = new Thickness (0, 20, 0, 0),
+ Title = "Master",
+ Content = listView
+ };
+
+ Master = master;
+
+ var detail = new CustomDetailPage ("Initial Page") {
+ Title = "Detail"
+ };
+
+ detail.PresentMaster += (sender, e) => {
+ IsPresented = true;
+ };
+
+ Detail = detail;
+ }
+
+#if UITEST
+ [Test]
+ [Description ("Test tab reset when swapping out detail")]
+ [UiTest (typeof(NavigationPage))]
+ [UiTest (typeof(TabbedPage))]
+ public void Issue973TestsTabResetAfterDetailSwap ()
+ {
+ RunningApp.WaitForElement (q => q.Marked ("Initial Page Left aligned"));
+ RunningApp.WaitForElement (q => q.Marked ("Tab 1"));
+
+ RunningApp.Tap (q => q.Marked ("Tab 2"));
+ RunningApp.WaitForElement (q => q.Marked ("Initial Page Right aligned"));
+ RunningApp.Screenshot ("Tab 2 showing");
+
+ RunningApp.Tap (q => q.Marked ("Present Master"));
+
+ RunningApp.Tap (q => q.Marked ("Page 4"));
+ RunningApp.Screenshot ("Change detail page");
+
+ RunningApp.Tap (q => q.Marked ("Close Master"));
+
+ RunningApp.WaitForElement (q => q.Marked ("Page 4 Left aligned"));
+ RunningApp.Screenshot ("Tab 1 Showing and tab 1 should be selected");
+
+ RunningApp.Tap (q => q.Marked ("Tab 2"));
+ RunningApp.WaitForElement (q => q.Marked ("Page 4 Right aligned"));
+ RunningApp.Screenshot ("Tab 2 showing");
+ }
+#endif
+
+ }
+
+ internal class CustomDetailPage : TabbedPage
+ {
+ public event EventHandler PresentMaster;
+
+ public CustomDetailPage (string pageName)
+ {
+ Title = pageName;
+
+ Children.Add (new ContentPage {
+ Title = "Tab 1",
+ Content = new StackLayout {
+ Children = {
+ new Label {
+ VerticalOptions = LayoutOptions.Center,
+ HorizontalOptions = LayoutOptions.Start,
+ Text = pageName + " Left aligned"
+ }
+ }
+ }
+ });
+
+ Children.Add (new ContentPage {
+ Title = "Tab 2",
+ Content = new StackLayout {
+ Children = {
+ new Label {
+ VerticalOptions = LayoutOptions.Center,
+ HorizontalOptions = LayoutOptions.End,
+ Text = pageName + " Right aligned"
+ },
+ new Button {
+ Text = "Present Master",
+ Command = new Command (() => {
+ var handler = PresentMaster;
+ if (handler != null)
+ handler(this, EventArgs.Empty);
+ })
+ }
+ }
+ }
+ });
+ }
+ }
+}