Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@
using System.Collections.Generic;
using Android.OS;
using System;
using static Xamarin.Essentials.Permissions;
using BrickController2.PlatformServices.Permission;

namespace BrickController2.Droid.PlatformServices.Permission
{
public class ReadWriteExternalStoragePermission : BasePlatformPermission, IReadWriteExternalStoragePermission
{
public override (string androidPermission, bool isRuntime)[] RequiredPermissions => new List<(string androidPermission, bool isRuntime)>
{
(Android.Manifest.Permission.ReadExternalStorage, true),
(Android.Manifest.Permission.WriteExternalStorage, true)
}.ToArray();
public override (string androidPermission, bool isRuntime)[] RequiredPermissions => ((int)Build.VERSION.SdkInt <= 32) ?
// Android API 32 and older - ask for permissions
new (string androidPermission, bool isRuntime)[]
{
(Android.Manifest.Permission.ReadExternalStorage, true),
(Android.Manifest.Permission.WriteExternalStorage, true)
} :
// Android API 33+ does not support permissions to external storage
// Let it be Granted (via empty permission list)
Array.Empty<(string androidPermission, bool isRuntime)>();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,18 @@ public bool IsPermissionGranted
}
}

public string SharedStorageDirectory
public string SharedStorageBaseDirectory
{
get
{
try
{
#pragma warning disable CS0618 // Type or member is obsolete
var storageDirectory = Environment.ExternalStorageDirectory?.AbsolutePath;
var storageDirectory = ((int)Build.VERSION.SdkInt <= 32) ?
// Android API 32 and older - keep backward compatible: /storage/emulated/0/
Environment.ExternalStorageDirectory?.AbsolutePath :
// Android API 33+ - use /storage/emulated/0/Documents
Environment.GetExternalStoragePublicDirectory(Environment.DirectoryDocuments)?.AbsolutePath;
var storageState = Environment.ExternalStorageState;
#pragma warning restore CS0618 // Type or member is obsolete

Expand All @@ -42,6 +46,28 @@ public string SharedStorageDirectory
return null;
}

return storageDirectory;
}
catch (Exception)
{
return null;
}
}
}

public string SharedStorageDirectory
{
get
{
try
{
var storageDirectory = SharedStorageBaseDirectory;

if (storageDirectory == null)
{
return null;
}

var bc2StorageDirectory = Path.Combine(storageDirectory, _brickController2SharedDirectory);

if (!Directory.Exists(bc2StorageDirectory))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.TRANSMIT_IR" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
<uses-feature android:name="android.hardware.bluetooth" android:required="true" />
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />
<application android:label="BrickController2.Android" android:icon="@mipmap/ic_launcher"></application>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@ public bool IsPermissionGranted
}
}

public string SharedStorageDirectory
public string SharedStorageDirectory => SharedStorageBaseDirectory;

public string SharedStorageBaseDirectory
{
get
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ public interface ISharedFileStorageService

bool IsPermissionGranted { get; set; }

string SharedStorageBaseDirectory { get; }

string SharedStorageDirectory { get; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ await _dialogService.ShowMessageBoxAsync(
_disappearingTokenSource.Token.ThrowIfCancellationRequested();
}

if (SharedFileStorageService.SharedStorageDirectory != null)
if (SharedFileStorageService.SharedStorageBaseDirectory != null)
{
var storagePermissionStatus = await _readWriteExternalStoragePermission.CheckStatusAsync();
if (storagePermissionStatus != PermissionStatus.Granted && !_isStoragePermissionRequested)
Expand Down