more reliable
This commit is contained in:
parent
22e1705e44
commit
426bc68d61
26 changed files with 172 additions and 191 deletions
|
|
@ -3,6 +3,9 @@ using Android.Content.PM;
|
|||
using Android.Content;
|
||||
using Avalonia.Android;
|
||||
using AndroidX.Emoji2.Text;
|
||||
using AndroidX.Core.Provider;
|
||||
using Android;
|
||||
using Android.Graphics;
|
||||
|
||||
namespace PostIt.Android;
|
||||
|
||||
|
|
@ -26,7 +29,6 @@ public class MainActivity : AvaloniaMainActivity
|
|||
|
||||
protected override void OnCreate(global::Android.OS.Bundle? savedInstanceState)
|
||||
{
|
||||
EmojiCompat.Init(this);
|
||||
base.OnCreate(savedInstanceState);
|
||||
PlatformBootstrap.EnsureInitialized();
|
||||
Current = this;
|
||||
|
|
|
|||
|
|
@ -1,34 +1,28 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net11.0-android</TargetFramework>
|
||||
<!-- FORCE LES ARCHITECTURES ANDROID VALIDES -->
|
||||
<RuntimeIdentifiers>android-arm64;android-x64</RuntimeIdentifiers>
|
||||
<SupportedOSPlatformVersion>24.0.0</SupportedOSPlatformVersion>
|
||||
<TargetFramework>net10.0-android</TargetFramework>
|
||||
<SupportedOSPlatformVersion>23</SupportedOSPlatformVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<ApplicationId>fr.pschneider.PostIt</ApplicationId>
|
||||
<ApplicationVersion>1</ApplicationVersion>
|
||||
<ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
|
||||
<AndroidPackageFormat>apk</AndroidPackageFormat>
|
||||
<AndroidEnableProfiledAot>false</AndroidEnableProfiledAot>
|
||||
<RuntimeIdentifiers Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">android-arm;android-arm64;android-x64</RuntimeIdentifiers>
|
||||
<AssemblyVersion>1.1.0.0</AssemblyVersion>
|
||||
<FileVersion>1.1.0.0</FileVersion>
|
||||
<InformationalVersion>1.1.0-beta.1+1.Branch.release-1.0.8-rc1.Sha.1167169aa89e1bf25290e9a152d27b357a500ab3</InformationalVersion>
|
||||
<Version>1.1.0-beta.1</Version>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Icon.png">
|
||||
<Link>Resources\drawable\Icon.png</Link>
|
||||
</AndroidResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Avalonia.Android" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\PostIt\PostIt.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Maui.Essentials" />
|
||||
<PackageReference Include="Avalonia.Android" />
|
||||
<PackageReference Include="Xamarin.AndroidX.Core.SplashScreen" />
|
||||
<PackageReference Include="Avalonia.Browser" />
|
||||
<PackageReference Include="Xamarin.AndroidX.Browser" />
|
||||
<PackageReference Include="IdentityModel.OidcClient" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
</style>
|
||||
|
||||
<style name="MyTheme.NoActionBar" parent="@style/Theme.AppCompat.DayNight.NoActionBar">
|
||||
<item name="android:windowBackground">@drawable/splash_screen</item>
|
||||
<item name="android:windowActionBar">false</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -1,84 +0,0 @@
|
|||
#if ANDROID || IOS
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Maui.ApplicationModel.Communication;
|
||||
using Microsoft.Maui.ApplicationModel;
|
||||
using Microsoft.Maui.Devices;
|
||||
using PostIt.Services;
|
||||
using System.Linq;
|
||||
|
||||
namespace PostIt.Android.Services;
|
||||
|
||||
/// <summary>
|
||||
/// Mobile implementation backed by MAUI Essentials
|
||||
/// <c>Contacts.Default</c>.
|
||||
///
|
||||
/// <para>Compiled only for ANDROID and IOS. On desktop targets,
|
||||
/// see <c>ContactService.Desktop.cs</c> (the stub that wins at
|
||||
/// compile time).</para>
|
||||
///
|
||||
/// <para>Note: at runtime, this class throws
|
||||
/// <c>NotImplementedInReferenceAssemblyException</c> unless
|
||||
/// the host application project also references the
|
||||
/// platform-specific Microsoft.Maui.Essentials implementation
|
||||
/// (typically <c>PostIt.Android</c>). On iOS the same is
|
||||
/// required via <c>PostIt.iOS</c>. On desktop the stub is used
|
||||
/// and this file is excluded.</para>
|
||||
/// </summary>
|
||||
public sealed class ContactService : IContactService
|
||||
{
|
||||
public async Task<IReadOnlyList<ContactDto>> GetDeviceContactsAsync(CancellationToken ct = default)
|
||||
{
|
||||
if (DeviceInfo.Current.Platform == DevicePlatform.Unknown)
|
||||
return Array.Empty<ContactDto>();
|
||||
|
||||
try
|
||||
{
|
||||
var status = await Permissions.RequestAsync<Permissions.ContactsRead>();
|
||||
if (status != PermissionStatus.Granted)
|
||||
return Array.Empty<ContactDto>();
|
||||
|
||||
var contacts = await Contacts.Default.GetAllAsync();
|
||||
if (contacts is null) return Array.Empty<ContactDto>();
|
||||
|
||||
// Carry the per-contact email list as-is. A real
|
||||
// device contact can carry several addresses (home /
|
||||
// work / other); the UI use case ("invite / add to a
|
||||
// circle") can then decide which address to use, or
|
||||
// let the user pick. The platform-neutral ContactDto
|
||||
// shape is intentionally richer than the Yavsc
|
||||
// directory's single-Email shape — the two flows
|
||||
// answer different questions.
|
||||
var result = new List<ContactDto>(contacts.Count());
|
||||
foreach (var c in contacts)
|
||||
{
|
||||
var emails = ExtractEmails(c.Emails);
|
||||
result.Add(new ContactDto(
|
||||
c.Id,
|
||||
c.DisplayName ?? string.Empty,
|
||||
emails));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"ContactService: {ex.Message}");
|
||||
return Array.Empty<ContactDto>();
|
||||
}
|
||||
}
|
||||
|
||||
private static IReadOnlyList<string> ExtractEmails(IEnumerable<ContactEmail>? emails)
|
||||
{
|
||||
if (emails is null) return Array.Empty<string>();
|
||||
var list = new List<string>();
|
||||
foreach (var e in emails)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(e.EmailAddress))
|
||||
list.Add(e.EmailAddress);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue