trying to provide a share point

main
Paul Schneider 9 years ago
parent 462fc495be
commit 1dd057871c
6 changed files with 179 additions and 16 deletions

@ -337,12 +337,13 @@
<Compile Include="OAuth2\YaOAuth2Authenticator.cs" /> <Compile Include="OAuth2\YaOAuth2Authenticator.cs" />
<Compile Include="Resources\Resource.Designer.cs" /> <Compile Include="Resources\Resource.Designer.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SendFilesActivity.cs" />
<Compile Include="Services\YavscChooserTargetService.cs" />
<Compile Include="Services\GcmListenerService.cs" /> <Compile Include="Services\GcmListenerService.cs" />
<Compile Include="Services\GcmRegistrationIntentService.cs" /> <Compile Include="Services\GcmRegistrationIntentService.cs" />
<Compile Include="Services\MyGcmIntentService.cs" /> <Compile Include="Services\MyGcmIntentService.cs" />
<Compile Include="Services\MyInstanceIdListener.cs" /> <Compile Include="Services\MyInstanceIdListener.cs" />
<Compile Include="CompatXFormsApp.cs" /> <Compile Include="CompatXFormsApp.cs" />
<Compile Include="YavscShareActionProvider.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="app.config"> <None Include="app.config">

@ -37,12 +37,17 @@ using Yavsc.Models.Identity;
namespace BookAStar.Droid namespace BookAStar.Droid
{ {
using Android.Runtime;
using Android.Support.V4.App;
using Android.Support.V4.Content;
using Data; using Data;
using Droid.OAuth; using Droid.OAuth;
using Helpers; using Helpers;
using Interfaces; using Interfaces;
using Model.Auth.Account; 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 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 : public class MainActivity :
// global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity, // global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity,
@ -56,6 +61,8 @@ namespace BookAStar.Droid
ToolbarResource = Resource.Layout.Toolbar; ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(bundle); base.OnCreate(bundle);
// FIXME usefull?
SetPersistent(true); SetPersistent(true);
// global::Xamarin.Forms.Forms.SetTitleBarVisibility(Xamarin.Forms.AndroidTitleBarVisibility.Never); // global::Xamarin.Forms.Forms.SetTitleBarVisibility(Xamarin.Forms.AndroidTitleBarVisibility.Never);
@ -71,7 +78,7 @@ namespace BookAStar.Droid
Android.Webkit.WebView.SetWebContentsDebuggingEnabled(true); Android.Webkit.WebView.SetWebContentsDebuggingEnabled(true);
} }
IXFormsApp<XFormsCompatApplicationDroid> app =null; IXFormsApp<XFormsCompatApplicationDroid> app = null;
if (!Resolver.IsSet) if (!Resolver.IsSet)
{ {
var xfapp = new XFormsCompatAppDroid(); var xfapp = new XFormsCompatAppDroid();
@ -96,7 +103,12 @@ namespace BookAStar.Droid
}; };
var fapp = new BookAStar.App(this); var fapp = new BookAStar.App(this);
LoadApplication(fapp); LoadApplication(fapp);
CheckSharing();
// TabLayoutResource = Resource.Layout.Tabbar; // TabLayoutResource = Resource.Layout.Tabbar;
// ToolbarResource = Resource.Layout.Toolbar; // ToolbarResource = Resource.Layout.Toolbar;
/* /*
@ -109,7 +121,37 @@ namespace BookAStar.Droid
x = typeof(Themes.Android.UnderlineEffect); */ 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) private SimpleContainer SetIoc(XFormsCompatAppDroid app)
{ {
var resolverContainer = new SimpleContainer(); var resolverContainer = new SimpleContainer();
@ -117,8 +159,8 @@ namespace BookAStar.Droid
app.Init(this); app.Init(this);
var documents = app.AppDataDirectory; var documents = app.AppDataDirectory;
var pathToDatabase = Path.Combine(documents, "xforms.db"); var pathToDatabase = Path.Combine(documents, "xforms.db");
resolverContainer.Register<IDevice>(t => AndroidDevice.CurrentDevice) resolverContainer.Register<IDevice>(t => AndroidDevice.CurrentDevice)
.Register<IDisplay>(t => t.Resolve<IDevice>().Display) .Register<IDisplay>(t => t.Resolve<IDevice>().Display)
@ -156,7 +198,7 @@ namespace BookAStar.Droid
public App AppContext public App AppContext
{ {
get;set; get; set;
} }
bool StartNotifications() bool StartNotifications()
@ -203,7 +245,7 @@ namespace BookAStar.Droid
base.OnStart(); base.OnStart();
if (MainSettings.PushNotifications) if (MainSettings.PushNotifications)
StartNotifications(); StartNotifications();
long queryId = Intent.GetLongExtra("BookQueryId",0); long queryId = Intent.GetLongExtra("BookQueryId", 0);
if (queryId > 0) if (queryId > 0)
{ {
@ -271,7 +313,8 @@ namespace BookAStar.Droid
public async Task<IEnumerable<Account>> GetAndroidAccounts() public async Task<IEnumerable<Account>> GetAndroidAccounts()
{ {
return await Task.Run(() => { return await Task.Run(() =>
{
var manager = AccountStore.Create(this); var manager = AccountStore.Create(this);
return manager.FindAccountsForService(Constants.ApplicationName); return manager.FindAccountsForService(Constants.ApplicationName);
}); });
@ -405,11 +448,11 @@ namespace BookAStar.Droid
{ {
using (var m = using (var m =
new SimpleJsonPostMethod( new SimpleJsonPostMethod(
method, "Bearer "+ method, "Bearer " +
MainSettings.CurrentUser.YavscTokens.AccessToken MainSettings.CurrentUser.YavscTokens.AccessToken
)) ))
{ {
return m.Invoke<TAnswer>(arg); return m.Invoke<TAnswer>(arg);
} }
} }
@ -427,7 +470,7 @@ namespace BookAStar.Droid
public T Resolve<T>() public T Resolve<T>()
{ {
return (T) Resolver.Resolve(typeof(T)); return (T)Resolver.Resolve(typeof(T));
} }
public object Resolve(Type t) public object Resolve(Type t)
@ -448,6 +491,27 @@ namespace BookAStar.Droid
{ {
base.OnRestoreInstanceState(savedInstanceState, persistentState); 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.
}
}
} }
} }

@ -17,6 +17,21 @@
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
<service android:name="fr.pschneider.bas.YavscChooserTargetService"
android:label="@string/app_name"
android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE">
<intent-filter>
<action android:name="android.service.chooser.ChooserTargetService" />
</intent-filter>
</service>
<activity android:name="fr.pschneider.bas.SendFilesActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
<meta-data android:name="android.service.chooser.chooser_target_service" android:value="fr.pschneider.bas.YavscChooserTargetService" />
</activity>
</application> </application>
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAVE_LOCK" /> <uses-permission android:name="android.permission.WAVE_LOCK" />
@ -39,4 +54,15 @@
<uses-permission android:name="android.permission.ACCOUNT_MANAGER" /> <uses-permission android:name="android.permission.ACCOUNT_MANAGER" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" /> <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
<uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT" />
<uses-permission android:name="android.permission.CAPTURE_SECURE_VIDEO_OUTPUT" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
<uses-permission android:name="android.permission.PERSISTENT_ACTIVITY" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
</manifest> </manifest>

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

@ -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<ChooserTarget> 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<ChooserTarget>();
res.Add(t);
return res;
}
public override IBinder OnBind(Intent intent)
{
return base.OnBind(intent);
}
public override void OnCreate()
{
base.OnCreate();
}
}
}

@ -22,5 +22,8 @@ namespace BookAStar
public static readonly string SignalRHubsUrl = YavscHomeUrl + "/signalr/hubs"; public static readonly string SignalRHubsUrl = YavscHomeUrl + "/signalr/hubs";
#endregion #endregion
#region Permissions ids
public static int AllowBeATarget = 1;
#endregion
} }
} }

Loading…