Example #1
0
            public void FindMostDerivedABP([Values(false, true)] bool useCompiledXaml)
            {
                if (useCompiledXaml)
                {
                    Assert.DoesNotThrow(() => MockCompiler.Compile(typeof(Gh12025)));
                }
                var layout = new Gh12025(useCompiledXaml);

                Assert.That(NavigationPage.GetIconColor(layout), Is.EqualTo(NavigationPage.IconColorProperty.DefaultValue));
                Assert.That(Gh12025NavPage.GetIconColor(layout), Is.EqualTo(Color.HotPink));
            }
        protected virtual void UpdateToolbar()
        {
            ActionBarDrawerToggle toggle = _drawerToggle;

            if (Toolbar == null || NavigationStack.Count == 0 || CurrentPage == null || VirtualView == null)
            {
                return;
            }

            bool isNavigated = NavigationStack.Count > 1;
            Page currentPage = CurrentPage;

            _defaultNavigationIcon ??= Toolbar.NavigationIcon;

            if (isNavigated)
            {
                if (NavigationPage.GetHasBackButton(currentPage))
                {
                    Toolbar.NavigationIcon ??= _defaultNavigationIcon;
                    if (toggle != null)
                    {
                        toggle.DrawerIndicatorEnabled = false;
                        toggle.SyncState();
                    }

                    var prevPage        = (Page)NavigationStack[NavigationStack.Count - 2];
                    var backButtonTitle = NavigationPage.GetBackButtonTitle(prevPage);

                    ImageSource image = NavigationPage.GetTitleIconImageSource(currentPage);
                    if (!string.IsNullOrEmpty(backButtonTitle))
                    {
                        Toolbar.NavigationContentDescription = backButtonTitle;
                    }
                    else if (image == null ||
                             Toolbar.SetNavigationContentDescription(image) == null)
                    {
                        Toolbar.SetNavigationContentDescription(Resource.String.nav_app_bar_navigate_up_description);
                    }
                }
                else if (toggle != null && _flyoutPage != null)
                {
                    toggle.DrawerIndicatorEnabled = _flyoutPage.ShouldShowToolbarButton();
                    toggle.SyncState();
                }
                else
                {
                    Toolbar.NavigationIcon = null;
                }
            }
            else
            {
                if (toggle != null && _flyoutPage != null)
                {
                    toggle.DrawerIndicatorEnabled = _flyoutPage.ShouldShowToolbarButton();
                    toggle.SyncState();
                    Toolbar.SetNavigationContentDescription(Resource.String.nav_app_bar_open_drawer_description);
                }
            }

            Color tintColor = NavigationView.BarBackgroundColor;

            if (tintColor == null)
            {
                Toolbar.BackgroundTintMode = null;
            }
            else
            {
                Toolbar.BackgroundTintMode = PorterDuff.Mode.Src;
                Toolbar.BackgroundTintList = ColorStateList.ValueOf(tintColor.ToNative());
            }

            Brush barBackground = NavigationView.BarBackground;

            Toolbar.UpdateBackground(barBackground);

            Color textColor = NavigationView.BarTextColor;

            if (textColor != null)
            {
                Toolbar.SetTitleTextColor(textColor.ToNative().ToArgb());
            }

            Color navIconColor = NavigationPage.GetIconColor(CurrentPage);

            if (navIconColor != null && Toolbar.NavigationIcon != null)
            {
                DrawableExtensions.SetColorFilter(Toolbar.NavigationIcon, navIconColor, FilterMode.SrcAtop);
            }

            Toolbar.Title = currentPage?.Title ?? string.Empty;

            if (Toolbar.NavigationIcon != null && textColor != null)
            {
                var icon = this.Toolbar.NavigationIcon as DrawerArrowDrawable;
                if (icon != null)
                {
                    icon.Color = textColor.ToNative().ToArgb();
                }
            }

            UpdateTitleIcon();
            UpdateTitleView();
            UpdateToolbarVisibility();
        }