Neighbourhood.omg.lol/Platforms/Android/MainActivity.cs

62 lines
2.7 KiB
C#

using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.Net;
using Android.OS;
using Microsoft.Extensions.DependencyInjection;
using Neighbourhood.omg.lol.Models;
namespace Neighbourhood.omg.lol {
[Activity(Exported = true, Theme = "@style/Maui.SplashTheme", LaunchMode = LaunchMode.SingleTop, MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
[IntentFilter([Intent.ActionSend], Categories = [Intent.CategoryDefault], DataMimeType = "text/plain")]
[IntentFilter([Intent.ActionSend], Categories = [Intent.CategoryDefault], DataMimeType = "*/*")]
public class MainActivity : MauiAppCompatActivity {
protected override void OnCreate(Bundle savedInstanceState) {
base.OnCreate(savedInstanceState);
// In case the app was opened (on first load) with an `ActionView` intent
OnNewIntent(this.Intent);
}
protected override void OnNewIntent(Intent? intent) {
base.OnNewIntent(intent);
if (intent != null && intent.Type != null) {
if (intent.Type.StartsWith("text/")) //string
{
string? subject = intent.GetStringExtra(Intent.ExtraSubject);
string? shareString = intent.GetStringExtra(Intent.ExtraText);
if (!string.IsNullOrWhiteSpace(shareString)) {
State state = IPlatformApplication.Current!.Services.GetService<State>()!;
state.ShareStringSubject = subject;
state.ShareString = shareString;
}
}
else if (intent.Type.StartsWith("image/")) //image
{
string? shareString = intent.GetStringExtra(Intent.ExtraText);
var extra = intent.GetParcelableExtra(Intent.ExtraStream);
if (extra is Android.Net.Uri) {
Stream? stream = ContentResolver?.OpenInputStream(extra as Android.Net.Uri);
byte[] bytes = new byte[stream?.Length ?? 0];
stream?.Read(bytes, 0, bytes.Length);
string base64String = Convert.ToBase64String(bytes);
if (!string.IsNullOrWhiteSpace(base64String)) {
State state = IPlatformApplication.Current!.Services.GetService<State>()!;
state.SharePhotoContentType = intent.Type;
state.SharePhotoSize = bytes.Length;
state.SharePhotoText = shareString;
state.SharePhoto = base64String;
}
}
}
else if (intent.Type.Equals(Intent.ActionSendMultiple)) //Multiple file
{
var uriList = intent.GetParcelableArrayListExtra(Intent.ExtraStream);
}
}
}
}
}