From 85be3862f6a2fbfae8cb5c488bd87adff8d5d922 Mon Sep 17 00:00:00 2001 From: Yan Maniez Date: Sat, 11 May 2019 14:53:34 +0200 Subject: [PATCH] PdfView :) --- .../AideDeJeu.Android.csproj | 1 + .../AideDeJeu.Android/PdfViewRenderer.cs | 62 +++++++++++++++++ AideDeJeu/AideDeJeu/Views/PdfView.cs | 34 ++++++++++ .../Views/PlayerCharacter/PdfViewPage.xaml | 3 + AideDeJeu/AideDeJeuUnitTest/UnitTest1.cs | 68 +++++++++---------- 5 files changed, 134 insertions(+), 34 deletions(-) create mode 100644 AideDeJeu/AideDeJeu.Android/PdfViewRenderer.cs create mode 100644 AideDeJeu/AideDeJeu/Views/PdfView.cs diff --git a/AideDeJeu/AideDeJeu.Android/AideDeJeu.Android.csproj b/AideDeJeu/AideDeJeu.Android/AideDeJeu.Android.csproj index 341bebac..e496e9a8 100644 --- a/AideDeJeu/AideDeJeu.Android/AideDeJeu.Android.csproj +++ b/AideDeJeu/AideDeJeu.Android/AideDeJeu.Android.csproj @@ -107,6 +107,7 @@ + diff --git a/AideDeJeu/AideDeJeu.Android/PdfViewRenderer.cs b/AideDeJeu/AideDeJeu.Android/PdfViewRenderer.cs new file mode 100644 index 00000000..2d01b400 --- /dev/null +++ b/AideDeJeu/AideDeJeu.Android/PdfViewRenderer.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Net; +using System.Text; +using AideDeJeu.Droid; +using AideDeJeu.Views; +using Android.App; +using Android.Content; +using Android.OS; +using Android.Runtime; +using Android.Views; +using Android.Widget; +using Xamarin.Forms; +using Xamarin.Forms.Platform.Android; + +[assembly: ExportRenderer(typeof(PdfView), typeof(PdfViewRenderer))] +namespace AideDeJeu.Droid +{ + public class PdfViewRenderer : WebViewRenderer + { + public PdfViewRenderer(Context context) : base(context) + { + } + + protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) + { + base.OnElementPropertyChanged(sender, e); + if (e.PropertyName == "Uri") + { + var pdfView = Element as PdfView; + if (pdfView.Uri != null) + { + Control.Settings.AllowFileAccess = true; + Control.Settings.AllowFileAccessFromFileURLs = true; + Control.Settings.AllowUniversalAccessFromFileURLs = true; + //Control.LoadUrl(string.Format("file:///android_asset/pdfjs/web/viewer.html?file={0}", string.Format("file:///android_asset/Content/{0}", WebUtility.UrlEncode(customWebView.Uri)))); + Control.LoadUrl(string.Format("file:///android_asset/pdfjs/web/viewer.html?file={0}", string.Format("file://{0}", WebUtility.UrlEncode(pdfView.Uri)))); + } + } + + } + protected override void OnElementChanged(ElementChangedEventArgs e) + { + base.OnElementChanged(e); + + if (e.NewElement != null) + { + var pdfView = Element as PdfView; + if (pdfView.Uri != null) + { + Control.Settings.AllowFileAccess = true; + Control.Settings.AllowFileAccessFromFileURLs = true; + Control.Settings.AllowUniversalAccessFromFileURLs = true; + //Control.LoadUrl(string.Format("file:///android_asset/pdfjs/web/viewer.html?file={0}", string.Format("file:///android_asset/Content/{0}", WebUtility.UrlEncode(customWebView.Uri)))); + Control.LoadUrl(string.Format("file:///android_asset/pdfjs/web/viewer.html?file={0}", string.Format("file://{0}", WebUtility.UrlEncode(pdfView.Uri)))); + } + } + } + } +} \ No newline at end of file diff --git a/AideDeJeu/AideDeJeu/Views/PdfView.cs b/AideDeJeu/AideDeJeu/Views/PdfView.cs new file mode 100644 index 00000000..2601157c --- /dev/null +++ b/AideDeJeu/AideDeJeu/Views/PdfView.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Xamarin.Forms; + +namespace AideDeJeu.Views +{ + public class PdfView : WebView + { + //public static readonly BindableProperty UriProperty = + // BindableProperty.Create(p => p.Uri, default(string)); + public string Uri + { + get { return (string)GetValue(UriProperty); } + set { SetValue(UriProperty, value); } + } + public static readonly BindableProperty UriProperty = BindableProperty.Create( + nameof(Uri), + typeof(string), + typeof(PdfView), + defaultValue: default(string), + propertyChanged: OnUriChanged); + + static void OnUriChanged(BindableObject bindable, object oldValue, object newValue) + { + var view = bindable as PdfView; + } + //public string Uri + //{ + // get { return (string)GetValue(UriProperty); } + // set { SetValue(UriProperty, value); } + //} + } +} diff --git a/AideDeJeu/AideDeJeu/Views/PlayerCharacter/PdfViewPage.xaml b/AideDeJeu/AideDeJeu/Views/PlayerCharacter/PdfViewPage.xaml index c77e4ad4..f8b8b5a3 100644 --- a/AideDeJeu/AideDeJeu/Views/PlayerCharacter/PdfViewPage.xaml +++ b/AideDeJeu/AideDeJeu/Views/PlayerCharacter/PdfViewPage.xaml @@ -1,12 +1,15 @@  \ No newline at end of file diff --git a/AideDeJeu/AideDeJeuUnitTest/UnitTest1.cs b/AideDeJeu/AideDeJeuUnitTest/UnitTest1.cs index 18d3f5d0..f6992608 100644 --- a/AideDeJeu/AideDeJeuUnitTest/UnitTest1.cs +++ b/AideDeJeu/AideDeJeuUnitTest/UnitTest1.cs @@ -1,35 +1,35 @@ -using AideDeJeu.ViewModels; -using AideDeJeuLib; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using System.Collections.Generic; -using System.Diagnostics; -using System.Threading.Tasks; +//using AideDeJeu.ViewModels; +//using AideDeJeuLib; +//using Microsoft.VisualStudio.T.TestTools.UnitTesting; +//using System.Collections.Generic; +//using System.Diagnostics; +//using System.Threading.Tasks; -namespace AideDeJeuUnitTest -{ - [TestClass] - public class UnitTest1 - { - [TestMethod] - public async Task TestMethod1() - { - var diceRoller = new DiceRollerViewModel(); - var diceRolls = diceRoller.DicesValues(6, 3); - foreach(var diceRoll in diceRolls) - { - Debug.WriteLine($"{diceRoll.Key} => {diceRoll.Value / 3}"); - } - Assert.IsNotNull(diceRolls); - //var allItems = new Dictionary(); - //var store = new StoreViewModel(); - //var item = store.ToItem(null, AideDeJeu.Tools.Helpers.GetResourceString($"AideDeJeu.Data.sandbox.md"), allItems); - //var md = item.Markdown; - //var children = await item.GetChildrenAsync(); - //foreach(var iitem in children) - //{ - // md += iitem.Markdown; - //} - //Assert.IsNotNull(md); - } - } -} +//namespace AideDeJeuUnitTest +//{ +// [TestClass] +// public class UnitTest1 +// { +// [TestMethod] +// public async Task TestMethod1() +// { +// var diceRoller = new DiceRollerViewModel(); +// var diceRolls = diceRoller.DicesValues(6, 3); +// foreach(var diceRoll in diceRolls) +// { +// Debug.WriteLine($"{diceRoll.Key} => {diceRoll.Value / 3}"); +// } +// Assert.IsNotNull(diceRolls); +// //var allItems = new Dictionary(); +// //var store = new StoreViewModel(); +// //var item = store.ToItem(null, AideDeJeu.Tools.Helpers.GetResourceString($"AideDeJeu.Data.sandbox.md"), allItems); +// //var md = item.Markdown; +// //var children = await item.GetChildrenAsync(); +// //foreach(var iitem in children) +// //{ +// // md += iitem.Markdown; +// //} +// //Assert.IsNotNull(md); +// } +// } +//}