From 46ec3d504a8367ecbb95163fab0ed931cd302421 Mon Sep 17 00:00:00 2001 From: Paul Schneider Date: Mon, 17 Oct 2016 14:13:27 +0200 Subject: [PATCH] trying to provide a share point --- .../BookAStar.Droid/BookAStar.Droid.csproj | 3 +- BookAStar/BookAStar.Droid/MainActivity.cs | 94 ++++++++++++++++--- .../Properties/AndroidManifest.xml | 26 +++++ .../BookAStar.Droid/SendFilesActivity.cs | 25 +++++ .../Services/YavscChooserTargetService.cs | 44 +++++++++ BookAStar/BookAStar/Constants.cs | 3 + 6 files changed, 179 insertions(+), 16 deletions(-) create mode 100644 BookAStar/BookAStar.Droid/SendFilesActivity.cs create mode 100644 BookAStar/BookAStar.Droid/Services/YavscChooserTargetService.cs diff --git a/BookAStar/BookAStar.Droid/BookAStar.Droid.csproj b/BookAStar/BookAStar.Droid/BookAStar.Droid.csproj index 436c346c..d2f740a2 100644 --- a/BookAStar/BookAStar.Droid/BookAStar.Droid.csproj +++ b/BookAStar/BookAStar.Droid/BookAStar.Droid.csproj @@ -337,12 +337,13 @@ + + - diff --git a/BookAStar/BookAStar.Droid/MainActivity.cs b/BookAStar/BookAStar.Droid/MainActivity.cs index e0df68c9..3e632343 100644 --- a/BookAStar/BookAStar.Droid/MainActivity.cs +++ b/BookAStar/BookAStar.Droid/MainActivity.cs @@ -37,12 +37,17 @@ using Yavsc.Models.Identity; namespace BookAStar.Droid { + using Android.Runtime; + using Android.Support.V4.App; + using Android.Support.V4.Content; using Data; using Droid.OAuth; using Helpers; using Interfaces; - using Model.Auth.Account; - [Activity(Name="fr.pschneider.bas.MainActivity", Label = "BookAStar", Theme = "@style/MainTheme", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] + using Model.Auth.Account; + using static Android.Manifest; + + [Activity(Name = "fr.pschneider.bas.MainActivity", Label = "BookAStar", Theme = "@style/MainTheme", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] public class MainActivity : // global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity, @@ -54,8 +59,10 @@ namespace BookAStar.Droid TabLayoutResource = Resource.Layout.Tabbar; ToolbarResource = Resource.Layout.Toolbar; - + base.OnCreate(bundle); + + // FIXME usefull? SetPersistent(true); // global::Xamarin.Forms.Forms.SetTitleBarVisibility(Xamarin.Forms.AndroidTitleBarVisibility.Never); @@ -71,7 +78,7 @@ namespace BookAStar.Droid Android.Webkit.WebView.SetWebContentsDebuggingEnabled(true); } - IXFormsApp app =null; + IXFormsApp app = null; if (!Resolver.IsSet) { var xfapp = new XFormsCompatAppDroid(); @@ -96,7 +103,12 @@ namespace BookAStar.Droid }; var fapp = new BookAStar.App(this); + + LoadApplication(fapp); + + CheckSharing(); + // TabLayoutResource = Resource.Layout.Tabbar; // ToolbarResource = Resource.Layout.Toolbar; /* @@ -109,7 +121,37 @@ namespace BookAStar.Droid x = typeof(Themes.Android.UnderlineEffect); */ } - + public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults) + { + base.OnRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == Constants.AllowBeATarget) { + if (grantResults.Length > 0) + { + if (grantResults[0] == Android.Content.PM.Permission.Granted) + { + // yay! + } + else + { + // Should we show an explanation? + if (ActivityCompat.ShouldShowRequestPermissionRationale(this, + Permission.BindChooserTargetService)) + { + //Show permission explanation dialog... + // Show an expanation to the user *asynchronously* -- don't block + // this thread waiting for the user's response! After the user + // sees the explanation, try again to request the permission. + throw new NotImplementedException(); + } + else + { + //Never ask again selected, or device policy prohibits the app from having that permission. + //So, disable that feature, or fall back to another situation... + } + } + } + } + } private SimpleContainer SetIoc(XFormsCompatAppDroid app) { var resolverContainer = new SimpleContainer(); @@ -117,8 +159,8 @@ namespace BookAStar.Droid app.Init(this); - var documents = app.AppDataDirectory; - var pathToDatabase = Path.Combine(documents, "xforms.db"); + var documents = app.AppDataDirectory; + var pathToDatabase = Path.Combine(documents, "xforms.db"); resolverContainer.Register(t => AndroidDevice.CurrentDevice) .Register(t => t.Resolve().Display) @@ -156,7 +198,7 @@ namespace BookAStar.Droid public App AppContext { - get;set; + get; set; } bool StartNotifications() @@ -203,7 +245,7 @@ namespace BookAStar.Droid base.OnStart(); if (MainSettings.PushNotifications) StartNotifications(); - long queryId = Intent.GetLongExtra("BookQueryId",0); + long queryId = Intent.GetLongExtra("BookQueryId", 0); if (queryId > 0) { @@ -271,7 +313,8 @@ namespace BookAStar.Droid public async Task> GetAndroidAccounts() { - return await Task.Run(() => { + return await Task.Run(() => + { var manager = AccountStore.Create(this); return manager.FindAccountsForService(Constants.ApplicationName); }); @@ -335,7 +378,7 @@ namespace BookAStar.Droid Id = uid, YavscTokens = tokens }; - + MainSettings.SaveUser(newuser); accStore.Save(acc, Constants.ApplicationName); } @@ -405,11 +448,11 @@ namespace BookAStar.Droid { using (var m = new SimpleJsonPostMethod( - method, "Bearer "+ + method, "Bearer " + MainSettings.CurrentUser.YavscTokens.AccessToken )) { - return m.Invoke(arg); + return m.Invoke(arg); } } @@ -419,7 +462,7 @@ namespace BookAStar.Droid new SimpleJsonPostMethod( method, "Bearer " + MainSettings.CurrentUser.YavscTokens.AccessToken - )) + )) { return m.InvokeJson(arg); } @@ -427,7 +470,7 @@ namespace BookAStar.Droid public T Resolve() { - return (T) Resolver.Resolve(typeof(T)); + return (T)Resolver.Resolve(typeof(T)); } public object Resolve(Type t) @@ -448,6 +491,27 @@ namespace BookAStar.Droid { base.OnRestoreInstanceState(savedInstanceState, persistentState); } + + private void CheckSharing() + { + // .BIND_CHOOSER_TARGET_SERVICE + + // Here, thisActivity is the current activity + if (ContextCompat.CheckSelfPermission(this, + Permission.BindChooserTargetService) != Android.Content.PM.Permission.Granted) + { + + + ActivityCompat.RequestPermissions(this, + new String[] { Permission.BindChooserTargetService }, + Constants.AllowBeATarget); + + // Constants.AllowReadContacts is an + // app-defined int constant. The callback method gets the + // result of the request. + + } + } } } diff --git a/BookAStar/BookAStar.Droid/Properties/AndroidManifest.xml b/BookAStar/BookAStar.Droid/Properties/AndroidManifest.xml index c3a369c3..e9ef000a 100644 --- a/BookAStar/BookAStar.Droid/Properties/AndroidManifest.xml +++ b/BookAStar/BookAStar.Droid/Properties/AndroidManifest.xml @@ -17,6 +17,21 @@ + + + + + + + + + + + + + @@ -39,4 +54,15 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/BookAStar/BookAStar.Droid/SendFilesActivity.cs b/BookAStar/BookAStar.Droid/SendFilesActivity.cs new file mode 100644 index 00000000..89b9f728 --- /dev/null +++ b/BookAStar/BookAStar.Droid/SendFilesActivity.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using Android.App; +using Android.Content; +using Android.OS; +using Android.Runtime; +using Android.Views; +using Android.Widget; + +namespace BookAStar.Droid +{ + [Activity(Name= "fr.pschneider.bas.SendFilesActivity", Label = "SendFilesActivity")] + public class SendFilesActivity : Activity + { + protected override void OnCreate(Bundle savedInstanceState) + { + base.OnCreate(savedInstanceState); + + // Create your application here + } + } +} \ No newline at end of file diff --git a/BookAStar/BookAStar.Droid/Services/YavscChooserTargetService.cs b/BookAStar/BookAStar.Droid/Services/YavscChooserTargetService.cs new file mode 100644 index 00000000..c18fba3e --- /dev/null +++ b/BookAStar/BookAStar.Droid/Services/YavscChooserTargetService.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using Android.App; +using Android.Content; +using Android.OS; +using Android.Runtime; +using Android.Views; +using Android.Widget; +using Android.Service.Chooser; + +namespace BookAStar.Droid +{ + [Service(Name = "fr.pschneider.bas.YavscChooserTargetService", Label = "Yavsc share service", Permission = "android.permission.BIND_CHOOSER_TARGET_SERVICE", Icon = "@drawable/icon", Exported = true)] + class YavscChooserTargetService : ChooserTargetService + { + public override IList OnGetChooserTargets(ComponentName targetActivityName, IntentFilter matchedFilter) + { + Android.Graphics.Drawables.Icon i = + Android.Graphics.Drawables.Icon.CreateWithResource(this.BaseContext, + Resource.Drawable.icon); + ChooserTarget t = new ChooserTarget( + new Java.Lang.String( + "BookingStar"), i, + .5f, new ComponentName(this.BaseContext, ".SendFilesActivity"), + null); + var res = new List(); + res.Add(t); + return res; + } + + public override IBinder OnBind(Intent intent) + { + return base.OnBind(intent); + } + + public override void OnCreate() + { + base.OnCreate(); + } + } +} \ No newline at end of file diff --git a/BookAStar/BookAStar/Constants.cs b/BookAStar/BookAStar/Constants.cs index 74311483..922a84d7 100644 --- a/BookAStar/BookAStar/Constants.cs +++ b/BookAStar/BookAStar/Constants.cs @@ -22,5 +22,8 @@ namespace BookAStar public static readonly string SignalRHubsUrl = YavscHomeUrl + "/signalr/hubs"; #endregion + #region Permissions ids + public static int AllowBeATarget = 1; + #endregion } }