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;
}