diff --git a/Pixiview.iOS/Pixiview.iOS.csproj b/Pixiview.iOS/Pixiview.iOS.csproj
index fc5ab43..61894a4 100644
--- a/Pixiview.iOS/Pixiview.iOS.csproj
+++ b/Pixiview.iOS/Pixiview.iOS.csproj
@@ -77,6 +77,7 @@
+
@@ -145,6 +146,7 @@
+
diff --git a/Pixiview.iOS/Renderers/AdaptedPageRenderer.cs b/Pixiview.iOS/Renderers/AdaptedPageRenderer.cs
index 546d3ce..38ace7b 100644
--- a/Pixiview.iOS/Renderers/AdaptedPageRenderer.cs
+++ b/Pixiview.iOS/Renderers/AdaptedPageRenderer.cs
@@ -1,6 +1,6 @@
-using System.Diagnostics.CodeAnalysis;
-using Foundation;
+using Foundation;
using Pixiview.iOS.Renderers;
+using Pixiview.iOS.Services;
using Pixiview.UI;
using Pixiview.Utils;
using UIKit;
@@ -46,11 +46,8 @@ namespace Pixiview.iOS.Renderers
var element = Element;
if (element != null)
{
- var style = ConvertStyle(Screen.GetStatusBarStyle(element));
- if (UIApplication.SharedApplication.StatusBarStyle != style)
- {
- SetStatusBarStyle(style);
- }
+ var style = EnvironmentService.ConvertStyle(Screen.GetStatusBarStyle(element));
+ EnvironmentService.SetStatusBarStyle(style);
}
observer = UIDevice.Notifications.ObserveOrientationDidChange(ChangeOrientation);
@@ -68,38 +65,6 @@ namespace Pixiview.iOS.Renderers
base.ViewWillDisappear(animated);
}
- private void SetStatusBarStyle(UIStatusBarStyle style)
- {
- if (style == UIStatusBarStyle.BlackOpaque)
- {
- UIApplication.SharedApplication.SetStatusBarHidden(true, true);
- }
- else
- {
- UIApplication.SharedApplication.SetStatusBarStyle(style, true);
- UIApplication.SharedApplication.SetStatusBarHidden(false, true);
- }
-
- SetNeedsStatusBarAppearanceUpdate();
- }
-
- [SuppressMessage("Code Notifications", "XI0002:Notifies you from using newer Apple APIs when targeting an older OS version", Justification = "")]
- private UIStatusBarStyle ConvertStyle(StatusBarStyles style)
- {
- switch (style)
- {
- case StatusBarStyles.DarkText:
- return UIStatusBarStyle.DarkContent;
- case StatusBarStyles.WhiteText:
- return UIStatusBarStyle.LightContent;
- case StatusBarStyles.Hidden:
- return UIStatusBarStyle.BlackOpaque;
- case StatusBarStyles.Default:
- default:
- return UIStatusBarStyle.Default;
- }
- }
-
void ChangeOrientation(object sender, NSNotificationEventArgs e)
{
var current = UIDevice.CurrentDevice.Orientation;
@@ -113,7 +78,7 @@ namespace Pixiview.iOS.Renderers
lastOrientation = current;
if (current == UIDeviceOrientation.Portrait && UIApplication.SharedApplication.StatusBarHidden)
{
- var style = ConvertStyle(Screen.GetStatusBarStyle(Element));
+ var style = EnvironmentService.ConvertStyle(Screen.GetStatusBarStyle(Element));
if (style != UIStatusBarStyle.BlackOpaque)
{
UIApplication.SharedApplication.SetStatusBarHidden(false, true);
diff --git a/Pixiview.iOS/Renderers/AppShellRenderer.cs b/Pixiview.iOS/Renderers/AppShellRenderer.cs
index bdad98a..ee384fc 100644
--- a/Pixiview.iOS/Renderers/AppShellRenderer.cs
+++ b/Pixiview.iOS/Renderers/AppShellRenderer.cs
@@ -1,5 +1,7 @@
-using System.Threading.Tasks;
+using System.Diagnostics.CodeAnalysis;
+using System.Threading.Tasks;
using Pixiview.iOS.Renderers;
+using Pixiview.iOS.Renderers.AppShellSection;
using Pixiview.Utils;
using UIKit;
using Xamarin.Forms;
@@ -14,7 +16,7 @@ namespace Pixiview.iOS.Renderers
protected override IShellSectionRenderer CreateShellSectionRenderer(ShellSection shellSection)
{
- var renderer = base.CreateShellSectionRenderer(shellSection);
+ var renderer = new AppShellSectionRenderer(this);
if (renderer is ShellSectionRenderer sr && Element is AppShell shell)
{
shell.SetNavigationBarHeight(
@@ -24,15 +26,36 @@ namespace Pixiview.iOS.Renderers
return renderer;
}
+ [SuppressMessage("Code Notifications", "XI0002:Notifies you from using newer Apple APIs when targeting an older OS version", Justification = "")]
+ protected override IShellItemRenderer CreateShellItemRenderer(ShellItem item)
+ {
+ var renderer = base.CreateShellItemRenderer(item);
+ if (UIDevice.CurrentDevice.CheckSystemVersion(13, 0))
+ {
+ if (renderer.ViewController is UITabBarController controller)
+ {
+ var tabBar = controller.TabBar;
+ tabBar.TintColor = UIColor.SecondaryLabelColor.ColorWithAlpha(1);
+ tabBar.UnselectedItemTintColor = UIColor.SecondaryLabelColor;
+ }
+ }
+ return renderer;
+ }
+
protected override IShellItemTransition CreateShellItemTransition()
{
return new AppShellItemTransition();
}
+
+ protected override IShellTabBarAppearanceTracker CreateTabBarAppearanceTracker()
+ {
+ return new AppShellTabBarAppearanceTracker();
+ }
}
public class AppShellItemTransition : IShellItemTransition
{
- [System.Diagnostics.CodeAnalysis.SuppressMessage("Code Notifications", "XI0001:Notifies you with advices on how to use Apple APIs", Justification = "")]
+ [SuppressMessage("Code Notifications", "XI0001:Notifies you with advices on how to use Apple APIs", Justification = "")]
public Task Transition(IShellItemRenderer oldRenderer, IShellItemRenderer newRenderer)
{
var task = new TaskCompletionSource();
@@ -47,4 +70,90 @@ namespace Pixiview.iOS.Renderers
return task.Task;
}
}
+
+ public class AppShellTabBarAppearanceTracker : IShellTabBarAppearanceTracker
+ {
+ UIColor _defaultBarTint;
+ UIColor _defaultTint;
+ UIColor _defaultUnselectedTint;
+
+ public void Dispose()
+ {
+ }
+
+ public void ResetAppearance(UITabBarController controller)
+ {
+ if (_defaultTint == null)
+ return;
+
+ var tabBar = controller.TabBar;
+ tabBar.BarTintColor = _defaultBarTint;
+ tabBar.TintColor = _defaultTint;
+ tabBar.UnselectedItemTintColor = _defaultUnselectedTint;
+ }
+
+ public void SetAppearance(UITabBarController controller, ShellAppearance appearance)
+ {
+ IShellAppearanceElement appearanceElement = appearance;
+ //var backgroundColor = appearanceElement.EffectiveTabBarBackgroundColor;
+ var unselectedColor = appearanceElement.EffectiveTabBarUnselectedColor;
+ var titleColor = appearanceElement.EffectiveTabBarTitleColor;
+
+ var tabBar = controller.TabBar;
+ //bool operatingSystemSupportsUnselectedTint = Forms.IsiOS10OrNewer;
+
+ if (_defaultTint == null)
+ {
+ _defaultBarTint = tabBar.BarTintColor;
+ _defaultTint = tabBar.TintColor;
+
+ //if (operatingSystemSupportsUnselectedTint)
+ {
+ _defaultUnselectedTint = tabBar.UnselectedItemTintColor;
+ }
+ }
+
+ //if (!backgroundColor.IsDefault)
+ // tabBar.BarTintColor = backgroundColor.ToUIColor();
+ if (!UIDevice.CurrentDevice.CheckSystemVersion(13, 0))
+ {
+ if (!titleColor.IsDefault)
+ tabBar.TintColor = titleColor.ToUIColor();
+
+ //if (operatingSystemSupportsUnselectedTint)
+ {
+ if (!unselectedColor.IsDefault)
+ tabBar.UnselectedItemTintColor = unselectedColor.ToUIColor();
+ }
+ }
+ }
+
+ public void UpdateLayout(UITabBarController controller)
+ {
+ }
+ }
+
+ public class AppShellSectionRenderer : ShellSectionRenderer
+ {
+ public AppShellSectionRenderer(IShellContext context) : base(context)
+ {
+ }
+
+ protected override IShellSectionRootRenderer CreateShellSectionRootRenderer(ShellSection shellSection, IShellContext shellContext)
+ {
+ return new AppShellSectionRootRenderer(shellSection, shellContext);
+ }
+ }
+
+ public class AppShellSectionRootRenderer : ShellSectionRootRenderer
+ {
+ public AppShellSectionRootRenderer(ShellSection shellSection, IShellContext shellContext) : base(shellSection, shellContext)
+ {
+ }
+
+ protected override IShellSectionRootHeader CreateShellSectionRootHeader(IShellContext shellContext)
+ {
+ return new AppShellSectionRootHeader(shellContext);
+ }
+ }
}
diff --git a/Pixiview.iOS/Renderers/AppShellSection/AppShellSectionRootHeader.cs b/Pixiview.iOS/Renderers/AppShellSection/AppShellSectionRootHeader.cs
new file mode 100644
index 0000000..bb1fb4a
--- /dev/null
+++ b/Pixiview.iOS/Renderers/AppShellSection/AppShellSectionRootHeader.cs
@@ -0,0 +1,326 @@
+using System;
+using System.Collections.Specialized;
+using System.ComponentModel;
+using System.Diagnostics.CodeAnalysis;
+using CoreGraphics;
+using Foundation;
+using UIKit;
+using Xamarin.Forms;
+using Xamarin.Forms.Platform.iOS;
+
+namespace Pixiview.iOS.Renderers.AppShellSection
+{
+ public class AppShellSectionRootHeader : UICollectionViewController, IAppearanceObserver, IShellSectionRootHeader
+ {
+ #region IAppearanceObserver
+
+ readonly Color _defaultBackgroundColor = new Color(0.964);
+ readonly Color _defaultForegroundColor = Color.Black;
+ readonly Color _defaultUnselectedColor = Color.Black.MultiplyAlpha(0.7);
+
+ void IAppearanceObserver.OnAppearanceChanged(ShellAppearance appearance)
+ {
+ if (appearance == null)
+ ResetAppearance();
+ else
+ SetAppearance(appearance);
+ }
+
+ protected virtual void ResetAppearance()
+ {
+ SetValues(_defaultBackgroundColor, _defaultForegroundColor, _defaultUnselectedColor);
+ }
+
+ protected virtual void SetAppearance(ShellAppearance appearance)
+ {
+ SetValues(appearance.BackgroundColor.IsDefault ? _defaultBackgroundColor : appearance.BackgroundColor,
+ appearance.ForegroundColor.IsDefault ? _defaultForegroundColor : appearance.ForegroundColor,
+ appearance.UnselectedColor.IsDefault ? _defaultUnselectedColor : appearance.UnselectedColor);
+ }
+
+ void SetValues(Color backgroundColor, Color foregroundColor, Color unselectedColor)
+ {
+ CollectionView.BackgroundColor = new Color(backgroundColor.R, backgroundColor.G, backgroundColor.B, .663).ToUIColor();
+ _bar.BackgroundColor = foregroundColor.ToUIColor();
+
+ bool reloadData = _selectedColor != foregroundColor || _unselectedColor != unselectedColor;
+
+ _selectedColor = foregroundColor;
+ _unselectedColor = unselectedColor;
+
+ if (reloadData)
+ CollectionView.ReloadData();
+ }
+
+ #endregion IAppearanceObserver
+
+ static readonly NSString CellId = new NSString("HeaderCell");
+
+ readonly IShellContext _shellContext;
+ UIView _bar;
+ UIView _bottomShadow;
+ Color _selectedColor;
+ Color _unselectedColor;
+ bool _isDisposed;
+
+ public AppShellSectionRootHeader(IShellContext shellContext) : base(new UICollectionViewFlowLayout())
+ {
+ _shellContext = shellContext;
+ }
+
+ public double SelectedIndex { get; set; }
+ public ShellSection ShellSection { get; set; }
+ IShellSectionController ShellSectionController => ShellSection;
+
+ public UIViewController ViewController => this;
+
+ public override bool CanMoveItem(UICollectionView collectionView, NSIndexPath indexPath)
+ {
+ return false;
+ }
+
+ public override UICollectionViewCell GetCell(UICollectionView collectionView, NSIndexPath indexPath)
+ {
+ var reusedCell = (UICollectionViewCell)collectionView.DequeueReusableCell(CellId, indexPath);
+
+ if (!(reusedCell is ShellSectionHeaderCell headerCell))
+ return reusedCell;
+
+ var selectedItems = collectionView.GetIndexPathsForSelectedItems();
+
+ var shellContent = ShellSectionController.GetItems()[indexPath.Row];
+ headerCell.Label.Text = shellContent.Title;
+ headerCell.Label.SetNeedsDisplay();
+
+ headerCell.SelectedColor = _selectedColor.ToUIColor();
+ headerCell.UnSelectedColor = _unselectedColor.ToUIColor();
+
+ if (selectedItems.Length > 0 && selectedItems[0].Row == indexPath.Row)
+ headerCell.Selected = true;
+ else
+ headerCell.Selected = false;
+
+ return headerCell;
+ }
+
+ public override nint GetItemsCount(UICollectionView collectionView, nint section)
+ {
+ return ShellSectionController.GetItems().Count;
+ }
+
+ public override void ItemDeselected(UICollectionView collectionView, NSIndexPath indexPath)
+ {
+ if (CollectionView.CellForItem(indexPath) is ShellSectionHeaderCell cell)
+ cell.Label.TextColor = _unselectedColor.ToUIColor();
+ }
+
+ public override void ItemSelected(UICollectionView collectionView, NSIndexPath indexPath)
+ {
+ var row = indexPath.Row;
+
+ var item = ShellSectionController.GetItems()[row];
+
+ if (item != ShellSection.CurrentItem)
+ ShellSection.SetValueFromRenderer(ShellSection.CurrentItemProperty, item);
+
+ if (CollectionView.CellForItem(indexPath) is ShellSectionHeaderCell cell)
+ cell.Label.TextColor = _selectedColor.ToUIColor();
+ }
+
+ public override nint NumberOfSections(UICollectionView collectionView)
+ {
+ return 1;
+ }
+
+ public override bool ShouldSelectItem(UICollectionView collectionView, NSIndexPath indexPath)
+ {
+ var row = indexPath.Row;
+ var item = ShellSectionController.GetItems()[row];
+ IShellController shellController = _shellContext.Shell;
+
+ if (item == ShellSection.CurrentItem)
+ return true;
+ return shellController.ProposeNavigation(ShellNavigationSource.ShellContentChanged, (ShellItem)ShellSection.Parent, ShellSection, item, ShellSection.Stack, true);
+ }
+
+ public override void ViewDidLayoutSubviews()
+ {
+ if (_isDisposed)
+ return;
+
+ base.ViewDidLayoutSubviews();
+
+ LayoutBar();
+
+ _bottomShadow.Frame = new CGRect(0, CollectionView.Frame.Bottom, CollectionView.Frame.Width, 0.5);
+ }
+
+ public override void ViewDidLoad()
+ {
+ if (_isDisposed)
+ return;
+
+ base.ViewDidLoad();
+
+ CollectionView.ScrollsToTop = false;
+ CollectionView.Bounces = false;
+ CollectionView.AlwaysBounceHorizontal = false;
+ CollectionView.ShowsHorizontalScrollIndicator = false;
+ CollectionView.ClipsToBounds = false;
+
+ _bar = new UIView(new CGRect(0, 0, 20, 20));
+ _bar.Layer.ZPosition = 9001; //its over 9000!
+ CollectionView.AddSubview(_bar);
+
+ _bottomShadow = new UIView(new CGRect(0, 0, 10, 1))
+ {
+ BackgroundColor = Color.Black.MultiplyAlpha(0.3).ToUIColor()
+ };
+ _bottomShadow.Layer.ZPosition = 9002;
+ CollectionView.AddSubview(_bottomShadow);
+
+ var flowLayout = Layout as UICollectionViewFlowLayout;
+ flowLayout.ScrollDirection = UICollectionViewScrollDirection.Horizontal;
+ flowLayout.MinimumInteritemSpacing = 0;
+ flowLayout.MinimumLineSpacing = 0;
+ flowLayout.EstimatedItemSize = new CGSize(70, 35);
+
+ CollectionView.RegisterClassForCell(GetCellType(), CellId);
+
+ ((IShellController)_shellContext.Shell).AddAppearanceObserver(this, ShellSection);
+ ShellSectionController.ItemsCollectionChanged += OnShellSectionItemsChanged;
+
+ UpdateSelectedIndex();
+ ShellSection.PropertyChanged += OnShellSectionPropertyChanged;
+ }
+
+ protected virtual Type GetCellType()
+ {
+ return typeof(ShellSectionHeaderCell);
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ if (_isDisposed)
+ return;
+
+ if (disposing)
+ {
+ ((IShellController)_shellContext.Shell).RemoveAppearanceObserver(this);
+ ShellSectionController.ItemsCollectionChanged -= OnShellSectionItemsChanged;
+ ShellSection.PropertyChanged -= OnShellSectionPropertyChanged;
+
+ ShellSection = null;
+ _bar.RemoveFromSuperview();
+ RemoveFromParentViewController();
+ _bar.Dispose();
+ _bar = null;
+ }
+
+ _isDisposed = true;
+ base.Dispose(disposing);
+ }
+
+ protected void LayoutBar()
+ {
+ if (SelectedIndex < 0)
+ return;
+
+ if (ShellSectionController.GetItems().IndexOf(ShellSection.CurrentItem) != SelectedIndex)
+ return;
+
+ var layout = CollectionView.GetLayoutAttributesForItem(NSIndexPath.FromItemSection((int)SelectedIndex, 0));
+
+ if (layout == null)
+ return;
+
+ var frame = layout.Frame;
+
+ if (_bar.Frame.Height != 2)
+ {
+ _bar.Frame = new CGRect(frame.X, frame.Bottom - 2, frame.Width, 2);
+ }
+ else
+ {
+ UIView.Animate(.25, () => _bar.Frame = new CGRect(frame.X, frame.Bottom - 2, frame.Width, 2));
+ }
+ }
+
+ protected virtual void OnShellSectionPropertyChanged(object sender, PropertyChangedEventArgs e)
+ {
+ if (e.PropertyName == ShellSection.CurrentItemProperty.PropertyName)
+ {
+ UpdateSelectedIndex();
+ }
+ }
+
+ protected virtual void UpdateSelectedIndex(bool animated = false)
+ {
+ if (ShellSection.CurrentItem == null)
+ return;
+
+ SelectedIndex = ShellSectionController.GetItems().IndexOf(ShellSection.CurrentItem);
+
+ if (SelectedIndex < 0)
+ return;
+
+ LayoutBar();
+
+ CollectionView.SelectItem(NSIndexPath.FromItemSection((int)SelectedIndex, 0), false, UICollectionViewScrollPosition.CenteredHorizontally);
+ }
+
+ void OnShellSectionItemsChanged(object sender, NotifyCollectionChangedEventArgs e)
+ {
+ if (_isDisposed)
+ return;
+
+ CollectionView.ReloadData();
+ }
+
+ public class ShellSectionHeaderCell : UICollectionViewCell
+ {
+ public UIColor SelectedColor { get; set; }
+ public UIColor UnSelectedColor { get; set; }
+
+ public ShellSectionHeaderCell()
+ {
+
+ }
+
+ [Export("initWithFrame:")]
+ public ShellSectionHeaderCell(CGRect frame) : base(frame)
+ {
+ Label = new UILabel
+ {
+ TextAlignment = UITextAlignment.Center,
+ Font = UIFont.BoldSystemFontOfSize(14)
+ };
+ ContentView.AddSubview(Label);
+ }
+
+ public override bool Selected
+ {
+ get => base.Selected;
+ set
+ {
+ base.Selected = value;
+ Label.TextColor = value ? SelectedColor : UnSelectedColor;
+ }
+ }
+
+ public UILabel Label { get; }
+
+ public override void LayoutSubviews()
+ {
+ base.LayoutSubviews();
+
+ Label.Frame = Bounds;
+ }
+
+ public override CGSize SizeThatFits(CGSize size)
+ {
+ return new CGSize(Label.SizeThatFits(size).Width + 30, 35);
+ }
+ }
+ }
+}
diff --git a/Pixiview.iOS/Services/EnvironmentService.cs b/Pixiview.iOS/Services/EnvironmentService.cs
index c060999..9588281 100644
--- a/Pixiview.iOS/Services/EnvironmentService.cs
+++ b/Pixiview.iOS/Services/EnvironmentService.cs
@@ -54,6 +54,11 @@ namespace Pixiview.iOS.Services
}
}
+ public void SetStatusBarStyle(StatusBarStyles style)
+ {
+ SetStatusBarStyle(ConvertStyle(style));
+ }
+
public void SetStatusBarColor(Color color)
{
// nothing need to do
@@ -61,6 +66,40 @@ namespace Pixiview.iOS.Services
#endregion
+ public static void SetStatusBarStyle(UIStatusBarStyle style)
+ {
+ if (UIApplication.SharedApplication.StatusBarStyle == style)
+ {
+ return;
+ }
+ if (style == UIStatusBarStyle.BlackOpaque)
+ {
+ UIApplication.SharedApplication.SetStatusBarHidden(true, true);
+ }
+ else
+ {
+ UIApplication.SharedApplication.SetStatusBarStyle(style, true);
+ UIApplication.SharedApplication.SetStatusBarHidden(false, true);
+ }
+ }
+
+ [SuppressMessage("Code Notifications", "XI0002:Notifies you from using newer Apple APIs when targeting an older OS version", Justification = "")]
+ public static UIStatusBarStyle ConvertStyle(StatusBarStyles style)
+ {
+ switch (style)
+ {
+ case StatusBarStyles.DarkText:
+ return UIStatusBarStyle.DarkContent;
+ case StatusBarStyles.WhiteText:
+ return UIStatusBarStyle.LightContent;
+ case StatusBarStyles.Hidden:
+ return UIStatusBarStyle.BlackOpaque;
+ case StatusBarStyles.Default:
+ default:
+ return UIStatusBarStyle.Default;
+ }
+ }
+
#region - Culture Info -
public CultureInfo GetCurrentCultureInfo()
diff --git a/Pixiview/App.cs b/Pixiview/App.cs
index 664c928..f924c2f 100644
--- a/Pixiview/App.cs
+++ b/Pixiview/App.cs
@@ -60,6 +60,8 @@ namespace Pixiview
themeInstance = LightTheme.Instance;
}
//DependencyService.Get().SetStatusBarColor
+ var style = (StatusBarStyles)themeInstance[ThemeBase.StatusBarStyle];
+ DependencyService.Get().SetStatusBarStyle(style);
Resources = themeInstance;
}
diff --git a/Pixiview/AppShell.xaml b/Pixiview/AppShell.xaml
index c23be6e..63cbb30 100644
--- a/Pixiview/AppShell.xaml
+++ b/Pixiview/AppShell.xaml
@@ -7,8 +7,10 @@
xmlns:u="clr-namespace:Pixiview.UI"
xmlns:util="clr-namespace:Pixiview.Utils"
x:Class="Pixiview.AppShell"
+ BackgroundColor="{DynamicResource NavColor}"
ForegroundColor="{DynamicResource MainTextColor}"
- TitleColor="{DynamicResource MainTextColor}">
+ TitleColor="{DynamicResource MainTextColor}"
+ UnselectedColor="{DynamicResource SubTextColor}">
@@ -27,23 +29,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
diff --git a/Pixiview/Illust/MainPage.xaml b/Pixiview/Illust/MainPage.xaml
index 0b4f0ff..5b28a13 100644
--- a/Pixiview/Illust/MainPage.xaml
+++ b/Pixiview/Illust/MainPage.xaml
@@ -7,7 +7,6 @@
xmlns:r="clr-namespace:Pixiview.Resources"
x:Class="Pixiview.Illust.MainPage"
util:Screen.StatusBarStyle="{DynamicResource StatusBarStyle}"
- Shell.NavBarHasShadow="True"
BackgroundColor="{DynamicResource WindowColor}"
Title="{r:Text Follow}">
diff --git a/Pixiview/Illust/RankingPage.xaml b/Pixiview/Illust/RankingPage.xaml
index bfe56cc..5f0766a 100644
--- a/Pixiview/Illust/RankingPage.xaml
+++ b/Pixiview/Illust/RankingPage.xaml
@@ -6,7 +6,6 @@
xmlns:util="clr-namespace:Pixiview.Utils"
x:Class="Pixiview.Illust.RankingPage"
util:Screen.StatusBarStyle="{DynamicResource StatusBarStyle}"
- Shell.NavBarHasShadow="True"
BackgroundColor="{DynamicResource WindowColor}">
diff --git a/Pixiview/Illust/NewsPage.xaml b/Pixiview/Illust/RecommendsPage.xaml
similarity index 89%
rename from Pixiview/Illust/NewsPage.xaml
rename to Pixiview/Illust/RecommendsPage.xaml
index 55e38e3..13793c1 100644
--- a/Pixiview/Illust/NewsPage.xaml
+++ b/Pixiview/Illust/RecommendsPage.xaml
@@ -5,11 +5,10 @@
xmlns:u="clr-namespace:Pixiview.UI"
xmlns:util="clr-namespace:Pixiview.Utils"
xmlns:r="clr-namespace:Pixiview.Resources"
- x:Class="Pixiview.Illust.NewsPage"
+ x:Class="Pixiview.Illust.RecommendsPage"
util:Screen.StatusBarStyle="{DynamicResource StatusBarStyle}"
- Shell.NavBarHasShadow="True"
BackgroundColor="{DynamicResource WindowColor}"
- Title="{r:Text News}">
+ Title="{r:Text Recommends}">
DoGetIllustList(IllustData data)
{
- return data.body.page.newPost;
+ if (ByUser)
+ {
+ return data.body.page.recommendUser.SelectMany(i => i.illustIds);
+ }
+ else
+ {
+ return data.body.page.recommend;
+ }
}
protected override IllustData DoLoadIllustData(bool force)
diff --git a/Pixiview/Illust/ViewIllustPage.xaml b/Pixiview/Illust/ViewIllustPage.xaml
index fc48957..0bcae70 100644
--- a/Pixiview/Illust/ViewIllustPage.xaml
+++ b/Pixiview/Illust/ViewIllustPage.xaml
@@ -9,7 +9,6 @@
util:Screen.StatusBarStyle="{DynamicResource StatusBarStyle}"
ios:Page.UseSafeArea="False"
Shell.TabBarIsVisible="False"
- Shell.NavBarHasShadow="True"
BackgroundColor="{DynamicResource WindowColor}"
Title="{Binding IllustItem.Title}">
diff --git a/Pixiview/OptionPage.xaml b/Pixiview/OptionPage.xaml
index d0a7216..03bdddf 100644
--- a/Pixiview/OptionPage.xaml
+++ b/Pixiview/OptionPage.xaml
@@ -5,7 +5,6 @@
xmlns:util="clr-namespace:Pixiview.Utils"
x:Class="Pixiview.OptionPage"
util:Screen.StatusBarStyle="{DynamicResource StatusBarStyle}"
- Shell.NavBarHasShadow="True"
BackgroundColor="{DynamicResource WindowColor}">
diff --git a/Pixiview/Resources/Languages/zh-CN.xml b/Pixiview/Resources/Languages/zh-CN.xml
index 4b25c46..359d63e 100644
--- a/Pixiview/Resources/Languages/zh-CN.xml
+++ b/Pixiview/Resources/Languages/zh-CN.xml
@@ -4,8 +4,10 @@
OK
R-18
已关注
- 最新
+ 推荐
+ 按用户
排行榜
+
预览
成功保存图片到照片库。
\ No newline at end of file
diff --git a/Pixiview/UI/AdaptedPage.cs b/Pixiview/UI/AdaptedPage.cs
index b52bd34..f3f5411 100644
--- a/Pixiview/UI/AdaptedPage.cs
+++ b/Pixiview/UI/AdaptedPage.cs
@@ -11,6 +11,11 @@ namespace Pixiview.UI
public event EventHandler Unload;
public event EventHandler OrientationChanged;
+ public AdaptedPage()
+ {
+ Shell.SetNavBarHasShadow(this, true);
+ }
+
public virtual void OnLoad()
{
Load?.Invoke(this, EventArgs.Empty);
diff --git a/Pixiview/UI/Theme/DarkTheme.cs b/Pixiview/UI/Theme/DarkTheme.cs
index d33aacb..987718e 100644
--- a/Pixiview/UI/Theme/DarkTheme.cs
+++ b/Pixiview/UI/Theme/DarkTheme.cs
@@ -36,7 +36,7 @@ namespace Pixiview.UI.Theme
Add(SubColor, Color.FromRgb(0x33, 0x33, 0x33));
Add(MaskColor, Color.FromRgba(0xff, 0xff, 0xff, 0x50));
Add(NavColor, Color.Black);
- Add(SubNavColor, Color.FromRgb(0x22, 0x22, 0x22));
+ Add(NavSelectedColor, Color.FromRgb(0x22, 0x22, 0x22));
}
}
}
diff --git a/Pixiview/UI/Theme/LightTheme.cs b/Pixiview/UI/Theme/LightTheme.cs
index 447e334..7cde795 100644
--- a/Pixiview/UI/Theme/LightTheme.cs
+++ b/Pixiview/UI/Theme/LightTheme.cs
@@ -36,7 +36,7 @@ namespace Pixiview.UI.Theme
Add(SubColor, Color.FromRgb(0xf0, 0xf0, 0xf0)); // Color.FromRgb(0xfa, 0xfa, 0xf0)
Add(MaskColor, Color.FromRgba(0, 0, 0, 0x50));
Add(NavColor, Color.FromRgb(0xee, 0xee, 0xee));
- Add(SubNavColor, Color.White);
+ Add(NavSelectedColor, Color.LightGray);
}
}
}
diff --git a/Pixiview/UI/Theme/ThemeBase.cs b/Pixiview/UI/Theme/ThemeBase.cs
index df44823..6ad95ec 100644
--- a/Pixiview/UI/Theme/ThemeBase.cs
+++ b/Pixiview/UI/Theme/ThemeBase.cs
@@ -22,7 +22,7 @@ namespace Pixiview.UI.Theme
public const string SubColor = nameof(SubColor);
public const string MaskColor = nameof(MaskColor);
public const string NavColor = nameof(NavColor);
- public const string SubNavColor = nameof(SubNavColor);
+ public const string NavSelectedColor = nameof(NavSelectedColor);
public const string IconLightFontFamily = nameof(IconLightFontFamily);
public const string IconRegularFontFamily = nameof(IconRegularFontFamily);
@@ -55,7 +55,8 @@ namespace Pixiview.UI.Theme
}
}
- var mainColor = this[MainTextColor];
+ var mainColor = (Color)this[MainTextColor];
+ var solidFontFamily = (string)this[IconSolidFontFamily];
Add(TitleLabel, new Style(typeof(Label))
{
@@ -75,28 +76,29 @@ namespace Pixiview.UI.Theme
{
new Setter { Property = Button.BorderWidthProperty, Value = 0.0 },
new Setter { Property = VisualElement.BackgroundColorProperty, Value = Color.Transparent },
- new Setter { Property = Button.FontFamilyProperty, Value = (string)this[IconSolidFontFamily] },
+ new Setter { Property = Button.FontFamilyProperty, Value = solidFontFamily },
new Setter { Property = Button.FontSizeProperty, Value = StyleDefinition.FontSizeTitleIcon },
new Setter { Property = Button.TextColorProperty, Value = mainColor }
}
});
- Add(FontIconUser, GetSolidIcon(StyleDefinition.IconUser));
- Add(FontIconSparkles, GetSolidIcon(StyleDefinition.IconSparkles));
- Add(FontIconOrder, GetSolidIcon(StyleDefinition.IconOrder));
- Add(FontIconRefresh, GetSolidIcon(StyleDefinition.IconRefresh));
- Add(FontIconOption, GetSolidIcon(StyleDefinition.IconOption));
- Add(FontIconDownload, GetSolidIcon(StyleDefinition.IconDownload));
+ Add(FontIconUser, GetSolidIcon(StyleDefinition.IconUser, solidFontFamily, mainColor));
+ Add(FontIconSparkles, GetSolidIcon(StyleDefinition.IconSparkles, solidFontFamily, mainColor));
+ Add(FontIconOrder, GetSolidIcon(StyleDefinition.IconOrder, solidFontFamily, mainColor));
+ Add(FontIconRefresh, GetSolidIcon(StyleDefinition.IconRefresh, solidFontFamily, mainColor));
+ Add(FontIconOption, GetSolidIcon(StyleDefinition.IconOption, solidFontFamily, mainColor));
+ Add(FontIconDownload, GetSolidIcon(StyleDefinition.IconDownload, solidFontFamily, mainColor));
}
- private FontImageSource GetSolidIcon(string icon)
+ private FontImageSource GetSolidIcon(string icon, string family, Color color)
{
return new FontImageSource
{
- FontFamily = (string)this[IconSolidFontFamily],
+ FontFamily = family,
Glyph = icon,
- Size = StyleDefinition.FontSizeTitle
+ Size = StyleDefinition.FontSizeTitle,
+ Color = color
};
}
}
diff --git a/Pixiview/Utils/Converters.cs b/Pixiview/Utils/Converters.cs
index 1dbaeda..b8fe024 100644
--- a/Pixiview/Utils/Converters.cs
+++ b/Pixiview/Utils/Converters.cs
@@ -1,6 +1,7 @@
using System;
using System.Globalization;
using Pixiview.UI;
+using Pixiview.UI.Theme;
using Xamarin.Forms;
namespace Pixiview.Utils
diff --git a/Pixiview/Utils/IEnvironmentService.cs b/Pixiview/Utils/IEnvironmentService.cs
index 53f5645..015681b 100644
--- a/Pixiview/Utils/IEnvironmentService.cs
+++ b/Pixiview/Utils/IEnvironmentService.cs
@@ -8,6 +8,7 @@ namespace Pixiview.Utils
EnvironmentParameter GetEnvironment();
Theme GetApplicationTheme();
+ void SetStatusBarStyle(StatusBarStyles style);
void SetStatusBarColor(Color color);
CultureInfo GetCurrentCultureInfo();
diff --git a/Pixiview/Utils/Stores.cs b/Pixiview/Utils/Stores.cs
index 0a3c8b6..97e1d0b 100644
--- a/Pixiview/Utils/Stores.cs
+++ b/Pixiview/Utils/Stores.cs
@@ -303,7 +303,8 @@ namespace Pixiview.Utils
public const string Illust = "illust";
public const string Detail = "detail";
public const string Follow = "follow";
- public const string News = "news";
+ public const string Recommends = "recommends";
+ public const string ByUser = "byuser";
public const string Ranking = "ranking";
public const string Option = "option";
}