release/1.0.7 #34
3 changed files with 44 additions and 1 deletions
WIP app invite: scaffold MAUI Essentials dependency in shared PostIt
Adds Microsoft.Maui.Essentials package and <UseMaui>true</UseMaui> to src/PostIt/PostIt/PostIt.csproj so the shared project can compile code that calls MAUI Essentials APIs (Microsoft.Maui.ApplicationModel.*). Also adds a draft ContactService that wraps Contacts.Default.GetAllAsync() behind a runtime platform check and permission request. WIP caveats: - The portable MAUI Essentials facade compiles on net10.0 but throws NotImplementedInReferenceAssemblyException at runtime when no platform-specific MAUI Essentials binary is loaded. A PostIt.Android project (or equivalent) must reference the Android MAUI Essentials implementation for Contacts.Default.GetAllAsync() to actually work. - On desktop (Linux/macOS/Windows) the API is unsupported by design; ContactService currently throws PlatformNotSupportedException. A desktop stub returning Array.Empty<Contact>() is the likely next step. - No tests yet. The scaffold is unverified at runtime; build passes.
commit
a8c219e0fa
|
|
@ -14,6 +14,7 @@
|
||||||
<PackageVersion Include="CommunityToolkit.Mvvm" Version="8.4.2" />
|
<PackageVersion Include="CommunityToolkit.Mvvm" Version="8.4.2" />
|
||||||
<PackageVersion Include="Material.Avalonia" Version="3.17.0" />
|
<PackageVersion Include="Material.Avalonia" Version="3.17.0" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.9" />
|
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.9" />
|
||||||
|
<PackageVersion Include="Microsoft.Maui.Essentials" Version="10.0.90" />
|
||||||
<PackageVersion Include="Xamarin.AndroidX.Browser" Version="1.8.0" />
|
<PackageVersion Include="Xamarin.AndroidX.Browser" Version="1.8.0" />
|
||||||
<PackageVersion Include="Xamarin.AndroidX.Core.SplashScreen" Version="1.2.0" />
|
<PackageVersion Include="Xamarin.AndroidX.Core.SplashScreen" Version="1.2.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,13 @@
|
||||||
<TargetFramework>net10.0</TargetFramework>
|
<TargetFramework>net10.0</TargetFramework>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<LangVersion>latest</LangVersion>
|
<LangVersion>latest</LangVersion>
|
||||||
|
<UseMaui>true</UseMaui>
|
||||||
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
|
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
|
||||||
<AssemblyVersion>1.0.1.0</AssemblyVersion>
|
<AssemblyVersion>1.0.1.0</AssemblyVersion>
|
||||||
<FileVersion>1.0.1.0</FileVersion>
|
<FileVersion>1.0.1.0</FileVersion>
|
||||||
<InformationalVersion>1.0.1-5+Branch.main.Sha.0617fc6bda7151c70559d87177e2dcfb1b60995f</InformationalVersion>
|
<InformationalVersion>1.0.1-5+Branch.main.Sha.0617fc6bda7151c70559d87177e2dcfb1b60995f</InformationalVersion>
|
||||||
<Version>1.0.1-5</Version>
|
<Version>1.0.1-5</Version>
|
||||||
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<AvaloniaResource Include="Assets\**" />
|
<AvaloniaResource Include="Assets\**" />
|
||||||
|
|
@ -24,6 +26,7 @@
|
||||||
<PackageReference Include="CommunityToolkit.Mvvm" />
|
<PackageReference Include="CommunityToolkit.Mvvm" />
|
||||||
<PackageReference Include="IdentityModel.OidcClient" />
|
<PackageReference Include="IdentityModel.OidcClient" />
|
||||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" />
|
<PackageReference Include="Microsoft.Extensions.DependencyInjection" />
|
||||||
|
<PackageReference Include="Microsoft.Maui.Essentials" />
|
||||||
<ProjectReference Include="../../Yavsc.Abstract/Yavsc.Abstract.csproj" />
|
<ProjectReference Include="../../Yavsc.Abstract/Yavsc.Abstract.csproj" />
|
||||||
<ProjectReference Include="../../Yavsc.Api.Client/Yavsc.Api.Client.csproj" />
|
<ProjectReference Include="../../Yavsc.Api.Client/Yavsc.Api.Client.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
||||||
39
src/PostIt/PostIt/Services/ContactService.cs
Normal file
39
src/PostIt/PostIt/Services/ContactService.cs
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.Maui.ApplicationModel.Communication;
|
||||||
|
using Microsoft.Maui.ApplicationModel;
|
||||||
|
using Microsoft.Maui.Devices;
|
||||||
|
|
||||||
|
public class ContactService
|
||||||
|
{
|
||||||
|
public async Task<IEnumerable<Contact>> GetDeviceContactsAsync()
|
||||||
|
{
|
||||||
|
// 1. Ensure the platform supports MAUI Essentials APIs
|
||||||
|
if (DeviceInfo.Current.Platform == DevicePlatform.Unknown)
|
||||||
|
{
|
||||||
|
throw new PlatformNotSupportedException("MAUI Essentials is not available on this platform.");
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// 2. Request runtime permission (Required for Android & iOS)
|
||||||
|
var status = await Permissions.RequestAsync<Permissions.ContactsRead>();
|
||||||
|
if (status != PermissionStatus.Granted)
|
||||||
|
{
|
||||||
|
// Permission denied by user
|
||||||
|
return Array.Empty<Contact>();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. Fetch all contacts
|
||||||
|
var contactsEnumerable = await Contacts.Default.GetAllAsync();
|
||||||
|
return contactsEnumerable ?? Array.Empty<Contact>();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
// Handle cross-platform exceptions or logs here
|
||||||
|
System.Diagnostics.Debug.WriteLine($"Error fetching contacts: {ex.Message}");
|
||||||
|
return Array.Empty<Contact>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue