diff --git a/src/AndroidFileChooserBinding/AndroidFileChooserBinding.csproj b/src/AndroidFileChooserBinding/AndroidFileChooserBinding.csproj
index e0dcff19..3b68e91f 100644
--- a/src/AndroidFileChooserBinding/AndroidFileChooserBinding.csproj
+++ b/src/AndroidFileChooserBinding/AndroidFileChooserBinding.csproj
@@ -52,11 +52,9 @@
-
- Jars\android-filechooser-release.aar
-
+
diff --git a/src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/WebDavStorage.java b/src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/WebDavStorage.java
index dd4149ae..398f08fe 100644
--- a/src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/WebDavStorage.java
+++ b/src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/WebDavStorage.java
@@ -71,9 +71,18 @@ public class WebDavStorage extends JavaFileStorageBase {
String scheme = filename.substring(0, filename.indexOf("://"));
filename = filename.substring(scheme.length() + 3);
- String userPwd = filename.substring(0, filename.indexOf('@'));
- ci.username = decode(userPwd.substring(0, userPwd.indexOf(":")));
- ci.password = decode(userPwd.substring(userPwd.indexOf(":") + 1));
+ int idxAt = filename.indexOf('@');
+ if (idxAt >= 0)
+ {
+ String userPwd = filename.substring(0, idxAt);
+ int idxColon = userPwd.indexOf(":");
+ if (idxColon >= 0);
+ {
+ ci.username = decode(userPwd.substring(0, idxColon));
+ ci.password = decode(userPwd.substring(idxColon + 1));
+ }
+ }
+
ci.URL = scheme + "://" +filename.substring(filename.indexOf('@') + 1);
return ci;
}
diff --git a/src/keepass2android/KeeAutoExec.cs b/src/keepass2android/KeeAutoExec.cs
index c11c590f..a4724c5a 100644
--- a/src/keepass2android/KeeAutoExec.cs
+++ b/src/keepass2android/KeeAutoExec.cs
@@ -335,9 +335,18 @@ namespace keepass2android
private static bool CheckFileExsts(IOConnectionInfo ioc)
{
+
try
{
var fileStorage = App.Kp2a.GetFileStorage(ioc);
+
+ //we're assuming that remote files always exist (if we have a file storage, i.e. we check after receiving a file storage)
+ //The SkipIfNotExists switch only makes sense for local files, because remote files either exist for all devices or none
+ //(Ok, there are exceptions like files available in a (W)LAN. But then we still have the device switch and caches.)
+ //We cannot use OpenFileForRead on remote storages because this method is called from the main thread.
+ if (!ioc.IsLocalFile())
+ return true;
+
using (var stream = fileStorage.OpenFileForRead(ioc))
{
}