Compare commits
	
		
			2 Commits
		
	
	
		
			v1.12-r4
			...
			2837-impro
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					dbf10ba9fb | ||
| 
						 | 
					8e256ac94d | 
@@ -13,7 +13,7 @@ using Android.Content.PM;
 | 
			
		||||
using Android.OS;
 | 
			
		||||
using Android.Preferences;
 | 
			
		||||
using Java.IO;
 | 
			
		||||
 | 
			
		||||
using KeePass.Util;
 | 
			
		||||
using KeePassLib.Serialization;
 | 
			
		||||
using KeePassLib.Utility;
 | 
			
		||||
using File = System.IO.File;
 | 
			
		||||
@@ -121,7 +121,7 @@ namespace keepass2android.Io
 | 
			
		||||
			var response = ex.Response as HttpWebResponse;
 | 
			
		||||
			if ((response != null) && (response.StatusCode == HttpStatusCode.NotFound))
 | 
			
		||||
			{
 | 
			
		||||
				throw new FileNotFoundException(ex.Message, ioc.Path, ex);
 | 
			
		||||
				throw new FileNotFoundException(ExceptionUtil.GetErrorMessage(ex), ioc.Path, ex);
 | 
			
		||||
			}
 | 
			
		||||
			if (ex.Status == WebExceptionStatus.TrustFailure)
 | 
			
		||||
			{
 | 
			
		||||
 
 | 
			
		||||
@@ -13,6 +13,7 @@ using Keepass2android.Javafilestorage;
 | 
			
		||||
#endif
 | 
			
		||||
using Exception = System.Exception;
 | 
			
		||||
using FileNotFoundException = Java.IO.FileNotFoundException;
 | 
			
		||||
using KeePass.Util;
 | 
			
		||||
 | 
			
		||||
namespace keepass2android.Io
 | 
			
		||||
{
 | 
			
		||||
@@ -42,7 +43,7 @@ namespace keepass2android.Io
 | 
			
		||||
			}
 | 
			
		||||
			catch (FileNotFoundException e)
 | 
			
		||||
			{
 | 
			
		||||
				throw new System.IO.FileNotFoundException(e.Message, e);
 | 
			
		||||
				throw new System.IO.FileNotFoundException(ExceptionUtil.GetErrorMessage(e), e);
 | 
			
		||||
			}
 | 
			
		||||
			catch (Java.Lang.Exception e)
 | 
			
		||||
			{
 | 
			
		||||
@@ -195,7 +196,7 @@ namespace keepass2android.Io
 | 
			
		||||
			}
 | 
			
		||||
			catch (FileNotFoundException e)
 | 
			
		||||
			{
 | 
			
		||||
				throw new System.IO.FileNotFoundException(e.Message, e);
 | 
			
		||||
				throw new System.IO.FileNotFoundException(ExceptionUtil.GetErrorMessage(e), e);
 | 
			
		||||
			}
 | 
			
		||||
			catch (Java.Lang.Exception e)
 | 
			
		||||
			{
 | 
			
		||||
@@ -214,7 +215,7 @@ namespace keepass2android.Io
 | 
			
		||||
			}
 | 
			
		||||
			catch (FileNotFoundException e)
 | 
			
		||||
			{
 | 
			
		||||
				throw new System.IO.FileNotFoundException(e.Message, e);
 | 
			
		||||
				throw new System.IO.FileNotFoundException(ExceptionUtil.GetErrorMessage(e), e);
 | 
			
		||||
			}
 | 
			
		||||
			catch (Java.Lang.Exception e)
 | 
			
		||||
			{
 | 
			
		||||
@@ -244,7 +245,7 @@ namespace keepass2android.Io
 | 
			
		||||
			}
 | 
			
		||||
			catch (FileNotFoundException e)
 | 
			
		||||
			{
 | 
			
		||||
				throw new System.IO.FileNotFoundException(e.Message, e);
 | 
			
		||||
				throw new System.IO.FileNotFoundException(ExceptionUtil.GetErrorMessage(e), e);
 | 
			
		||||
			}
 | 
			
		||||
			catch (Java.Lang.Exception e)
 | 
			
		||||
			{
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,7 @@ using Android.Content;
 | 
			
		||||
using Android.OS;
 | 
			
		||||
using FluentFTP;
 | 
			
		||||
using FluentFTP.Exceptions;
 | 
			
		||||
using KeePass.Util;
 | 
			
		||||
using KeePassLib;
 | 
			
		||||
using KeePassLib.Serialization;
 | 
			
		||||
using KeePassLib.Utility;
 | 
			
		||||
@@ -127,7 +128,7 @@ namespace keepass2android.Io
 | 
			
		||||
				var ftpEx = (FtpCommandException) exception;
 | 
			
		||||
 | 
			
		||||
				if (ftpEx.CompletionCode == "550")
 | 
			
		||||
					throw new FileNotFoundException(exception.Message, exception);
 | 
			
		||||
					throw new FileNotFoundException(ExceptionUtil.GetErrorMessage(exception), exception);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			return exception;
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@ using System.Reflection;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using Android.Content;
 | 
			
		||||
using Android.Util;
 | 
			
		||||
using KeePass.Util;
 | 
			
		||||
using keepass2android.Io.ItemLocation;
 | 
			
		||||
using KeePassLib.Serialization;
 | 
			
		||||
using KeePassLib.Utility;
 | 
			
		||||
@@ -522,10 +523,10 @@ namespace keepass2android.Io
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            if (e.IsMatch(GraphErrorCode.ItemNotFound.ToString()))
 | 
			
		||||
                return new FileNotFoundException(e.Message);
 | 
			
		||||
                return new FileNotFoundException(ExceptionUtil.GetErrorMessage(e));
 | 
			
		||||
            if (e.Message.Contains("\n\n404 : ")
 | 
			
		||||
            ) //hacky solution to check for not found. errorCode was null in my tests so I had to find a workaround.
 | 
			
		||||
                return new FileNotFoundException(e.Message);
 | 
			
		||||
                return new FileNotFoundException(ExceptionUtil.GetErrorMessage(e));
 | 
			
		||||
            return e;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -16,6 +16,12 @@ namespace keepass2android.Io
 | 
			
		||||
    /// </summary>
 | 
			
		||||
	public class OneDriveFileStorage: IFileStorage
 | 
			
		||||
	{
 | 
			
		||||
        public OneDriveFileStorage(IKp2aApp app)
 | 
			
		||||
        {
 | 
			
		||||
            _app = app;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private readonly IKp2aApp _app;
 | 
			
		||||
 | 
			
		||||
        public IEnumerable<string> SupportedProtocols
 | 
			
		||||
		{
 | 
			
		||||
@@ -26,10 +32,16 @@ namespace keepass2android.Io
 | 
			
		||||
            }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        private Exception GetDeprecatedMessage()
 | 
			
		||||
        string GetDeprecatedMessage()
 | 
			
		||||
        {
 | 
			
		||||
            return
 | 
			
		||||
                "You have opened your file through a deprecated Microsoft API. Please select Change database, Open Database and then select OneDrive again.";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private Exception GetDeprecatedException()
 | 
			
		||||
        {
 | 
			
		||||
            return new Exception(
 | 
			
		||||
                "You have opened your file through a deprecated Microsoft API. Please select Change database, Open Database and then select One Drive again.");
 | 
			
		||||
                GetDeprecatedMessage());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	    public bool UserShouldBackup
 | 
			
		||||
@@ -39,133 +51,132 @@ namespace keepass2android.Io
 | 
			
		||||
 | 
			
		||||
        public void Delete(IOConnectionInfo ioc)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            throw GetDeprecatedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool CheckForFileChangeFast(IOConnectionInfo ioc, string previousFileVersion)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            throw GetDeprecatedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string GetCurrentFileVersionFast(IOConnectionInfo ioc)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            throw GetDeprecatedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Stream OpenFileForRead(IOConnectionInfo ioc)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            throw GetDeprecatedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public IWriteTransaction OpenWriteTransaction(IOConnectionInfo ioc, bool useFileTransaction)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            throw GetDeprecatedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string GetFilenameWithoutPathAndExt(IOConnectionInfo ioc)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            throw GetDeprecatedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string GetFileExtension(IOConnectionInfo ioc)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            throw GetDeprecatedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool RequiresCredentials(IOConnectionInfo ioc)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void CreateDirectory(IOConnectionInfo ioc, string newDirName)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            throw GetDeprecatedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public IEnumerable<FileDescription> ListContents(IOConnectionInfo ioc)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            throw GetDeprecatedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public FileDescription GetFileDescription(IOConnectionInfo ioc)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            throw GetDeprecatedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool RequiresSetup(IOConnectionInfo ioConnection)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string IocToPath(IOConnectionInfo ioc)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            throw GetDeprecatedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void StartSelectFile(IFileStorageSetupInitiatorActivity activity, bool isForSave, int requestCode, string protocolId)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void PrepareFileUsage(IFileStorageSetupInitiatorActivity activity, IOConnectionInfo ioc, int requestCode,
 | 
			
		||||
            bool alwaysReturnSuccess)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            _app.ShowMessage(activity.Activity, GetDeprecatedMessage(), MessageSeverity.Error);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void PrepareFileUsage(Context ctx, IOConnectionInfo ioc)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnCreate(IFileStorageSetupActivity activity, Bundle savedInstanceState)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnResume(IFileStorageSetupActivity activity)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnStart(IFileStorageSetupActivity activity)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnActivityResult(IFileStorageSetupActivity activity, int requestCode, int resultCode, Intent data)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string GetDisplayName(IOConnectionInfo ioc)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            return "File using deprecated Microsoft API. Please update.";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string CreateFilePath(string parent, string newFilename)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            throw GetDeprecatedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public IOConnectionInfo GetParentPath(IOConnectionInfo ioc)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            throw GetDeprecatedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public IOConnectionInfo GetFilePath(IOConnectionInfo folderPath, string filename)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            throw GetDeprecatedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool IsPermanentLocation(IOConnectionInfo ioc)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            throw GetDeprecatedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool IsReadOnly(IOConnectionInfo ioc, OptionalOut<UiStringKey> reason = null)
 | 
			
		||||
        {
 | 
			
		||||
            throw GetDeprecatedMessage();
 | 
			
		||||
            throw GetDeprecatedException();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@ using Android.Content;
 | 
			
		||||
using Android.OS;
 | 
			
		||||
using Android.Widget;
 | 
			
		||||
using Java.Net;
 | 
			
		||||
using KeePass.Util;
 | 
			
		||||
using KeePassLib.Serialization;
 | 
			
		||||
using keepass2android.Io;
 | 
			
		||||
 | 
			
		||||
@@ -208,7 +209,7 @@ namespace keepass2android
 | 
			
		||||
					{
 | 
			
		||||
						return () =>
 | 
			
		||||
							{
 | 
			
		||||
								ShowErrorToast(_app.GetResourceString(UiStringKey.ErrorOcurred) + " " + e.Message);
 | 
			
		||||
								ShowErrorToast(_app.GetResourceString(UiStringKey.ErrorOcurred) + " " + ExceptionUtil.GetErrorMessage(e));
 | 
			
		||||
								ReturnCancel();
 | 
			
		||||
							};
 | 
			
		||||
					}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										25
									
								
								src/Kp2aBusinessLogic/Utils/ExceptionUtil.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								src/Kp2aBusinessLogic/Utils/ExceptionUtil.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace KeePass.Util
 | 
			
		||||
{
 | 
			
		||||
    public class ExceptionUtil
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        public static string GetErrorMessage(Exception e)
 | 
			
		||||
        {
 | 
			
		||||
            string errorMessage = e.Message;
 | 
			
		||||
            if (e is Java.Lang.Exception javaException)
 | 
			
		||||
            {
 | 
			
		||||
                errorMessage = javaException.LocalizedMessage ?? javaException.Message ?? errorMessage;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return errorMessage;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -5,6 +5,7 @@ using System.Security.Cryptography;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using Android.App;
 | 
			
		||||
using Android.Content;
 | 
			
		||||
using KeePass.Util;
 | 
			
		||||
using KeePassLib.Cryptography;
 | 
			
		||||
using KeePassLib.Serialization;
 | 
			
		||||
using KeePassLib.Utility;
 | 
			
		||||
@@ -65,7 +66,7 @@ namespace keepass2android
 | 
			
		||||
			}
 | 
			
		||||
			catch (Exception e)
 | 
			
		||||
			{
 | 
			
		||||
				Finish(false, e.Message);
 | 
			
		||||
				Finish(false, ExceptionUtil.GetErrorMessage(e));
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,7 @@ using Com.Keepassdroid.Database.Exception;
 | 
			
		||||
#endif
 | 
			
		||||
using Com.Keepassdroid.Database.Save;
 | 
			
		||||
using Java.Util;
 | 
			
		||||
using KeePass.Util;
 | 
			
		||||
using KeePassLib;
 | 
			
		||||
using KeePassLib.Cryptography;
 | 
			
		||||
using KeePassLib.Cryptography.Cipher;
 | 
			
		||||
@@ -82,14 +83,13 @@ namespace keepass2android
 | 
			
		||||
			catch (Java.IO.FileNotFoundException e)
 | 
			
		||||
			{
 | 
			
		||||
				throw new FileNotFoundException(
 | 
			
		||||
					e.Message, e);
 | 
			
		||||
                    ExceptionUtil.GetErrorMessage(e), e);
 | 
			
		||||
			}  
 | 
			
		||||
			catch (Java.Lang.Exception e)
 | 
			
		||||
			{
 | 
			
		||||
				if (e.Message == "Invalid key!")
 | 
			
		||||
					throw new InvalidCompositeKeyException();
 | 
			
		||||
				throw new Exception(e.LocalizedMessage ??
 | 
			
		||||
				e.Message ??
 | 
			
		||||
				throw new Exception(ExceptionUtil.GetErrorMessage(e) ??
 | 
			
		||||
                                                                  e.GetType().Name, e);
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ using Android.App;
 | 
			
		||||
using Android.Content;
 | 
			
		||||
using KeePassLib.Serialization;
 | 
			
		||||
using keepass2android.Io;
 | 
			
		||||
using KeePass.Util;
 | 
			
		||||
 | 
			
		||||
namespace keepass2android
 | 
			
		||||
{
 | 
			
		||||
@@ -109,7 +110,7 @@ namespace keepass2android
 | 
			
		||||
			catch (Exception e)
 | 
			
		||||
			{
 | 
			
		||||
                Kp2aLog.LogUnexpectedError(e);
 | 
			
		||||
				Finish(false, e.Message);
 | 
			
		||||
				Finish(false, ExceptionUtil.GetErrorMessage(e));
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -21,6 +21,7 @@ using System.Linq;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using Android.App;
 | 
			
		||||
using KeePass.Util;
 | 
			
		||||
using keepass2android.database.edit;
 | 
			
		||||
using KeePassLib;
 | 
			
		||||
using KeePassLib.Keys;
 | 
			
		||||
@@ -103,10 +104,10 @@ namespace keepass2android
 | 
			
		||||
			}
 | 
			
		||||
			catch (AggregateException e)
 | 
			
		||||
			{
 | 
			
		||||
				string message = e.Message;
 | 
			
		||||
				string message = ExceptionUtil.GetErrorMessage(e);
 | 
			
		||||
				foreach (var innerException in e.InnerExceptions)
 | 
			
		||||
				{
 | 
			
		||||
					message = innerException.Message;
 | 
			
		||||
					message = ExceptionUtil.GetErrorMessage(innerException);
 | 
			
		||||
					// Override the message shown with the last (hopefully most recent) inner exception
 | 
			
		||||
					Kp2aLog.LogUnexpectedError(innerException);
 | 
			
		||||
				}
 | 
			
		||||
@@ -116,14 +117,14 @@ namespace keepass2android
 | 
			
		||||
			catch (DuplicateUuidsException e)
 | 
			
		||||
			{
 | 
			
		||||
				Kp2aLog.Log(e.ToString());
 | 
			
		||||
				Finish(false, _app.GetResourceString(UiStringKey.DuplicateUuidsError) + " " + e.Message + _app.GetResourceString(UiStringKey.DuplicateUuidsErrorAdditional), false, Exception);
 | 
			
		||||
				Finish(false, _app.GetResourceString(UiStringKey.DuplicateUuidsError) + " " + ExceptionUtil.GetErrorMessage(e) + _app.GetResourceString(UiStringKey.DuplicateUuidsErrorAdditional), false, Exception);
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
			catch (Exception e)
 | 
			
		||||
			{
 | 
			
		||||
				if (!(e is InvalidCompositeKeyException))
 | 
			
		||||
					Kp2aLog.LogUnexpectedError(e);
 | 
			
		||||
				Finish(false, _app.GetResourceString(UiStringKey.ErrorOcurred) + " " + (e.Message ?? (e is FileNotFoundException ? _app.GetResourceString(UiStringKey.FileNotFound) :  "")), false, Exception);
 | 
			
		||||
				Finish(false, _app.GetResourceString(UiStringKey.ErrorOcurred) + " " + (ExceptionUtil.GetErrorMessage(e) ?? (e is FileNotFoundException ? _app.GetResourceString(UiStringKey.FileNotFound) :  "")), false, Exception);
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
 
 | 
			
		||||
@@ -29,6 +29,7 @@ using KeePassLib.Utility;
 | 
			
		||||
using keepass2android.Io;
 | 
			
		||||
using Debug = System.Diagnostics.Debug;
 | 
			
		||||
using Exception = System.Exception;
 | 
			
		||||
using KeePass.Util;
 | 
			
		||||
 | 
			
		||||
namespace keepass2android
 | 
			
		||||
{
 | 
			
		||||
@@ -187,7 +188,7 @@ namespace keepass2android
 | 
			
		||||
			}
 | 
			
		||||
*/
 | 
			
		||||
					Kp2aLog.LogUnexpectedError(e);
 | 
			
		||||
					Finish(false, e.Message);
 | 
			
		||||
					Finish(false, ExceptionUtil.GetErrorMessage(e));
 | 
			
		||||
					return;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
@@ -222,8 +223,8 @@ namespace keepass2android
 | 
			
		||||
						catch (Exception e)
 | 
			
		||||
						{
 | 
			
		||||
							Kp2aLog.LogUnexpectedError(e);
 | 
			
		||||
							Kp2aLog.Log("Error in worker thread of SaveDb: " + e);
 | 
			
		||||
							Finish(false, e.Message);
 | 
			
		||||
							Kp2aLog.Log("Error in worker thread of SaveDb: " + ExceptionUtil.GetErrorMessage(e));
 | 
			
		||||
							Finish(false, ExceptionUtil.GetErrorMessage(e));
 | 
			
		||||
						}
 | 
			
		||||
						
 | 
			
		||||
					});
 | 
			
		||||
@@ -233,7 +234,7 @@ namespace keepass2android
 | 
			
		||||
			{
 | 
			
		||||
				Kp2aLog.LogUnexpectedError(e);
 | 
			
		||||
				Kp2aLog.Log("Error starting worker thread of SaveDb: "+e);
 | 
			
		||||
				Finish(false, e.Message);
 | 
			
		||||
				Finish(false, ExceptionUtil.GetErrorMessage(e));
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ namespace keepass2android
 | 
			
		||||
			}
 | 
			
		||||
			catch (Exception e)
 | 
			
		||||
			{
 | 
			
		||||
				Finish(false, e.Message);
 | 
			
		||||
				Finish(false, Util.GetErrorMessage(e));
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -796,7 +796,7 @@ namespace keepass2android
 | 
			
		||||
	            {
 | 
			
		||||
	                App.Kp2a.ShowMessage(this,
 | 
			
		||||
	                    GetString(Resource.String.SaveAttachment_Failed, new Java.Lang.Object[] {filename})
 | 
			
		||||
	                    + exWrite.Message,  MessageSeverity.Error);
 | 
			
		||||
	                    + Util.GetErrorMessage(exWrite),  MessageSeverity.Error);
 | 
			
		||||
	                return null;
 | 
			
		||||
	            }
 | 
			
		||||
	            finally
 | 
			
		||||
@@ -1305,7 +1305,7 @@ namespace keepass2android
 | 
			
		||||
	            }
 | 
			
		||||
	            catch (Exception ex)
 | 
			
		||||
	            {
 | 
			
		||||
	                Finish(false, ex.Message);
 | 
			
		||||
	                Finish(false, Util.GetErrorMessage(ex));
 | 
			
		||||
	            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -715,7 +715,7 @@ namespace keepass2android
 | 
			
		||||
			}
 | 
			
		||||
			catch(Exception exAttach)
 | 
			
		||||
			{
 | 
			
		||||
				App.Kp2a.ShowMessage(this, GetString(Resource.String.AttachFailed)+" "+exAttach.Message,  MessageSeverity.Error);
 | 
			
		||||
				App.Kp2a.ShowMessage(this, GetString(Resource.String.AttachFailed)+" "+ Util.GetErrorMessage(exAttach),  MessageSeverity.Error);
 | 
			
		||||
			}
 | 
			
		||||
			State.EntryModified = true;
 | 
			
		||||
			PopulateBinaries();
 | 
			
		||||
@@ -1184,7 +1184,7 @@ namespace keepass2android
 | 
			
		||||
                    }))
 | 
			
		||||
                    .AddOnFailureListener(new FailureListener((e) =>
 | 
			
		||||
                    {
 | 
			
		||||
                        Console.WriteLine($"Scan failed: {e.Message}");
 | 
			
		||||
                        Console.WriteLine($"Scan failed: {Util.GetErrorMessage(e)}");
 | 
			
		||||
                    }));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -140,7 +140,7 @@ namespace keepass2android
 | 
			
		||||
				}
 | 
			
		||||
				catch (Exception ex)
 | 
			
		||||
				{
 | 
			
		||||
					Finish(false, ex.Message);
 | 
			
		||||
					Finish(false, Util.GetErrorMessage(ex));
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -128,7 +128,7 @@ namespace keepass2android
 | 
			
		||||
					catch (Exception e)
 | 
			
		||||
					{
 | 
			
		||||
						toastMsg = ctx.GetString(Resource.String.private_key_save_failed,
 | 
			
		||||
							new Java.Lang.Object[] { e.Message });
 | 
			
		||||
							new Java.Lang.Object[] { Util.GetErrorMessage(e)});
 | 
			
		||||
                        severity = MessageSeverity.Error;
 | 
			
		||||
 | 
			
		||||
                    }
 | 
			
		||||
 
 | 
			
		||||
@@ -543,7 +543,7 @@ namespace keepass2android
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception e) 
 | 
			
		||||
            {
 | 
			
		||||
				App.Kp2a.ShowMessage(this, e.Message,  MessageSeverity.Error);
 | 
			
		||||
				App.Kp2a.ShowMessage(this, Util.GetErrorMessage(e),  MessageSeverity.Error);
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			return password;
 | 
			
		||||
 
 | 
			
		||||
@@ -310,7 +310,7 @@ namespace keepass2android
 | 
			
		||||
		            catch (Exception e)
 | 
			
		||||
		            {
 | 
			
		||||
		                Kp2aLog.Log(e.ToString());
 | 
			
		||||
		                App.Kp2a.ShowMessage(this, "Error: " + e.Message,  MessageSeverity.Error);
 | 
			
		||||
		                App.Kp2a.ShowMessage(this, "Error: " + Util.GetErrorMessage(e),  MessageSeverity.Error);
 | 
			
		||||
		                return;
 | 
			
		||||
		            }
 | 
			
		||||
 | 
			
		||||
@@ -996,8 +996,12 @@ namespace keepass2android
 | 
			
		||||
			
 | 
			
		||||
			btn.PostDelayed(() =>
 | 
			
		||||
			{
 | 
			
		||||
                //fire
 | 
			
		||||
                //fire if everything else is ready
 | 
			
		||||
                if (FindViewById(Resource.Id.pass_ok).Enabled)
 | 
			
		||||
                {
 | 
			
		||||
                    OnOk(true);
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
			    FindViewById<EditText>(Resource.Id.password_edit).Enabled = true;
 | 
			
		||||
			}, 500);
 | 
			
		||||
 | 
			
		||||
@@ -1481,7 +1485,7 @@ namespace keepass2android
 | 
			
		||||
				catch (Exception e)
 | 
			
		||||
				{
 | 
			
		||||
					Kp2aLog.LogUnexpectedError(e);
 | 
			
		||||
					errorMessage = e.Message;
 | 
			
		||||
					errorMessage = Util.GetErrorMessage(e);
 | 
			
		||||
					return false;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
@@ -2269,7 +2273,7 @@ namespace keepass2android
 | 
			
		||||
				{
 | 
			
		||||
					Kp2aLog.LogUnexpectedError(e);
 | 
			
		||||
 | 
			
		||||
					ShowError( _act.GetString(Resource.String.ErrorUpdatingOtpAuxFile) + " " + e.Message);
 | 
			
		||||
					ShowError( _act.GetString(Resource.String.ErrorUpdatingOtpAuxFile) + " " + Util.GetErrorMessage(e));
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -121,7 +121,7 @@ namespace keepass2android
 | 
			
		||||
                
 | 
			
		||||
            } catch (Exception e)
 | 
			
		||||
			{
 | 
			
		||||
				App.Kp2a.ShowMessage(this, e.Message,  MessageSeverity.Error);
 | 
			
		||||
				App.Kp2a.ShowMessage(this, Util.GetErrorMessage(e),  MessageSeverity.Error);
 | 
			
		||||
				SetResult(Result.Canceled);
 | 
			
		||||
				Finish();
 | 
			
		||||
				return;
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,7 @@ namespace keepass2android
 | 
			
		||||
                catch (Exception e)
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
                    Finish(false, e.Message);
 | 
			
		||||
                    Finish(false, Util.GetErrorMessage(e));
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -37,10 +37,12 @@ using Android.Util;
 | 
			
		||||
using Android.Views.InputMethods;
 | 
			
		||||
using AndroidX.Core.View.InputMethod;
 | 
			
		||||
using Google.Android.Material.Dialog;
 | 
			
		||||
using KeePass.Util;
 | 
			
		||||
using keepass2android;
 | 
			
		||||
using KeePassLib;
 | 
			
		||||
using KeePassLib.Security;
 | 
			
		||||
using KeePassLib.Serialization;
 | 
			
		||||
using Org.Apache.Http.Util;
 | 
			
		||||
using Uri = Android.Net.Uri;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -198,6 +200,12 @@ namespace keepass2android
 | 
			
		||||
            ioc.CredSaveMode = (IOCredSaveMode)i.GetIntExtra(prefix + KeyServercredmode, (int)IOCredSaveMode.NoSave);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public static string GetErrorMessage(Exception e)
 | 
			
		||||
        {
 | 
			
		||||
            return ExceptionUtil.GetErrorMessage(e);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static Bitmap DrawableToBitmap(Drawable drawable)
 | 
			
		||||
        {
 | 
			
		||||
            Bitmap bitmap = null;
 | 
			
		||||
@@ -865,8 +873,6 @@ namespace keepass2android
 | 
			
		||||
 | 
			
		||||
            entry.Strings.Set(prefix + c, new ProtectedString(false, url));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -836,7 +836,7 @@ namespace keepass2android
 | 
			
		||||
							new DropboxAppFolderFileStorage(LocaleManager.LocalizedAppContext, this),
 | 
			
		||||
                            GoogleApiAvailability.Instance.IsGooglePlayServicesAvailable(LocaleManager.LocalizedAppContext)==ConnectionResult.Success ? new GoogleDriveFileStorage(LocaleManager.LocalizedAppContext, this) : null,
 | 
			
		||||
                            GoogleApiAvailability.Instance.IsGooglePlayServicesAvailable(LocaleManager.LocalizedAppContext)==ConnectionResult.Success ? new GoogleDriveAppDataFileStorage(LocaleManager.LocalizedAppContext, this) : null,
 | 
			
		||||
							new OneDriveFileStorage(),
 | 
			
		||||
							new OneDriveFileStorage(this),
 | 
			
		||||
						    new OneDrive2FullFileStorage(),
 | 
			
		||||
						    new OneDrive2MyFilesFileStorage(),
 | 
			
		||||
						    new OneDrive2AppFolderFileStorage(),
 | 
			
		||||
@@ -1044,7 +1044,7 @@ namespace keepass2android
 | 
			
		||||
 | 
			
		||||
		private string GetErrorMessageForFileStorageException(Exception e)
 | 
			
		||||
        {
 | 
			
		||||
			string errorMessage = e.Message;
 | 
			
		||||
            var errorMessage = Util.GetErrorMessage(e);
 | 
			
		||||
            if (e is OfflineModeException)
 | 
			
		||||
				errorMessage = GetResourceString(UiStringKey.InOfflineMode);
 | 
			
		||||
		    if (e is DocumentAccessRevokedException)
 | 
			
		||||
 
 | 
			
		||||
@@ -71,7 +71,7 @@ namespace keepass2android
 | 
			
		||||
			catch (Exception e)
 | 
			
		||||
			{
 | 
			
		||||
				if (errorMessageBuilder != null)
 | 
			
		||||
					errorMessageBuilder.Append(e.Message);
 | 
			
		||||
					errorMessageBuilder.Append(Util.GetErrorMessage(e));
 | 
			
		||||
				Kp2aLog.Log(e.ToString());
 | 
			
		||||
				return null;
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
@@ -487,7 +487,7 @@ namespace keepass2android
 | 
			
		||||
            catch (Exception e)
 | 
			
		||||
            {
 | 
			
		||||
                Kp2aLog.LogUnexpectedError(e);
 | 
			
		||||
                App.Kp2a.ShowMessage(this, "Error: " + e.Message,  MessageSeverity.Error);
 | 
			
		||||
                App.Kp2a.ShowMessage(this, "Error: " + Util.GetErrorMessage(e),  MessageSeverity.Error);
 | 
			
		||||
                Finish();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -142,7 +142,7 @@ namespace keepass2android.search
 | 
			
		||||
                }
 | 
			
		||||
            } catch (Exception e) {
 | 
			
		||||
				Kp2aLog.LogUnexpectedError(e);
 | 
			
		||||
				App.Kp2a.ShowMessage(this,e.Message,  MessageSeverity.Error);
 | 
			
		||||
				App.Kp2a.ShowMessage(this, Util.GetErrorMessage(e),  MessageSeverity.Error);
 | 
			
		||||
				Finish();
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
@@ -96,7 +96,7 @@ namespace keepass2android.search
 | 
			
		||||
            catch (Exception e)
 | 
			
		||||
            {
 | 
			
		||||
                Kp2aLog.LogUnexpectedError(e);
 | 
			
		||||
                App.Kp2a.ShowMessage(this, e.Message,  MessageSeverity.Error);
 | 
			
		||||
                App.Kp2a.ShowMessage(this, Util.GetErrorMessage(e),  MessageSeverity.Error);
 | 
			
		||||
                Finish();
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -156,7 +156,7 @@ namespace keepass2android.services.AutofillBase
 | 
			
		||||
                catch (Java.Lang.SecurityException e)
 | 
			
		||||
                {
 | 
			
		||||
                    Log.Warn(CommonUtil.Tag, "Security exception handling request");
 | 
			
		||||
                    callback.OnFailure(e.Message);
 | 
			
		||||
                    callback.OnFailure(Util.GetErrorMessage(e));
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
@@ -455,7 +455,7 @@ namespace keepass2android.services.AutofillBase
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception e)
 | 
			
		||||
            {
 | 
			
		||||
                callback.OnFailure(e.Message);   
 | 
			
		||||
                callback.OnFailure(Util.GetErrorMessage(e));   
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -261,7 +261,7 @@ namespace keepass2android
 | 
			
		||||
                    {
 | 
			
		||||
                        return () =>
 | 
			
		||||
                        {
 | 
			
		||||
                            App.Kp2a.ShowMessage(Activity, App.Kp2a.GetResourceString(UiStringKey.ErrorOcurred) + " " + e.Message,  MessageSeverity.Error);
 | 
			
		||||
                            App.Kp2a.ShowMessage(Activity, App.Kp2a.GetResourceString(UiStringKey.ErrorOcurred) + " " + Util.GetErrorMessage(e),  MessageSeverity.Error);
 | 
			
		||||
                        };
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
@@ -357,7 +357,7 @@ namespace keepass2android
 | 
			
		||||
                    {
 | 
			
		||||
                        return () =>
 | 
			
		||||
                        {
 | 
			
		||||
                            App.Kp2a.ShowMessage(Activity, App.Kp2a.GetResourceString(UiStringKey.ErrorOcurred) + " " + e.Message,  MessageSeverity.Error);
 | 
			
		||||
                            App.Kp2a.ShowMessage(Activity, App.Kp2a.GetResourceString(UiStringKey.ErrorOcurred) + " " + Util.GetErrorMessage(e),  MessageSeverity.Error);
 | 
			
		||||
                        };
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
@@ -628,7 +628,7 @@ namespace keepass2android
 | 
			
		||||
                            catch (Exception ex)
 | 
			
		||||
                            {
 | 
			
		||||
                                Kp2aLog.LogUnexpectedError(ex);
 | 
			
		||||
                                App.Kp2a.ShowMessage(LocaleManager.LocalizedAppContext, ex.Message,  MessageSeverity.Error);
 | 
			
		||||
                                App.Kp2a.ShowMessage(LocaleManager.LocalizedAppContext, Util.GetErrorMessage(ex),  MessageSeverity.Error);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    );
 | 
			
		||||
 
 | 
			
		||||
@@ -53,7 +53,7 @@ namespace keepass2android
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception ex)
 | 
			
		||||
                {
 | 
			
		||||
                    Finish(false, ex.Message);
 | 
			
		||||
                    Finish(false, Util.GetErrorMessage(ex));
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user