Skip to content

Commit 422f7c8

Browse files
committed
Fixed Android build
1 parent c495c79 commit 422f7c8

File tree

26 files changed

+182
-75
lines changed

26 files changed

+182
-75
lines changed

src/Platforms/Directory.Packages.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,6 @@
3737
<PackageVersion Include="Vanara.PInvoke.Shell32" Version="4.1.2" />
3838
<PackageVersion Include="VideoLAN.LibVLC.Android" Version="3.5.3" />
3939
<PackageVersion Include="VideoLAN.LibVLC.iOS" Version="3.6.1" />
40+
<PackageVersion Include="Xamarin.AndroidX.DocumentFile" Version="1.0.1.31" />
4041
</ItemGroup>
4142
</Project>

src/Platforms/SecureFolderFS.Maui/Localization/ResourceString.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ private string GetLocalized()
4343
if (LocalizationService is null)
4444
return $"{{{Rid}}}";
4545

46-
return LocalizationService.TryGetString(Rid ?? string.Empty) ?? $"{{{Rid}}}";
46+
return LocalizationService.GetResource(Rid ?? string.Empty) ?? $"{{{Rid}}}";
4747
}
4848
}
4949
}

src/Platforms/SecureFolderFS.Maui/Platforms/Android/Helpers/AndroidLifecycleHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ namespace SecureFolderFS.Maui.Platforms.Android.Helpers
1515
internal sealed class AndroidLifecycleHelper : BaseLifecycleHelper
1616
{
1717
/// <inheritdoc/>
18-
protected override string AppDirectory { get; } = FileSystem.Current.AppDataDirectory;
18+
public override string AppDirectory { get; } = FileSystem.Current.AppDataDirectory;
1919

2020
/// <inheritdoc/>
2121
public override Task InitAsync(CancellationToken cancellationToken = default)

src/Platforms/SecureFolderFS.Maui/Platforms/Android/ServiceImplementation/AndroidVaultFileSystemService.cs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,19 @@
11
using System.Runtime.CompilerServices;
2+
using MauiIcons.Core;
3+
using MauiIcons.Cupertino;
24
using SecureFolderFS.Core.MobileFS.Platforms.Android;
5+
using SecureFolderFS.Maui.AppModels;
6+
using SecureFolderFS.Sdk.Enums;
7+
using SecureFolderFS.Sdk.Extensions;
8+
using SecureFolderFS.Sdk.Models;
39
using SecureFolderFS.Sdk.Services;
10+
using SecureFolderFS.Sdk.ViewModels.Views.Wizard;
11+
using SecureFolderFS.Sdk.ViewModels.Views.Wizard.DataSources;
12+
using SecureFolderFS.Shared;
413
using SecureFolderFS.UI.ServiceImplementation;
514
using IFileSystem = SecureFolderFS.Storage.VirtualFileSystem.IFileSystem;
15+
using static SecureFolderFS.Sdk.Constants.DataSources;
16+
using static SecureFolderFS.Sdk.Ftp.Constants;
617

718
namespace SecureFolderFS.Maui.Platforms.Android.ServiceImplementation
819
{
@@ -15,5 +26,37 @@ public override async IAsyncEnumerable<IFileSystem> GetFileSystemsAsync([Enumera
1526
await Task.CompletedTask;
1627
yield return new AndroidFileSystem();
1728
}
29+
30+
/// <inheritdoc/>
31+
public override async IAsyncEnumerable<BaseDataSourceWizardViewModel> GetSourcesAsync(IVaultCollectionModel vaultCollectionModel, NewVaultMode mode, [EnumeratorCancellation] CancellationToken cancellationToken = default)
32+
{
33+
var fileExplorerService = DI.Service<IFileExplorerService>();
34+
yield return new PickerSourceWizardViewModel(DATA_SOURCE_PICKER, fileExplorerService, mode, vaultCollectionModel)
35+
{
36+
Icon = new ImageIcon(new MauiIcon() { Icon = CupertinoIcons.Tray2 })
37+
};
38+
39+
yield return new AccountSourceWizardViewModel(DATA_SOURCE_FTP, "FTP".ToLocalized(), mode, vaultCollectionModel)
40+
{
41+
Icon = new ImageResourceFile("source_network_drive_macos.png", false)
42+
};
43+
44+
yield return new AccountSourceWizardViewModel($"{nameof(SecureFolderFS)}.GoogleDrive", "GoogleDrive".ToLocalized(), mode, vaultCollectionModel)
45+
{
46+
Icon = new ImageResourceFile("source_gdrive.png", false)
47+
};
48+
49+
yield return new AccountSourceWizardViewModel($"{nameof(SecureFolderFS)}.OneDrive", "OneDrive".ToLocalized(), mode, vaultCollectionModel)
50+
{
51+
Icon = new ImageResourceFile("source_onedrive.png", false)
52+
};
53+
54+
yield return new AccountSourceWizardViewModel($"{nameof(SecureFolderFS)}.AmazonS3", "AmazonS3".ToLocalized(), mode, vaultCollectionModel)
55+
{
56+
Icon = new ImageResourceFile("source_aws_s3.png", false)
57+
};
58+
59+
await Task.CompletedTask;
60+
}
1861
}
1962
}

src/Platforms/SecureFolderFS.Maui/Platforms/Android/ViewModels/AndroidBiometricCreationViewModel.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using OwlCore.Storage;
22
using SecureFolderFS.Core;
3+
using SecureFolderFS.Core.DataModels;
34
using SecureFolderFS.Core.VaultAccess;
45
using SecureFolderFS.Sdk.EventArguments;
56
using SecureFolderFS.Shared.Models;
@@ -22,15 +23,15 @@ protected override async Task ProvideCredentialsAsync(CancellationToken cancella
2223
using var challenge = VaultHelpers.GenerateChallenge(VaultId);
2324

2425
// Write authentication data to the vault
25-
await vaultWriter.WriteAuthenticationAsync($"{Id}{Constants.Vault.Names.CONFIGURATION_EXTENSION}", new()
26+
await vaultWriter.WriteAuthenticationAsync<VaultChallengeDataModel>($"{Id}{Constants.Vault.Names.CONFIGURATION_EXTENSION}", new()
2627
{
2728
Capability = "supportsChallenge", // TODO: Put somewhere in Constants
2829
Challenge = challenge.Key
2930
}, cancellationToken);
3031

3132
try
3233
{
33-
var key = await CreateAsync(VaultId, challenge.Key, cancellationToken);
34+
var key = await EnrollAsync(VaultId, challenge.Key, cancellationToken);
3435
var tcs = new TaskCompletionSource();
3536
CredentialsProvided?.Invoke(this, new(key, tcs));
3637

src/Platforms/SecureFolderFS.Maui/Platforms/Android/ViewModels/AndroidBiometricLoginViewModel.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using OwlCore.Storage;
2+
using SecureFolderFS.Core.DataModels;
23
using SecureFolderFS.Core.VaultAccess;
34
using SecureFolderFS.Sdk.EventArguments;
45
using SecureFolderFS.Shared.Models;
@@ -17,7 +18,7 @@ internal sealed class AndroidBiometricLoginViewModel(IFolder vaultFolder, string
1718
protected override async Task ProvideCredentialsAsync(CancellationToken cancellationToken)
1819
{
1920
var vaultReader = new VaultReader(VaultFolder, StreamSerializer.Instance);
20-
var auth = await vaultReader.ReadAuthenticationAsync($"{Id}{Core.Constants.Vault.Names.CONFIGURATION_EXTENSION}", cancellationToken);
21+
var auth = await vaultReader.ReadAuthenticationAsync<VaultChallengeDataModel>($"{Id}{Core.Constants.Vault.Names.CONFIGURATION_EXTENSION}", cancellationToken);
2122

2223
if (auth?.Challenge is null)
2324
{
@@ -28,7 +29,7 @@ protected override async Task ProvideCredentialsAsync(CancellationToken cancella
2829
try
2930
{
3031
// Ask for credentials
31-
var key = await SignAsync(VaultId, auth.Challenge, cancellationToken);
32+
var key = await AcquireAsync(VaultId, auth.Challenge, cancellationToken);
3233
var tcs = new TaskCompletionSource();
3334

3435
// Report that credentials were provided and new provision needs to be applied

src/Platforms/SecureFolderFS.Maui/Platforms/Android/ViewModels/AndroidBiometricViewModel.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public override Task RevokeAsync(string? id, CancellationToken cancellationToken
6161
}
6262

6363
/// <inheritdoc/>
64-
public override async Task<IKey> CreateAsync(string id, byte[]? data, CancellationToken cancellationToken = default)
64+
public override async Task<IKey> EnrollAsync(string id, byte[]? data, CancellationToken cancellationToken = default)
6565
{
6666
ArgumentNullException.ThrowIfNull(data);
6767
var keyStore = KeyStore.GetInstance(KEYSTORE_PROVIDER);
@@ -89,7 +89,7 @@ public override async Task<IKey> CreateAsync(string id, byte[]? data, Cancellati
8989
}
9090

9191
/// <inheritdoc/>
92-
public override async Task<IKey> SignAsync(string id, byte[]? data, CancellationToken cancellationToken = default)
92+
public override async Task<IKey> AcquireAsync(string id, byte[]? data, CancellationToken cancellationToken = default)
9393
{
9494
ArgumentNullException.ThrowIfNull(data);
9595
var keyStore = KeyStore.GetInstance(KEYSTORE_PROVIDER);

src/Platforms/SecureFolderFS.Maui/SecureFolderFS.Maui.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@
125125
<PackageReference Include="Microsoft.Maui.Essentials" />
126126
<PackageReference Include="Plugin.Maui.BottomSheet" />
127127
<PackageReference Include="SkiaSharp" />
128+
<PackageReference Include="Xamarin.AndroidX.DocumentFile" />
128129
</ItemGroup>
129130

130131
<ItemGroup>

src/Platforms/SecureFolderFS.Maui/Views/Modals/BaseModalPage.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@
9797
<Grid
9898
x:Name="ButtonsGrid"
9999
Grid.Row="2"
100-
Padding="8"
100+
Padding="16,8"
101101
ColumnSpacing="8"
102102
HorizontalOptions="Fill"
103103
IsVisible="False">

src/Platforms/SecureFolderFS.Maui/Views/Modals/Wizard/MainWizardPage.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public async Task<IResult> ShowAsync()
5555
var navigationPage = new NavigationPage(this);
5656
#if ANDROID
5757
navigationPage.BackgroundColor = Color.FromArgb("#80000000");
58-
await _sourceNavigation.PushModalAsync(_navigationPage);
58+
await _sourceNavigation.PushModalAsync(navigationPage);
5959
#elif IOS
6060
NavigationPage.SetIconColor(navigationPage, Color.FromArgb("#007bff"));
6161
navigationPage.On<iOS>().SetModalPresentationStyle(UIModalPresentationStyle.PageSheet);

0 commit comments

Comments
 (0)