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)) { }