diff --git a/Pixiview.iOS/Assets.xcassets/LauncherLogo.imageset/Contents.json b/Pixiview.iOS/Assets.xcassets/LauncherLogo.imageset/Contents.json
index dcce229..84b7f34 100644
--- a/Pixiview.iOS/Assets.xcassets/LauncherLogo.imageset/Contents.json
+++ b/Pixiview.iOS/Assets.xcassets/LauncherLogo.imageset/Contents.json
@@ -22,6 +22,7 @@
"idiom": "iphone"
},
{
+ "filename": "pixiv.png",
"scale": "1x",
"idiom": "iphone"
},
diff --git a/Pixiview.iOS/Info.plist b/Pixiview.iOS/Info.plist
index c6a9565..1d65878 100644
--- a/Pixiview.iOS/Info.plist
+++ b/Pixiview.iOS/Info.plist
@@ -21,7 +21,7 @@
UIInterfaceOrientationLandscapeRight
MinimumOSVersion
- 11.0
+ 13.0
CFBundleDisplayName
Pixiview
CFBundleIdentifier
@@ -46,5 +46,9 @@
UIStatusBarStyleDefault
NSPhotoLibraryUsageDescription
需要访问您的图片库
+ LSSupportsOpeningDocumentsInPlace
+
+ UIFileSharingEnabled
+
diff --git a/Pixiview.iOS/Services/EnvironmentService.cs b/Pixiview.iOS/Services/EnvironmentService.cs
index 307546e..b8e9777 100644
--- a/Pixiview.iOS/Services/EnvironmentService.cs
+++ b/Pixiview.iOS/Services/EnvironmentService.cs
@@ -6,7 +6,6 @@ using Pixiview.iOS.Services;
using Pixiview.Resources;
using Pixiview.Utils;
using UIKit;
-using Xamarin.Essentials;
using Xamarin.Forms;
[assembly: Dependency(typeof(EnvironmentService))]
@@ -28,30 +27,32 @@ namespace Pixiview.iOS.Services
#region - Theme -
+ /*
[SuppressMessage("Code Notifications", "XI0002:Notifies you from using newer Apple APIs when targeting an older OS version", Justification = "")]
- public OSAppTheme GetApplicationTheme()
+ public AppTheme GetApplicationTheme()
{
if (UIDevice.CurrentDevice.CheckSystemVersion(12, 0))
{
var currentController = Platform.GetCurrentUIViewController();
if (currentController == null)
{
- return OSAppTheme.Unspecified;
+ return AppTheme.Unspecified;
}
var style = currentController.TraitCollection.UserInterfaceStyle;
if (style == UIUserInterfaceStyle.Dark)
{
- return OSAppTheme.Dark;
+ return AppTheme.Dark;
}
else if (style == UIUserInterfaceStyle.Light)
{
- return OSAppTheme.Light;
+ return AppTheme.Light;
}
}
- return OSAppTheme.Unspecified;
+ return AppTheme.Unspecified;
}
+ //*/
public void SetStatusBarStyle(StatusBarStyles style)
{
diff --git a/Pixiview/App.cs b/Pixiview/App.cs
index 31ab7ed..e3fea30 100644
--- a/Pixiview/App.cs
+++ b/Pixiview/App.cs
@@ -4,6 +4,7 @@ using System.Diagnostics;
using Pixiview.Resources;
using Pixiview.UI.Theme;
using Pixiview.Utils;
+using Xamarin.Essentials;
using Xamarin.Forms;
namespace Pixiview
@@ -11,7 +12,7 @@ namespace Pixiview
public class App : Application
{
// public properties
- public static OSAppTheme CurrentTheme { get; private set; }
+ public static AppTheme CurrentTheme { get; private set; }
public static PlatformCulture CurrentCulture { get; private set; }
public static Dictionary ExtraResources { get; private set; }
@@ -28,7 +29,8 @@ namespace Pixiview
{ ThemeBase.IconLeft, p.IconLeft }
};
- var theme = service.GetApplicationTheme();
+ //var theme = service.GetApplicationTheme();
+ var theme = AppInfo.RequestedTheme;
SetTheme(theme, true);
}
@@ -39,7 +41,7 @@ namespace Pixiview
CurrentCulture = new PlatformCulture(ci.Name.ToLower());
}
- private void SetTheme(OSAppTheme theme, bool force = false)
+ private void SetTheme(AppTheme theme, bool force = false)
{
if (force || theme != CurrentTheme)
{
@@ -51,7 +53,7 @@ namespace Pixiview
}
DebugPrint($"application theme: {theme}");
ThemeBase themeInstance;
- if (theme == OSAppTheme.Dark)
+ if (theme == AppTheme.Dark)
{
themeInstance = DarkTheme.Instance;
}
@@ -80,7 +82,8 @@ namespace Pixiview
protected override void OnResume()
{
- var theme = DependencyService.Get().GetApplicationTheme();
+ //var theme = DependencyService.Get().GetApplicationTheme();
+ var theme = AppInfo.RequestedTheme;
SetTheme(theme);
}
diff --git a/Pixiview/Illust/IllustCollectionPage.cs b/Pixiview/Illust/IllustCollectionPage.cs
index fb6581f..17fab27 100644
--- a/Pixiview/Illust/IllustCollectionPage.cs
+++ b/Pixiview/Illust/IllustCollectionPage.cs
@@ -294,7 +294,7 @@ namespace Pixiview.Illust
TextColor = StyleDefinition.ColorRedBackground,
Text = StyleDefinition.IconLove
}
- .Binding(IsVisibleProperty, nameof(IllustItem.IsFavorite))
+ .Binding(IsVisibleProperty, IsFavoriteVisible ? nameof(IllustItem.IsFavorite) : null)
.DynamicResource(Label.FontFamilyProperty, ThemeBase.IconSolidFontFamily)
}
}
diff --git a/Pixiview/Illust/RecommendsPage.xaml.cs b/Pixiview/Illust/RecommendsPage.xaml.cs
index 5d7c55f..ab6d47f 100644
--- a/Pixiview/Illust/RecommendsPage.xaml.cs
+++ b/Pixiview/Illust/RecommendsPage.xaml.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Threading.Tasks;
using System.Windows.Input;
using Pixiview.UI;
using Pixiview.Utils;
@@ -16,7 +17,7 @@ namespace Pixiview.Illust
private static void OnSegmentIndexPropertyChanged(BindableObject obj, object oldValue, object newValue)
{
var page = (RecommendsPage)obj;
- page.DoLoadIllusts();
+ Task.Run(() => page.DoLoadIllusts());
}
public int SegmentIndex
@@ -25,8 +26,6 @@ namespace Pixiview.Illust
set => SetValue(SegmentIndexProperty, value);
}
- private IllustData illustData;
-
public RecommendsPage()
{
totalBarOffset = new Thickness(0, AppShell.TotalBarOffset.Top + 40, 0, 0);
@@ -103,11 +102,7 @@ namespace Pixiview.Illust
protected override IllustData DoLoadIllustData(bool force)
{
- if (illustData != null && !force)
- {
- return illustData;
- }
- illustData = Stores.LoadIllustData(force);
+ var illustData = Stores.LoadIllustData(force);
return illustData;
}
diff --git a/Pixiview/Illust/ViewIllustPage.xaml.cs b/Pixiview/Illust/ViewIllustPage.xaml.cs
index 1b866fd..ae2e794 100644
--- a/Pixiview/Illust/ViewIllustPage.xaml.cs
+++ b/Pixiview/Illust/ViewIllustPage.xaml.cs
@@ -255,43 +255,68 @@ namespace Pixiview.Illust
private async void Illust_LongPressed(IllustDetailItem item)
{
+ var share = ResourceHelper.Share;
+ string[] extras;
+ var preview = Stores.GetPreviewImagePath(item.PreviewUrl);
+ if (string.IsNullOrEmpty(preview))
+ {
+ extras = new string[0];
+ }
+ else
+ {
+ extras = new[] { share };
+ }
var saveOriginal = ResourceHelper.SaveOriginal;
var result = await DisplayActionSheet(
IllustItem.Title,
ResourceHelper.Cancel,
- saveOriginal);
+ saveOriginal,
+ extras);
if (result == saveOriginal)
{
- if (Stores.CheckIllustImage(item.OriginalUrl))
+ SaveOriginalImage(item);
+ }
+ else if (result == share)
+ {
+ await Share.RequestAsync(new ShareFileRequest
{
- var flag = await DisplayAlert(ResourceHelper.Operation,
- ResourceHelper.AlreadySavedQuestion,
- ResourceHelper.Yes,
- ResourceHelper.No);
- if (!flag)
- {
- return;
- }
- }
+ Title = IllustItem.Title,
+ File = new ShareFile(preview)
+ });
+ }
+ }
- var status = await Permissions.CheckStatusAsync();
- if (status != PermissionStatus.Granted)
- {
- status = await Permissions.RequestAsync();
- if (status != PermissionStatus.Granted)
- {
- App.DebugPrint("access denied to gallery.");
- return;
- }
- }
-
- if (item == null || item.Downloading)
+ private async void SaveOriginalImage(IllustDetailItem item)
+ {
+ if (Stores.CheckIllustImage(item.OriginalUrl))
+ {
+ var flag = await DisplayAlert(ResourceHelper.Operation,
+ ResourceHelper.AlreadySavedQuestion,
+ ResourceHelper.Yes,
+ ResourceHelper.No);
+ if (!flag)
{
return;
}
- item.Downloading = true;
- _ = Task.Run(() => DoLoadOriginalImage(item));
}
+
+ var status = await Permissions.CheckStatusAsync();
+ if (status != PermissionStatus.Granted)
+ {
+ status = await Permissions.RequestAsync();
+ if (status != PermissionStatus.Granted)
+ {
+ App.DebugPrint("access denied to gallery.");
+ return;
+ }
+ }
+
+ if (item == null || item.Downloading)
+ {
+ return;
+ }
+ item.Downloading = true;
+ _ = Task.Run(() => DoLoadOriginalImage(item));
}
private void DoLoadOriginalImage(IllustDetailItem item)
diff --git a/Pixiview/Resources/Languages/zh-CN.xml b/Pixiview/Resources/Languages/zh-CN.xml
index 5cad518..5b2bb75 100644
--- a/Pixiview/Resources/Languages/zh-CN.xml
+++ b/Pixiview/Resources/Languages/zh-CN.xml
@@ -16,6 +16,7 @@
预览
操作
保存原图
+ 分享
成功保存图片到照片库。
原图已保存,是否继续?
\ No newline at end of file
diff --git a/Pixiview/Resources/ResourceHelper.cs b/Pixiview/Resources/ResourceHelper.cs
index f0722d7..f51db73 100644
--- a/Pixiview/Resources/ResourceHelper.cs
+++ b/Pixiview/Resources/ResourceHelper.cs
@@ -18,6 +18,7 @@ namespace Pixiview.Resources
public static string R18 => GetResource(nameof(R18));
public static string Operation => GetResource(nameof(Operation));
public static string SaveOriginal => GetResource(nameof(SaveOriginal));
+ public static string Share => GetResource(nameof(Share));
public static string SaveSuccess => GetResource(nameof(SaveSuccess));
public static string AlreadySavedQuestion => GetResource(nameof(AlreadySavedQuestion));
diff --git a/Pixiview/Utils/Extensions.cs b/Pixiview/Utils/Extensions.cs
index f2c5d06..b43e021 100644
--- a/Pixiview/Utils/Extensions.cs
+++ b/Pixiview/Utils/Extensions.cs
@@ -6,7 +6,14 @@ namespace Pixiview.Utils
{
public static T Binding(this T view, BindableProperty property, string name) where T : BindableObject
{
- view.SetBinding(property, name);
+ if (name == null)
+ {
+ view.SetValue(property, default(T));
+ }
+ else
+ {
+ view.SetBinding(property, name);
+ }
return view;
}
diff --git a/Pixiview/Utils/IEnvironmentService.cs b/Pixiview/Utils/IEnvironmentService.cs
index ea7c9da..63be4ee 100644
--- a/Pixiview/Utils/IEnvironmentService.cs
+++ b/Pixiview/Utils/IEnvironmentService.cs
@@ -7,7 +7,7 @@ namespace Pixiview.Utils
{
EnvironmentParameter GetEnvironment();
- OSAppTheme GetApplicationTheme();
+ //AppTheme GetApplicationTheme();
void SetStatusBarStyle(StatusBarStyles style);
void SetStatusBarColor(Color color);
diff --git a/Pixiview/Utils/Stores.cs b/Pixiview/Utils/Stores.cs
index d826ffa..30e7ec6 100644
--- a/Pixiview/Utils/Stores.cs
+++ b/Pixiview/Utils/Stores.cs
@@ -248,6 +248,16 @@ namespace Pixiview.Utils
return File.Exists(file);
}
+ public static string GetPreviewImagePath(string url)
+ {
+ var file = Path.Combine(PersonalFolder, previewFolder, Path.GetFileName(url));
+ if (File.Exists(file))
+ {
+ return file;
+ }
+ return null;
+ }
+
private static ImageSource LoadImage(string url, string working, string folder)
{
var file = Path.Combine(working, folder, Path.GetFileName(url));