From 10c8d157f5e4f8f0f17c63a0c31883b41a823f0a Mon Sep 17 00:00:00 2001 From: Philipp Crocoll Date: Mon, 2 Apr 2018 17:02:09 +0200 Subject: [PATCH] request Read AND Write permissions in BuiltInFileStorage to be more compatible with Android O, also request storage permissions for GDrive to fix #265, even though this seems to be a workaround --- .../Io/BuiltInFileStorage.cs | 19 ++++-- .../Kp2aBusinessLogic.csproj | 61 ++++++++++++++++++- src/Kp2aBusinessLogic/packages.config | 10 +++ .../GoogleDriveFileStorage.java | 18 ++++-- .../Properties/AndroidManifest_net.xml | 4 +- 5 files changed, 98 insertions(+), 14 deletions(-) diff --git a/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs b/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs index 1743d415..45c8f8b5 100644 --- a/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs +++ b/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Globalization; using System.IO; +using System.Linq; using System.Net; using System.Security; @@ -10,10 +11,12 @@ using Android.App; using Android.Content; using Android.Content.PM; using Android.OS; +using Android.Support.V13.App; +using Android.Support.V4.App; using Java.IO; using KeePassLib.Serialization; using KeePassLib.Utility; - +using ActivityCompat = Android.Support.V13.App.ActivityCompat; using File = System.IO.File; using FileNotFoundException = System.IO.FileNotFoundException; using IOException = System.IO.IOException; @@ -258,10 +261,14 @@ namespace keepass2android.Io if (requiresPermission && (Build.VERSION.SdkInt >= BuildVersionCodes.M)) { - if (activity.Activity.CheckSelfPermission(Manifest.Permission.WriteExternalStorage) == + if ((activity.Activity.CheckSelfPermission(Manifest.Permission.WriteExternalStorage) == Permission.Denied) - { - activity.StartFileUsageProcess(ioc, requestCode, alwaysReturnSuccess); + || + (activity.Activity.CheckSelfPermission(Manifest.Permission.ReadExternalStorage) == + Permission.Denied)) + + { + activity.StartFileUsageProcess(ioc, requestCode, alwaysReturnSuccess); return; } } @@ -279,7 +286,7 @@ namespace keepass2android.Io public void OnCreate(IFileStorageSetupActivity fileStorageSetupActivity, Bundle savedInstanceState) { - ((Activity)fileStorageSetupActivity).RequestPermissions(new[] { Manifest.Permission.WriteExternalStorage }, 0); + Android.Support.V4.App.ActivityCompat.RequestPermissions(((Activity)fileStorageSetupActivity), new[] { Manifest.Permission.WriteExternalStorage, Manifest.Permission.ReadExternalStorage }, 0); } public void OnResume(IFileStorageSetupActivity activity) @@ -417,7 +424,7 @@ namespace keepass2android.Io public void OnRequestPermissionsResult(IFileStorageSetupActivity fileStorageSetupActivity, int requestCode, string[] permissions, Permission[] grantResults) { - fileStorageSetupActivity.State.PutBoolean(PermissionGrantedKey, grantResults[0] == Permission.Granted); + fileStorageSetupActivity.State.PutBoolean(PermissionGrantedKey, grantResults.All(res => res == Permission.Granted)); } } diff --git a/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj b/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj index 3edbdd4c..b58a74a8 100644 --- a/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj +++ b/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj @@ -14,7 +14,8 @@ Off v8.1 true - 06ffb71c + + true @@ -55,6 +56,36 @@ + + ..\packages\Xamarin.Android.Arch.Core.Common.1.0.0\lib\MonoAndroid80\Xamarin.Android.Arch.Core.Common.dll + + + ..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.0.1\lib\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Common.dll + + + ..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.0.0\lib\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Runtime.dll + + + ..\packages\Xamarin.Android.Support.Annotations.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.Annotations.dll + + + ..\packages\Xamarin.Android.Support.Compat.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.Compat.dll + + + ..\packages\Xamarin.Android.Support.Core.UI.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.Core.UI.dll + + + ..\packages\Xamarin.Android.Support.Core.Utils.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.Core.Utils.dll + + + ..\packages\Xamarin.Android.Support.Fragment.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.Fragment.dll + + + ..\packages\Xamarin.Android.Support.Media.Compat.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.Media.Compat.dll + + + ..\packages\Xamarin.Android.Support.v13.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.v13.dll + @@ -148,7 +179,35 @@ + + + + + + + Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}". + + + + + + + + + + + + + + + + + + + + +