diff --git a/Pixiview.Android/Pixiview.Android.csproj b/Pixiview.Android/Pixiview.Android.csproj index 3799741..ca491e5 100644 --- a/Pixiview.Android/Pixiview.Android.csproj +++ b/Pixiview.Android/Pixiview.Android.csproj @@ -213,6 +213,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pixiview.Android/Renderers/AppShellRenderer.cs b/Pixiview.Android/Renderers/AppShellRenderer.cs index 55d5bf9..1e359f4 100644 --- a/Pixiview.Android/Renderers/AppShellRenderer.cs +++ b/Pixiview.Android/Renderers/AppShellRenderer.cs @@ -1,5 +1,4 @@ -#if TODO -using Android.Content; +using Android.Content; using Pixiview.Droid.Renderers; using Pixiview.Droid.Renderers.AppShellSection; using Xamarin.Forms; @@ -20,4 +19,3 @@ namespace Pixiview.Droid.Renderers } } } -#endif diff --git a/Pixiview.Android/Renderers/AppShellSection/AppShellBottomNavViewAppearanceTracker.cs b/Pixiview.Android/Renderers/AppShellSection/AppShellBottomNavViewAppearanceTracker.cs index 1b4be95..d84d4d3 100644 --- a/Pixiview.Android/Renderers/AppShellSection/AppShellBottomNavViewAppearanceTracker.cs +++ b/Pixiview.Android/Renderers/AppShellSection/AppShellBottomNavViewAppearanceTracker.cs @@ -64,6 +64,27 @@ namespace Pixiview.Droid.Renderers.AppShellSection bottomView.ItemTextColor = _colorStateList; bottomView.ItemIconTintList = _colorStateList; + var menu = bottomView.Menu; + if (menu != null && menu.HasVisibleItems) + { + var itemUser = menu.GetItem(0); + itemUser.SetIcon(itemUser.IsChecked ? + Resource.Drawable.ic_user : + Resource.Drawable.ic_user_regular); + var itemRecommend = menu.GetItem(1); + itemRecommend.SetIcon(itemRecommend.IsChecked ? + Resource.Drawable.ic_sparkles : + Resource.Drawable.ic_sparkles_regular); + var itemRank = menu.GetItem(2); + itemRank.SetIcon(itemRank.IsChecked ? + Resource.Drawable.ic_rank : + Resource.Drawable.ic_rank_regular); + var itemFavorite = menu.GetItem(3); + itemFavorite.SetIcon(itemFavorite.IsChecked ? + Resource.Drawable.ic_bookmark : + Resource.Drawable.ic_bookmark_regular); + } + SetBackgroundColor(bottomView, backgroundColor); } diff --git a/Pixiview.Android/Resources/Resource.designer.cs b/Pixiview.Android/Resources/Resource.designer.cs index f0122b8..9eefa4e 100644 --- a/Pixiview.Android/Resources/Resource.designer.cs +++ b/Pixiview.Android/Resources/Resource.designer.cs @@ -8317,85 +8317,112 @@ namespace Pixiview.Droid public const int download = 2131165282; // aapt resource value: 0x7F070063 - public const int ic_mtrl_chip_checked_black = 2131165283; + public const int ic_bookmark = 2131165283; // aapt resource value: 0x7F070064 - public const int ic_mtrl_chip_checked_circle = 2131165284; + public const int ic_bookmark_regular = 2131165284; // aapt resource value: 0x7F070065 - public const int ic_mtrl_chip_close_circle = 2131165285; + public const int ic_mtrl_chip_checked_black = 2131165285; // aapt resource value: 0x7F070066 - public const int ic_search = 2131165286; + public const int ic_mtrl_chip_checked_circle = 2131165286; // aapt resource value: 0x7F070067 - public const int mtrl_snackbar_background = 2131165287; + public const int ic_mtrl_chip_close_circle = 2131165287; // aapt resource value: 0x7F070068 - public const int mtrl_tabs_default_indicator = 2131165288; + public const int ic_option = 2131165288; // aapt resource value: 0x7F070069 - public const int navigation_empty_icon = 2131165289; - - // aapt resource value: 0x7F07006B - public const int notification_action_background = 2131165291; - - // aapt resource value: 0x7F07006C - public const int notification_bg = 2131165292; - - // aapt resource value: 0x7F07006D - public const int notification_bg_low = 2131165293; - - // aapt resource value: 0x7F07006E - public const int notification_bg_low_normal = 2131165294; - - // aapt resource value: 0x7F07006F - public const int notification_bg_low_pressed = 2131165295; - - // aapt resource value: 0x7F070070 - public const int notification_bg_normal = 2131165296; - - // aapt resource value: 0x7F070071 - public const int notification_bg_normal_pressed = 2131165297; - - // aapt resource value: 0x7F070072 - public const int notification_icon_background = 2131165298; - - // aapt resource value: 0x7F070073 - public const int notification_template_icon_bg = 2131165299; - - // aapt resource value: 0x7F070074 - public const int notification_template_icon_low_bg = 2131165300; - - // aapt resource value: 0x7F070075 - public const int notification_tile_bg = 2131165301; - - // aapt resource value: 0x7F070076 - public const int notify_panel_notification_icon_bg = 2131165302; + public const int ic_rank = 2131165289; // aapt resource value: 0x7F07006A - public const int no_profile = 2131165290; + public const int ic_rank_regular = 2131165290; + + // aapt resource value: 0x7F07006B + public const int ic_search = 2131165291; + + // aapt resource value: 0x7F07006C + public const int ic_sparkles = 2131165292; + + // aapt resource value: 0x7F07006D + public const int ic_sparkles_regular = 2131165293; + + // aapt resource value: 0x7F07006E + public const int ic_user = 2131165294; + + // aapt resource value: 0x7F07006F + public const int ic_user_regular = 2131165295; + + // aapt resource value: 0x7F070070 + public const int mtrl_snackbar_background = 2131165296; + + // aapt resource value: 0x7F070071 + public const int mtrl_tabs_default_indicator = 2131165297; + + // aapt resource value: 0x7F070072 + public const int navigation_empty_icon = 2131165298; + + // aapt resource value: 0x7F070074 + public const int notification_action_background = 2131165300; + + // aapt resource value: 0x7F070075 + public const int notification_bg = 2131165301; + + // aapt resource value: 0x7F070076 + public const int notification_bg_low = 2131165302; // aapt resource value: 0x7F070077 - public const int segmented_control_background = 2131165303; + public const int notification_bg_low_normal = 2131165303; // aapt resource value: 0x7F070078 - public const int segmented_control_first_background = 2131165304; + public const int notification_bg_low_pressed = 2131165304; // aapt resource value: 0x7F070079 - public const int segmented_control_last_background = 2131165305; + public const int notification_bg_normal = 2131165305; // aapt resource value: 0x7F07007A - public const int splash_logo = 2131165306; + public const int notification_bg_normal_pressed = 2131165306; // aapt resource value: 0x7F07007B - public const int splash_screen = 2131165307; + public const int notification_icon_background = 2131165307; // aapt resource value: 0x7F07007C - public const int tooltip_frame_dark = 2131165308; + public const int notification_template_icon_bg = 2131165308; // aapt resource value: 0x7F07007D - public const int tooltip_frame_light = 2131165309; + public const int notification_template_icon_low_bg = 2131165309; + + // aapt resource value: 0x7F07007E + public const int notification_tile_bg = 2131165310; + + // aapt resource value: 0x7F07007F + public const int notify_panel_notification_icon_bg = 2131165311; + + // aapt resource value: 0x7F070073 + public const int no_profile = 2131165299; + + // aapt resource value: 0x7F070080 + public const int segmented_control_background = 2131165312; + + // aapt resource value: 0x7F070081 + public const int segmented_control_first_background = 2131165313; + + // aapt resource value: 0x7F070082 + public const int segmented_control_last_background = 2131165314; + + // aapt resource value: 0x7F070083 + public const int splash_logo = 2131165315; + + // aapt resource value: 0x7F070084 + public const int splash_screen = 2131165316; + + // aapt resource value: 0x7F070085 + public const int tooltip_frame_dark = 2131165317; + + // aapt resource value: 0x7F070086 + public const int tooltip_frame_light = 2131165318; static Drawable() { diff --git a/Pixiview.Android/Resources/drawable-night/ic_bookmark.xml b/Pixiview.Android/Resources/drawable-night/ic_bookmark.xml new file mode 100644 index 0000000..a811ce5 --- /dev/null +++ b/Pixiview.Android/Resources/drawable-night/ic_bookmark.xml @@ -0,0 +1,5 @@ + + + diff --git a/Pixiview.Android/Resources/drawable-night/ic_option.xml b/Pixiview.Android/Resources/drawable-night/ic_option.xml new file mode 100644 index 0000000..803523a --- /dev/null +++ b/Pixiview.Android/Resources/drawable-night/ic_option.xml @@ -0,0 +1,5 @@ + + + diff --git a/Pixiview.Android/Resources/drawable-night/ic_rank.xml b/Pixiview.Android/Resources/drawable-night/ic_rank.xml new file mode 100644 index 0000000..9afb20a --- /dev/null +++ b/Pixiview.Android/Resources/drawable-night/ic_rank.xml @@ -0,0 +1,5 @@ + + + diff --git a/Pixiview.Android/Resources/drawable-night/ic_sparkles.xml b/Pixiview.Android/Resources/drawable-night/ic_sparkles.xml new file mode 100644 index 0000000..a1971d1 --- /dev/null +++ b/Pixiview.Android/Resources/drawable-night/ic_sparkles.xml @@ -0,0 +1,5 @@ + + + diff --git a/Pixiview.Android/Resources/drawable-night/ic_user.xml b/Pixiview.Android/Resources/drawable-night/ic_user.xml new file mode 100644 index 0000000..2781545 --- /dev/null +++ b/Pixiview.Android/Resources/drawable-night/ic_user.xml @@ -0,0 +1,5 @@ + + + diff --git a/Pixiview.Android/Resources/drawable/ic_bookmark.xml b/Pixiview.Android/Resources/drawable/ic_bookmark.xml new file mode 100644 index 0000000..72432fa --- /dev/null +++ b/Pixiview.Android/Resources/drawable/ic_bookmark.xml @@ -0,0 +1,5 @@ + + + diff --git a/Pixiview.Android/Resources/drawable/ic_bookmark_regular.xml b/Pixiview.Android/Resources/drawable/ic_bookmark_regular.xml new file mode 100644 index 0000000..c0109e0 --- /dev/null +++ b/Pixiview.Android/Resources/drawable/ic_bookmark_regular.xml @@ -0,0 +1,5 @@ + + + diff --git a/Pixiview.Android/Resources/drawable/ic_option.xml b/Pixiview.Android/Resources/drawable/ic_option.xml new file mode 100644 index 0000000..ecce393 --- /dev/null +++ b/Pixiview.Android/Resources/drawable/ic_option.xml @@ -0,0 +1,5 @@ + + + diff --git a/Pixiview.Android/Resources/drawable/ic_rank.xml b/Pixiview.Android/Resources/drawable/ic_rank.xml new file mode 100644 index 0000000..ba363fd --- /dev/null +++ b/Pixiview.Android/Resources/drawable/ic_rank.xml @@ -0,0 +1,5 @@ + + + diff --git a/Pixiview.Android/Resources/drawable/ic_rank_regular.xml b/Pixiview.Android/Resources/drawable/ic_rank_regular.xml new file mode 100644 index 0000000..b442d3a --- /dev/null +++ b/Pixiview.Android/Resources/drawable/ic_rank_regular.xml @@ -0,0 +1,5 @@ + + + diff --git a/Pixiview.Android/Resources/drawable/ic_sparkles.xml b/Pixiview.Android/Resources/drawable/ic_sparkles.xml new file mode 100644 index 0000000..04a10ba --- /dev/null +++ b/Pixiview.Android/Resources/drawable/ic_sparkles.xml @@ -0,0 +1,5 @@ + + + diff --git a/Pixiview.Android/Resources/drawable/ic_sparkles_regular.xml b/Pixiview.Android/Resources/drawable/ic_sparkles_regular.xml new file mode 100644 index 0000000..d6f2aaf --- /dev/null +++ b/Pixiview.Android/Resources/drawable/ic_sparkles_regular.xml @@ -0,0 +1,5 @@ + + + diff --git a/Pixiview.Android/Resources/drawable/ic_user.xml b/Pixiview.Android/Resources/drawable/ic_user.xml new file mode 100644 index 0000000..0ae39b2 --- /dev/null +++ b/Pixiview.Android/Resources/drawable/ic_user.xml @@ -0,0 +1,5 @@ + + + diff --git a/Pixiview.Android/Resources/drawable/ic_user_regular.xml b/Pixiview.Android/Resources/drawable/ic_user_regular.xml new file mode 100644 index 0000000..ea5ef1a --- /dev/null +++ b/Pixiview.Android/Resources/drawable/ic_user_regular.xml @@ -0,0 +1,5 @@ + + + diff --git a/Pixiview.iOS/Renderers/AppShellRenderer.cs b/Pixiview.iOS/Renderers/AppShellRenderer.cs index aca7a8b..1dad1f8 100644 --- a/Pixiview.iOS/Renderers/AppShellRenderer.cs +++ b/Pixiview.iOS/Renderers/AppShellRenderer.cs @@ -32,7 +32,7 @@ namespace Pixiview.iOS.Renderers protected override IShellTabBarAppearanceTracker CreateTabBarAppearanceTracker() { - return new AppShellTabBarAppearanceTracker(); + return new AppShellTabBarAppearanceTracker((AppShell)Element); } protected override IShellNavBarAppearanceTracker CreateNavBarAppearanceTracker() diff --git a/Pixiview.iOS/Renderers/AppShellSection/AppAppearanceTracker.cs b/Pixiview.iOS/Renderers/AppShellSection/AppAppearanceTracker.cs index cd77132..4a6fdd6 100644 --- a/Pixiview.iOS/Renderers/AppShellSection/AppAppearanceTracker.cs +++ b/Pixiview.iOS/Renderers/AppShellSection/AppAppearanceTracker.cs @@ -1,4 +1,5 @@ -using CoreGraphics; +using System.Linq; +using CoreGraphics; using UIKit; using Xamarin.Forms; using Xamarin.Forms.Platform.iOS; @@ -99,6 +100,14 @@ namespace Pixiview.iOS.Renderers.AppShellSection UIColor _defaultTint; UIColor _defaultUnselectedTint; + private readonly AppShell appShell; + private bool initIcons; + + public AppShellTabBarAppearanceTracker(AppShell shell) + { + appShell = shell; + } + public void ResetAppearance(UITabBarController controller) { if (_defaultTint == null) @@ -118,6 +127,34 @@ namespace Pixiview.iOS.Renderers.AppShellSection var tintColor = appearanceElement.EffectiveTabBarForegroundColor; // appearanceElement.EffectiveTabBarTitleColor; var tabBar = controller.TabBar; + if (tabBar.Items != null && !initIcons) + { + initIcons = true; + var sources = appShell.CurrentItem.Items.Select(i => (FontImageSource)i.Icon).ToArray(); + var images = new UIImage[sources.Length]; + var handler = new FontImageSourceHandler(); + for (var i = 0; i < images.Length; i++) + { + var font = sources[i]; + if (font != null) + { + images[i] = handler.LoadImageAsync(new FontImageSource + { + FontFamily = "FontAwesome5Pro-Solid", + Glyph = font.Glyph, + Size = font.Size + }).Result; + } + } + for (var i = 0; i < tabBar.Items.Length; i++) + { + var image = images[i]; + if (image != null) + { + tabBar.Items[i].SelectedImage = image; + } + } + } if (_defaultTint == null) { diff --git a/Pixiview/AppShell.xaml b/Pixiview/AppShell.xaml index 0a502e5..9c6cce6 100644 --- a/Pixiview/AppShell.xaml +++ b/Pixiview/AppShell.xaml @@ -74,27 +74,31 @@ - diff --git a/Pixiview/Illust/FavoritesPage.xaml.cs b/Pixiview/Illust/FavoritesPage.xaml.cs index 0aba5d6..05deede 100644 --- a/Pixiview/Illust/FavoritesPage.xaml.cs +++ b/Pixiview/Illust/FavoritesPage.xaml.cs @@ -342,7 +342,7 @@ namespace Pixiview.Illust { item.ProfileUrl = user.image; } - var url = item.ImageUrl; + var url = Configs.GetThumbnailUrl(item.ImageUrl); if (url != null) { var image = Stores.LoadPreviewImage(url, false); @@ -382,7 +382,7 @@ namespace Pixiview.Illust task = ParallelTask.Start("favorite.loadimages", 0, list.Length, Configs.MaxPageThreads, i => { var item = list[i]; - if (item.ImageUrl == null) + if (item.ImageUrl == null || item.ProfileUrl == null) { var data = Stores.LoadIllustPreloadData(item.Id, true, force: true); if (data != null && data.illust.TryGetValue(item.Id, out var illust)) @@ -401,8 +401,9 @@ namespace Pixiview.Illust } if (item.Image == null && item.ImageUrl != null) { + var url = Configs.GetThumbnailUrl(item.ImageUrl); item.Image = StyleDefinition.DownloadBackground; - var image = Stores.LoadThumbnailImage(item.ImageUrl, true, force: true); + var image = Stores.LoadThumbnailImage(url, true, force: true); if (image != null) { item.Image = image; diff --git a/Pixiview/Illust/MainPage.xaml.cs b/Pixiview/Illust/MainPage.xaml.cs index dddf4b8..062ae10 100644 --- a/Pixiview/Illust/MainPage.xaml.cs +++ b/Pixiview/Illust/MainPage.xaml.cs @@ -80,9 +80,7 @@ namespace Pixiview.Illust } await ScrollToTopAsync(scrollView); - - lastUpdated = default; - StartLoad(false); + StartLoad(true); } private void SearchBar_SearchButtonPressed(object sender, EventArgs e) diff --git a/Pixiview/UI/Theme/ThemeBase.cs b/Pixiview/UI/Theme/ThemeBase.cs index 716553d..7abbd0d 100644 --- a/Pixiview/UI/Theme/ThemeBase.cs +++ b/Pixiview/UI/Theme/ThemeBase.cs @@ -7,12 +7,16 @@ namespace Pixiview.UI.Theme public const string FontIconUser = nameof(FontIconUser); public const string FontIconSparkles = nameof(FontIconSparkles); public const string FontIconOrder = nameof(FontIconOrder); + public const string FontIconFavorite = nameof(FontIconFavorite); + public const string FontIconUserFlyout = nameof(FontIconUserFlyout); + public const string FontIconSparklesFlyout = nameof(FontIconSparklesFlyout); + public const string FontIconOrderFlyout = nameof(FontIconOrderFlyout); + public const string FontIconFavoriteFlyout = nameof(FontIconFavoriteFlyout); public const string FontIconRefresh = nameof(FontIconRefresh); public const string FontIconLove = nameof(FontIconLove); public const string FontIconNotLove = nameof(FontIconNotLove); public const string FontIconCircleLove = nameof(FontIconCircleLove); public const string FontIconOption = nameof(FontIconOption); - public const string FontIconFavorite = nameof(FontIconFavorite); public const string FontIconShare = nameof(FontIconShare); public const string FontIconMore = nameof(FontIconMore); public const string FontIconCaretCircleLeft = nameof(FontIconCaretCircleLeft); @@ -53,15 +57,28 @@ namespace Pixiview.UI.Theme var regularFontFamily = StyleDefinition.IconRegularFontFamily; var solidFontFamily = StyleDefinition.IconSolidFontFamily; +#if __IOS__ + Add(FontIconUserFlyout, GetSolidIcon(StyleDefinition.IconUser, solidFontFamily)); + Add(FontIconSparklesFlyout, GetSolidIcon(StyleDefinition.IconSparkles, solidFontFamily)); + Add(FontIconOrderFlyout, GetSolidIcon(StyleDefinition.IconOrder, solidFontFamily)); + Add(FontIconFavoriteFlyout, GetSolidIcon(StyleDefinition.IconFavorite, solidFontFamily)); + Add(FontIconOption, GetSolidIcon(StyleDefinition.IconOption, solidFontFamily)); + Add(FontIconUser, GetSolidIcon(StyleDefinition.IconUser, regularFontFamily)); + Add(FontIconSparkles, GetSolidIcon(StyleDefinition.IconSparkles, regularFontFamily)); + Add(FontIconOrder, GetSolidIcon(StyleDefinition.IconOrder, regularFontFamily)); + Add(FontIconFavorite, GetSolidIcon(StyleDefinition.IconFavorite, regularFontFamily)); +#elif __ANDROID__ + Add(FontIconUserFlyout, ImageSource.FromFile("ic_user")); + Add(FontIconSparklesFlyout, ImageSource.FromFile("ic_sparkles")); + Add(FontIconOrderFlyout, ImageSource.FromFile("ic_rank")); + Add(FontIconFavoriteFlyout, ImageSource.FromFile("ic_bookmark")); + Add(FontIconOption, ImageSource.FromFile("ic_option")); +#endif + Add(FontIconLove, GetSolidIcon(StyleDefinition.IconLove, solidFontFamily, StyleDefinition.ColorRedBackground)); Add(FontIconCircleLove, GetSolidIcon(StyleDefinition.IconCircleLove, solidFontFamily, StyleDefinition.ColorRedBackground)); - Add(FontIconUser, GetSolidIcon(StyleDefinition.IconUser, solidFontFamily)); - Add(FontIconSparkles, GetSolidIcon(StyleDefinition.IconSparkles, solidFontFamily)); - Add(FontIconOrder, GetSolidIcon(StyleDefinition.IconOrder, solidFontFamily)); Add(FontIconRefresh, GetSolidIcon(StyleDefinition.IconRefresh, solidFontFamily)); Add(FontIconNotLove, GetSolidIcon(StyleDefinition.IconLove, regularFontFamily)); - Add(FontIconOption, GetSolidIcon(StyleDefinition.IconOption, solidFontFamily)); - Add(FontIconFavorite, GetSolidIcon(StyleDefinition.IconFavorite, solidFontFamily)); Add(FontIconShare, GetSolidIcon(StyleDefinition.IconShare, solidFontFamily)); Add(FontIconMore, GetSolidIcon(StyleDefinition.IconMore, regularFontFamily)); Add(FontIconCaretCircleLeft, GetSolidIcon(StyleDefinition.IconCaretCircleLeft, solidFontFamily)); diff --git a/Pixiview/Utils/Stores.cs b/Pixiview/Utils/Stores.cs index bcbcf7f..3e03f23 100644 --- a/Pixiview/Utils/Stores.cs +++ b/Pixiview/Utils/Stores.cs @@ -846,12 +846,12 @@ namespace Pixiview.Utils if (index > 0) { url = url.Substring(0, index) + "_master1200.jpg"; + } - var start = url.IndexOf("/img-master/"); - if (start > 0) - { - url = URL_PREVIEW + url.Substring(start); - } + var start = url.IndexOf("/img-master/"); + if (start > 0) + { + url = URL_PREVIEW + url.Substring(start); } return url; }