diff --git a/src/KeePassLib2Android/KeePassLib2Android.csproj b/src/KeePassLib2Android/KeePassLib2Android.csproj
index 2097a03d..546adf81 100644
--- a/src/KeePassLib2Android/KeePassLib2Android.csproj
+++ b/src/KeePassLib2Android/KeePassLib2Android.csproj
@@ -20,7 +20,7 @@
full
False
bin\Debug
- DEBUG;EXCLUDE_TWOFISH;EXCLUDE_KEYBOARD;EXCLUDE_KEYTRANSFORM;INCLUDE_FILECHOOSER;INCLUDE_JAVAFILESTORAGE
+ DEBUG;EXCLUDE_TWOFISH;EXCLUDE_KEYBOARD;EXCLUDE_KEYTRANSFORM;EXCLUDE_FILECHOOSER;EXCLUDE_JAVAFILESTORAGE
prompt
4
False
diff --git a/src/KeePassLib2Android/Serialization/IOConnection.cs b/src/KeePassLib2Android/Serialization/IOConnection.cs
index c559c2b5..8bcf452f 100644
--- a/src/KeePassLib2Android/Serialization/IOConnection.cs
+++ b/src/KeePassLib2Android/Serialization/IOConnection.cs
@@ -317,7 +317,7 @@ namespace KeePassLib.Serialization
if ((ex.Response is HttpWebResponse) && (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.Unauthorized))
return CreateWebClient(ioc, true).OpenRead(new Uri(ioc.Path));
else
- throw ex;
+ throw;
}
}
@@ -369,7 +369,7 @@ namespace KeePassLib.Serialization
if ((ex.Response is HttpWebResponse) && (((HttpWebResponse) ex.Response).StatusCode == HttpStatusCode.Unauthorized))
uploadData(IOConnection.CreateWebClient(ioc, true));
else
- throw ex;
+ throw;
}
}
diff --git a/src/Kp2aBusinessLogic/IKp2aApp.cs b/src/Kp2aBusinessLogic/IKp2aApp.cs
index 1f35e232..c0d41952 100644
--- a/src/Kp2aBusinessLogic/IKp2aApp.cs
+++ b/src/Kp2aBusinessLogic/IKp2aApp.cs
@@ -78,5 +78,11 @@ namespace keepass2android
IFileStorage GetFileStorage(IOConnectionInfo iocInfo);
void TriggerReload(Context context);
+
+ ///
+ /// Handles a failed certificate validation. Returns true if the users wants to continue, false otherwise.
+ /// see http://msdn.microsoft.com/en-us/library/system.net.icertificatepolicy(v=vs.110).aspx
+ ///
+ bool OnServerCertificateError(int certificateProblem);
}
}
\ No newline at end of file
diff --git a/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs b/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs
index 1b0a94d2..cf467f10 100644
--- a/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs
+++ b/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs
@@ -3,8 +3,10 @@ using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Net;
+using System.Net.Security;
using Android.Content;
using Android.OS;
+using Java.Security.Cert;
using KeePassLib.Serialization;
using KeePassLib.Utility;
@@ -12,6 +14,56 @@ namespace keepass2android.Io
{
public class BuiltInFileStorage: IFileStorage
{
+ public enum CertificateProblem :long
+ {
+ CertEXPIRED = 0x800B0101,
+ CertVALIDITYPERIODNESTING = 0x800B0102,
+ CertROLE = 0x800B0103,
+ CertPATHLENCONST = 0x800B0104,
+ CertCRITICAL = 0x800B0105,
+ CertPURPOSE = 0x800B0106,
+ CertISSUERCHAINING = 0x800B0107,
+ CertMALFORMED = 0x800B0108,
+ CertUNTRUSTEDROOT = 0x800B0109,
+ CertCHAINING = 0x800B010A,
+ CertREVOKED = 0x800B010C,
+ CertUNTRUSTEDTESTROOT = 0x800B010D,
+ CertREVOCATION_FAILURE = 0x800B010E,
+ CertCN_NO_MATCH = 0x800B010F,
+ CertWRONG_USAGE = 0x800B0110,
+ CertUNTRUSTEDCA = 0x800B0112
+ }
+
+
+ private readonly IKp2aApp _app;
+
+ class CertificatePolicity: ICertificatePolicy
+ {
+ private readonly IKp2aApp _app;
+
+ public CertificatePolicity(IKp2aApp app)
+ {
+ _app = app;
+ }
+
+ public bool CheckValidationResult(ServicePoint srvPoint, System.Security.Cryptography.X509Certificates.X509Certificate certificate, WebRequest request,
+ int certificateProblem)
+ {
+ if (certificateProblem == 0) //ok
+ return true;
+ return _app.OnServerCertificateError(certificateProblem);
+ }
+ }
+
+
+ public BuiltInFileStorage(IKp2aApp app)
+ {
+ _app = app;
+ //use the obsolute CertificatePolicy because the ServerCertificateValidationCallback isn't called in Mono for Android (?)
+ ServicePointManager.CertificatePolicy = new CertificatePolicity(app);
+
+ }
+
public IEnumerable SupportedProtocols
{
get
@@ -68,26 +120,51 @@ namespace keepass2android.Io
}
catch (WebException ex)
{
- if ((ex.Response is HttpWebResponse) && (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound))
- {
- throw new FileNotFoundException(ex.Message, ioc.Path, ex);
- }
+ ConvertException(ioc, ex);
throw;
}
-
+ }
+
+ private void ConvertException(IOConnectionInfo ioc, WebException ex)
+ {
+ if ((ex.Response is HttpWebResponse) && (((HttpWebResponse) ex.Response).StatusCode == HttpStatusCode.NotFound))
+ {
+ throw new FileNotFoundException(ex.Message, ioc.Path, ex);
+ }
+ if (ex.Status == WebExceptionStatus.TrustFailure)
+ {
+ throw new Exception(_app.GetResourceString(UiStringKey.CertificateFailure), ex);
+ }
+ var inner1 = ex.InnerException as IOException;
+ if (inner1 != null)
+ {
+ var inner2 = inner1.InnerException;
+ if (inner2 != null)
+ {
+ if (inner2.Message.Contains("Invalid certificate received from server."))
+ {
+ throw new Exception(_app.GetResourceString(UiStringKey.CertificateFailure), ex);
+ }
+ }
+
+ }
}
public IWriteTransaction OpenWriteTransaction(IOConnectionInfo ioc, bool useFileTransaction)
{
- return new BuiltInFileTransaction(ioc, useFileTransaction);
+ return new BuiltInFileTransaction(ioc, useFileTransaction, this);
}
public class BuiltInFileTransaction : IWriteTransaction
{
+ private readonly IOConnectionInfo _ioc;
+ private readonly BuiltInFileStorage _fileStorage;
private readonly FileTransactionEx _transaction;
- public BuiltInFileTransaction(IOConnectionInfo ioc, bool useFileTransaction)
+ public BuiltInFileTransaction(IOConnectionInfo ioc, bool useFileTransaction, BuiltInFileStorage fileStorage)
{
+ _ioc = ioc;
+ _fileStorage = fileStorage;
_transaction = new FileTransactionEx(ioc, useFileTransaction);
}
@@ -98,12 +175,30 @@ namespace keepass2android.Io
public Stream OpenFile()
{
- return _transaction.OpenWrite();
+ try
+ {
+ return _transaction.OpenWrite();
+ }
+ catch (WebException ex)
+ {
+ _fileStorage.ConvertException(_ioc, ex);
+ throw;
+ }
+
}
public void CommitWrite()
{
- _transaction.CommitWrite();
+ try
+ {
+ _transaction.CommitWrite();
+ }
+ catch (WebException ex)
+ {
+ _fileStorage.ConvertException(_ioc, ex);
+ throw;
+ }
+
}
}
diff --git a/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj b/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj
index da1a4f78..9cbaf367 100644
--- a/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj
+++ b/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj
@@ -20,7 +20,7 @@
full
false
bin\Debug\
- TRACE;DEBUG;EXCLUDE_TWOFISH;EXCLUDE_KEYBOARD;EXCLUDE_KEYTRANSFORM;INCLUDE_FILECHOOSER;INCLUDE_JAVAFILESTORAGE
+ TRACE;DEBUG;EXCLUDE_TWOFISH;EXCLUDE_KEYBOARD;EXCLUDE_KEYTRANSFORM;EXCLUDE_FILECHOOSER;EXCLUDE_JAVAFILESTORAGE
prompt
4
@@ -44,6 +44,7 @@
+
diff --git a/src/Kp2aBusinessLogic/UiStringKey.cs b/src/Kp2aBusinessLogic/UiStringKey.cs
index e82281d3..9b2d59aa 100644
--- a/src/Kp2aBusinessLogic/UiStringKey.cs
+++ b/src/Kp2aBusinessLogic/UiStringKey.cs
@@ -46,6 +46,7 @@ namespace keepass2android
CannotMoveGroupHere,
ErrorOcurred,
SynchronizingOtpAuxFile,
- SavingOtpAuxFile
+ SavingOtpAuxFile,
+ CertificateFailure
}
}
\ No newline at end of file
diff --git a/src/Kp2aUnitTests/MainActivity.cs b/src/Kp2aUnitTests/MainActivity.cs
index 880cf121..0301706d 100644
--- a/src/Kp2aUnitTests/MainActivity.cs
+++ b/src/Kp2aUnitTests/MainActivity.cs
@@ -18,9 +18,9 @@ namespace Kp2aUnitTests
{
TestRunner runner = new TestRunner();
// Run all tests from this assembly
- runner.AddTests(Assembly.GetExecutingAssembly());
- //runner.AddTests(new List { typeof(TestSynchronizeCachedDatabase) });
- //runner.AddTests(typeof(TestSaveDbCached).GetMethod("TestLoadEditSaveWhenModified"));
+ //runner.AddTests(Assembly.GetExecutingAssembly());
+ //runner.AddTests(new List { typeof(TestSynchronizeCachedDatabase)});
+ runner.AddTests(typeof(TestLoadDb).GetMethod("LoadErrorWithCertificateTrustFailure"));
//runner.AddTests(new List { typeof(TestSaveDb) });
//runner.AddTests(new List { typeof(TestCachingFileStorage) });
diff --git a/src/Kp2aUnitTests/Resources/Resource.Designer.cs b/src/Kp2aUnitTests/Resources/Resource.Designer.cs
index c3d515fb..641b4a6a 100644
--- a/src/Kp2aUnitTests/Resources/Resource.Designer.cs
+++ b/src/Kp2aUnitTests/Resources/Resource.Designer.cs
@@ -2,7 +2,7 @@
//------------------------------------------------------------------------------
//
// Dieser Code wurde von einem Tool generiert.
-// Laufzeitversion:4.0.30319.18051
+// Laufzeitversion:4.0.30319.34003
//
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
diff --git a/src/Kp2aUnitTests/TestBase.cs b/src/Kp2aUnitTests/TestBase.cs
index 7bb04da3..7293fc9a 100644
--- a/src/Kp2aUnitTests/TestBase.cs
+++ b/src/Kp2aUnitTests/TestBase.cs
@@ -66,7 +66,7 @@ namespace Kp2aUnitTests
var app = CreateTestKp2aApp();
app.CreateNewDatabase();
bool loadSuccesful = false;
- LoadDb task = new LoadDb(app, new IOConnectionInfo() { Path = filename }, null, password, keyfile, new ActionOnFinish((success, message) =>
+ LoadDb task = new LoadDb(app, new IOConnectionInfo() { Path = filename }, null, CreateKey(password, keyfile), keyfile, new ActionOnFinish((success, message) =>
{
if (!success)
Kp2aLog.Log(message);
@@ -80,7 +80,20 @@ namespace Kp2aUnitTests
Assert.IsTrue(loadSuccesful);
return app;
}
-
+ protected static CompositeKey CreateKey(string password, string keyfile)
+ {
+ CompositeKey key = new CompositeKey();
+ key.AddUserKey(new KcpPassword(password));
+ if (!String.IsNullOrEmpty(keyfile))
+ key.AddUserKey(new KcpKeyFile(keyfile));
+ return key;
+ }
+ protected static CompositeKey CreateKey(string password)
+ {
+ CompositeKey key = new CompositeKey();
+ key.AddUserKey(new KcpPassword(password));
+ return key;
+ }
protected virtual TestKp2aApp CreateTestKp2aApp()
{
TestKp2aApp app = new TestKp2aApp();
diff --git a/src/Kp2aUnitTests/TestCachingFileStorage.cs b/src/Kp2aUnitTests/TestCachingFileStorage.cs
index 85d47c06..4c673d09 100644
--- a/src/Kp2aUnitTests/TestCachingFileStorage.cs
+++ b/src/Kp2aUnitTests/TestCachingFileStorage.cs
@@ -14,6 +14,12 @@ namespace Kp2aUnitTests
[TestClass]
class TestCachingFileStorage: TestBase
{
+ [TestInitialize]
+ public void InitTests()
+ {
+ TestFileStorage.Offline = false;
+ }
+
private TestFileStorage _testFileStorage;
private CachingFileStorage _fileStorage;
private static readonly string CachingTestFile = DefaultDirectory + "cachingTestFile.txt";
@@ -37,7 +43,7 @@ namespace Kp2aUnitTests
Assert.AreEqual(MemoryStreamToString(fileContents), _defaultCacheFileContents);
//let the base file storage go offline:
- _testFileStorage.Offline = true;
+ TestFileStorage.Offline = true;
//now try to read the file again:
MemoryStream fileContents2 = ReadToMemoryStream(_fileStorage, CachingTestFile);
@@ -98,7 +104,7 @@ namespace Kp2aUnitTests
_testCacheSupervisor.AssertSingleCall(TestCacheSupervisor.UpdatedCachedFileOnLoadId);
//let the base file storage go offline:
- _testFileStorage.Offline = true;
+ TestFileStorage.Offline = true;
//write something to the cache:
string newContent = "new content";
@@ -116,7 +122,7 @@ namespace Kp2aUnitTests
Assert.AreEqual(MemoryStreamToString(fileContents2), newContent);
//now go online and read again. This should trigger a sync and the modified data must be returned
- _testFileStorage.Offline = false;
+ TestFileStorage.Offline = false;
MemoryStream fileContents3 = ReadToMemoryStream(_fileStorage, CachingTestFile);
Assert.AreEqual(MemoryStreamToString(fileContents3), newContent);
@@ -141,7 +147,7 @@ namespace Kp2aUnitTests
_testCacheSupervisor.AssertSingleCall(TestCacheSupervisor.UpdatedCachedFileOnLoadId);
//let the base file storage go offline:
- _testFileStorage.Offline = true;
+ TestFileStorage.Offline = true;
//write something to the cache:
string newLocalContent = "new local content";
@@ -153,7 +159,7 @@ namespace Kp2aUnitTests
File.WriteAllText(CachingTestFile, "new remote content");
//go online again:
- _testFileStorage.Offline = false;
+ TestFileStorage.Offline = false;
//now try to read the file again:
MemoryStream fileContents2 = ReadToMemoryStream(_fileStorage, CachingTestFile);
@@ -231,7 +237,7 @@ namespace Kp2aUnitTests
private void SetupFileStorage()
{
- _testFileStorage = new TestFileStorage();
+ _testFileStorage = new TestFileStorage(new TestKp2aApp());
_testCacheSupervisor = new TestCacheSupervisor();
//_fileStorage = new CachingFileStorage(_testFileStorage, Application.Context.CacheDir.Path, _testCacheSupervisor);
_fileStorage = new CachingFileStorage(_testFileStorage, "/mnt/sdcard/kp2atest_cache", _testCacheSupervisor);
diff --git a/src/Kp2aUnitTests/TestFileStorage.cs b/src/Kp2aUnitTests/TestFileStorage.cs
index eff83b10..ef67480b 100644
--- a/src/Kp2aUnitTests/TestFileStorage.cs
+++ b/src/Kp2aUnitTests/TestFileStorage.cs
@@ -1,16 +1,23 @@
using System;
using System.Collections.Generic;
using System.IO;
+using Android.Content;
+using Android.OS;
using KeePassLib.Serialization;
+using keepass2android;
using keepass2android.Io;
namespace Kp2aUnitTests
{
internal class TestFileStorage: IFileStorage
{
- private BuiltInFileStorage _builtIn = new BuiltInFileStorage();
+ public TestFileStorage(IKp2aApp app)
+ {
+ _builtIn = new BuiltInFileStorage(app);
+ }
+ private BuiltInFileStorage _builtIn;
- public bool Offline { get; set; }
+ public static bool Offline { get; set; }
public IEnumerable SupportedProtocols { get { yield return "test"; } }
@@ -96,6 +103,11 @@ namespace Kp2aUnitTests
return _builtIn.RequiresCredentials(ioc);
}
+ public void CreateDirectory(IOConnectionInfo ioc, string newDirName)
+ {
+ throw new NotImplementedException();
+ }
+
public void CreateDirectory(IOConnectionInfo ioc)
{
throw new NotImplementedException();
@@ -110,5 +122,66 @@ namespace Kp2aUnitTests
{
throw new NotImplementedException();
}
+
+ public bool RequiresSetup(IOConnectionInfo ioConnection)
+ {
+ return false;
+ }
+
+ public string IocToPath(IOConnectionInfo ioc)
+ {
+ return ioc.Path;
+ }
+
+ public void StartSelectFile(IFileStorageSetupInitiatorActivity activity, bool isForSave, int requestCode, string protocolId)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void PrepareFileUsage(IFileStorageSetupInitiatorActivity activity, IOConnectionInfo ioc, int requestCode,
+ bool alwaysReturnSuccess)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void OnCreate(IFileStorageSetupActivity activity, Bundle savedInstanceState)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void OnResume(IFileStorageSetupActivity activity)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void OnStart(IFileStorageSetupActivity activity)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void OnActivityResult(IFileStorageSetupActivity activity, int requestCode, int resultCode, Intent data)
+ {
+ throw new NotImplementedException();
+ }
+
+ public string GetDisplayName(IOConnectionInfo ioc)
+ {
+ return ioc.Path;
+ }
+
+ public string CreateFilePath(string parent, string newFilename)
+ {
+ throw new NotImplementedException();
+ }
+
+ public IOConnectionInfo GetParentPath(IOConnectionInfo ioc)
+ {
+ throw new NotImplementedException();
+ }
+
+ public IOConnectionInfo GetFilePath(IOConnectionInfo folderPath, string filename)
+ {
+ throw new NotImplementedException();
+ }
}
}
\ No newline at end of file
diff --git a/src/Kp2aUnitTests/TestKp2aApp.cs b/src/Kp2aUnitTests/TestKp2aApp.cs
index 78a2fdd8..89e811c0 100644
--- a/src/Kp2aUnitTests/TestKp2aApp.cs
+++ b/src/Kp2aUnitTests/TestKp2aApp.cs
@@ -1,9 +1,11 @@
using System;
using System.Collections.Generic;
using System.IO;
+using System.Net.Security;
using Android.App;
using Android.Content;
using Android.OS;
+using KeePassLib.Keys;
using KeePassLib.Serialization;
using keepass2android;
using keepass2android.Io;
@@ -30,18 +32,27 @@ namespace Kp2aUnitTests
}
+ public virtual TestFileStorage TestFileStorage
+ {
+ get
+ {
+ if (_testFileStorage != null)
+ return _testFileStorage;
+ return (TestFileStorage) FileStorage;
+ }
+ set { _testFileStorage = value; }
+ }
+
public void LockDatabase(bool allowQuickUnlock = true)
{
throw new NotImplementedException();
}
- public void LoadDatabase(IOConnectionInfo ioConnectionInfo, MemoryStream memoryStream, string password, string keyFile,
+ public void LoadDatabase(IOConnectionInfo ioConnectionInfo, MemoryStream memoryStream, CompositeKey compKey,
ProgressDialogStatusLogger statusLogger)
{
- _db.LoadData(this, ioConnectionInfo, memoryStream, password, statusLogger);
-
+ _db.LoadData(this, ioConnectionInfo, memoryStream, compKey, statusLogger);
}
-
public Database GetDb()
{
return _db;
@@ -128,10 +139,11 @@ namespace Kp2aUnitTests
public bool TriggerReloadCalled;
+ private TestFileStorage _testFileStorage;
public TestKp2aApp()
{
- FileStorage = new BuiltInFileStorage();
+ FileStorage = new BuiltInFileStorage(this);
}
public void TriggerReload(Context ctx)
@@ -139,6 +151,16 @@ namespace Kp2aUnitTests
TriggerReloadCalled = true;
}
+ public bool OnServerCertificateError(int sslPolicyErrors)
+ {
+ ServerCertificateErrorCalled = true;
+ return ServerCertificateErrorResponse;
+ }
+
+ public bool ServerCertificateErrorResponse { get; set; }
+
+ protected bool ServerCertificateErrorCalled { get; set; }
+
public void SetYesNoCancelResult(YesNoCancelResult yesNoCancelResult)
{
_yesNoCancelResult = yesNoCancelResult;
diff --git a/src/Kp2aUnitTests/TestLoadDb.cs b/src/Kp2aUnitTests/TestLoadDb.cs
index dc3b8743..9d515d47 100644
--- a/src/Kp2aUnitTests/TestLoadDb.cs
+++ b/src/Kp2aUnitTests/TestLoadDb.cs
@@ -1,9 +1,7 @@
using System;
using System.IO;
using System.Linq;
-using System.Threading;
using Android.App;
-using Android.OS;
using KeePassLib.Serialization;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using keepass2android;
@@ -21,8 +19,10 @@ namespace Kp2aUnitTests
IKp2aApp app = new TestKp2aApp();
app.CreateNewDatabase();
bool loadSuccesful = false;
- LoadDb task = new LoadDb(app, new IOConnectionInfo() { Path = TestDbDirectory+filenameWithoutDir }, null,
- password, keyfile, new ActionOnFinish((success, message) =>
+ var key = CreateKey(password, keyfile);
+
+ LoadDb task = new LoadDb(app, new IOConnectionInfo { Path = TestDbDirectory+filenameWithoutDir }, null,
+ key, keyfile, new ActionOnFinish((success, message) =>
{
if (!success)
Android.Util.Log.Debug("KP2ATest", "error loading db: " + message);
@@ -40,6 +40,8 @@ namespace Kp2aUnitTests
Assert.AreEqual(2,app.GetDb().KpDatabase.RootGroup.Entries.Count());
}
+
+
[TestMethod]
public void TestLoadWithPasswordOnly()
@@ -74,11 +76,12 @@ namespace Kp2aUnitTests
public void LoadFromRemoteWithDomain()
{
var ioc = RemoteDomainIoc; //note: this property is defined in "TestLoadDbCredentials.cs" which is deliberately excluded from Git because the credentials are not public!
- IKp2aApp app = new TestKp2aApp();
+ var app = new TestKp2aApp();
+ app.ServerCertificateErrorResponse = true; //accept invalid cert
app.CreateNewDatabase();
bool loadSuccesful = false;
- LoadDb task = new LoadDb(app, ioc, null, "a", null, new ActionOnFinish((success, message) =>
+ LoadDb task = new LoadDb(app, ioc, null, CreateKey("a"), null, new ActionOnFinish((success, message) =>
{
if (!success)
Android.Util.Log.Debug("KP2ATest", "error loading db: " + message);
@@ -95,14 +98,69 @@ namespace Kp2aUnitTests
}
[TestMethod]
- public void LoadFromRemote1and1()
+ public void LoadErrorWithCertificateTrustFailure()
+ {
+ var ioc = RemoteCertFailureIoc; //note: this property is defined in "TestLoadDbCredentials.cs" which is deliberately excluded from Git because the credentials are not public!
+ var app = new TestKp2aApp();
+ app.ServerCertificateErrorResponse = false;
+ app.CreateNewDatabase();
+
+ bool loadSuccesful = false;
+ string theMessage = "";
+ LoadDb task = new LoadDb(app, ioc, null, CreateKey("test"), null, new ActionOnFinish((success, message) =>
+ {
+ if (!success)
+ Android.Util.Log.Debug("KP2ATest", "error loading db: " + message);
+ loadSuccesful = success;
+ theMessage = message;
+ })
+ );
+
+
+ ProgressTask pt = new ProgressTask(app, Application.Context, task);
+ Android.Util.Log.Debug("KP2ATest", "Running ProgressTask");
+ pt.Run();
+ pt.JoinWorkerThread();
+ Android.Util.Log.Debug("KP2ATest", "PT.run finished");
+ Assert.IsFalse(loadSuccesful, "database should not be loaded because invalid certificates are not accepted");
+ Assert.AreEqual(theMessage, UiStringKey.ErrorOcurred +" "+UiStringKey.CertificateFailure);
+
+ }
+
+ [TestMethod]
+ public void LoadWithAcceptedCertificateTrustFailure()
+ {
+ var ioc = RemoteCertFailureIoc; //note: this property is defined in "TestLoadDbCredentials.cs" which is deliberately excluded from Git because the credentials are not public!
+ var app = new TestKp2aApp();
+ app.ServerCertificateErrorResponse = true;
+ app.CreateNewDatabase();
+
+ bool loadSuccesful = false;
+ LoadDb task = new LoadDb(app, ioc, null, CreateKey("test"), null, new ActionOnFinish((success, message) =>
+ {
+ if (!success)
+ Android.Util.Log.Debug("KP2ATest", "error loading db: " + message);
+ loadSuccesful = success;
+ })
+ );
+ ProgressTask pt = new ProgressTask(app, Application.Context, task);
+ Android.Util.Log.Debug("KP2ATest", "Running ProgressTask");
+ pt.Run();
+ pt.JoinWorkerThread();
+ Android.Util.Log.Debug("KP2ATest", "PT.run finished");
+ Assert.IsTrue(loadSuccesful, "database should be loaded because invalid certificates are accepted");
+
+ }
+
+ [TestMethod]
+ public void LoadFromRemote1And1()
{
var ioc = RemoteIoc1and1; //note: this property is defined in "TestLoadDbCredentials.cs" which is deliberately excluded from Git because the credentials are not public!
IKp2aApp app = new TestKp2aApp();
app.CreateNewDatabase();
bool loadSuccesful = false;
- LoadDb task = new LoadDb(app, ioc, null, "test", null, new ActionOnFinish((success, message) =>
+ LoadDb task = new LoadDb(app, ioc, null, CreateKey("test"), null, new ActionOnFinish((success, message) =>
{
if (!success)
Android.Util.Log.Debug("KP2ATest", "error loading db: " + message);
@@ -120,7 +178,7 @@ namespace Kp2aUnitTests
[TestMethod]
- public void LoadFromRemote1and1NonExisting()
+ public void LoadFromRemote1And1NonExisting()
{
var ioc = RemoteIoc1and1NonExisting; //note: this property is defined in "TestLoadDbCredentials.cs" which is deliberately excluded from Git because the credentials are not public!
IKp2aApp app = new TestKp2aApp();
@@ -128,7 +186,7 @@ namespace Kp2aUnitTests
bool loadSuccesful = false;
bool gotError = false;
- LoadDb task = new LoadDb(app, ioc, null, "test", null, new ActionOnFinish((success, message) =>
+ LoadDb task = new LoadDb(app, ioc, null, CreateKey("test"), null, new ActionOnFinish((success, message) =>
{
if (!success)
{
@@ -148,7 +206,7 @@ namespace Kp2aUnitTests
}
[TestMethod]
- public void LoadFromRemote1and1WrongCredentials()
+ public void LoadFromRemote1And1WrongCredentials()
{
var ioc = RemoteIoc1and1WrongCredentials; //note: this property is defined in "TestLoadDbCredentials.cs" which is deliberately excluded from Git because the credentials are not public!
IKp2aApp app = new TestKp2aApp();
@@ -156,7 +214,7 @@ namespace Kp2aUnitTests
bool loadSuccesful = false;
bool gotError = false;
- LoadDb task = new LoadDb(app, ioc, null, "test", null, new ActionOnFinish((success, message) =>
+ LoadDb task = new LoadDb(app, ioc, null, CreateKey("test"), null, new ActionOnFinish((success, message) =>
{
if (!success)
{
@@ -179,7 +237,7 @@ namespace Kp2aUnitTests
[TestMethod]
public void FileNotFoundExceptionWithWebDav()
{
- var fileStorage = new BuiltInFileStorage();
+ var fileStorage = new BuiltInFileStorage(new TestKp2aApp());
//should work:
using (var stream = fileStorage.OpenFileForRead(RemoteIoc1and1))
diff --git a/src/Kp2aUnitTests/TestSaveDbCached.cs b/src/Kp2aUnitTests/TestSaveDbCached.cs
index d341818c..19881800 100644
--- a/src/Kp2aUnitTests/TestSaveDbCached.cs
+++ b/src/Kp2aUnitTests/TestSaveDbCached.cs
@@ -22,12 +22,12 @@ namespace Kp2aUnitTests
class TestSaveDbCached: TestBase
{
private TestCacheSupervisor _testCacheSupervisor = new TestCacheSupervisor();
- private TestFileStorage _testFileStorage = new TestFileStorage();
+
protected override TestKp2aApp CreateTestKp2aApp()
{
TestKp2aApp app = base.CreateTestKp2aApp();
- app.FileStorage = new CachingFileStorage(_testFileStorage, "/mnt/sdcard/kp2atest/cache/", _testCacheSupervisor);
+ app.FileStorage = new CachingFileStorage(new TestFileStorage(app), "/mnt/sdcard/kp2atest/cache/", _testCacheSupervisor);
return app;
}
diff --git a/src/Kp2aUnitTests/TestSynchronizeCachedDatabase.cs b/src/Kp2aUnitTests/TestSynchronizeCachedDatabase.cs
index 1e8aa792..abd7d18f 100644
--- a/src/Kp2aUnitTests/TestSynchronizeCachedDatabase.cs
+++ b/src/Kp2aUnitTests/TestSynchronizeCachedDatabase.cs
@@ -19,13 +19,20 @@ namespace Kp2aUnitTests
[TestClass]
internal class TestSynchronizeCachedDatabase : TestBase
{
+ [TestInitialize]
+ public void InitTests()
+ {
+ TestFileStorage.Offline = false;
+ }
+
private TestCacheSupervisor _testCacheSupervisor = new TestCacheSupervisor();
- private TestFileStorage _testFileStorage = new TestFileStorage();
protected override TestKp2aApp CreateTestKp2aApp()
{
TestKp2aApp app = base.CreateTestKp2aApp();
- app.FileStorage = new CachingFileStorage(_testFileStorage, "/mnt/sdcard/kp2atest/cache/", _testCacheSupervisor);
+ app.TestFileStorage = new TestFileStorage(app);
+
+ app.FileStorage = new CachingFileStorage(app.TestFileStorage, "/mnt/sdcard/kp2atest/cache/", _testCacheSupervisor);
return app;
}
@@ -58,7 +65,7 @@ namespace Kp2aUnitTests
Assert.AreEqual(resultMessage, app.GetResourceString(UiStringKey.FilesInSync));
//go offline:
- _testFileStorage.Offline = true;
+ TestFileStorage.Offline = true;
//sync when offline (->error)
Synchronize(app, out wasSuccessful, out resultMessage);
@@ -73,7 +80,7 @@ namespace Kp2aUnitTests
_testCacheSupervisor.AssertSingleCall(TestCacheSupervisor.CouldntSaveToRemoteId);
//go online again:
- _testFileStorage.Offline = false;
+ TestFileStorage.Offline = false;
//sync with local changes only (-> upload):
Synchronize(app, out wasSuccessful, out resultMessage);
@@ -81,10 +88,10 @@ namespace Kp2aUnitTests
Assert.AreEqual(resultMessage, app.GetResourceString(UiStringKey.SynchronizedDatabaseSuccessfully));
//ensure both files are identical and up to date now:
- _testFileStorage.Offline = true;
+ TestFileStorage.Offline = true;
var appOfflineLoaded = LoadDatabase(DefaultFilename, DefaultPassword, DefaultKeyfile);
_testCacheSupervisor.AssertSingleCall(TestCacheSupervisor.CouldntOpenFromRemoteId);
- _testFileStorage.Offline = false;
+ TestFileStorage.Offline = false;
var appRemoteLoaded = LoadDatabase(DefaultFilename, DefaultPassword, DefaultKeyfile);
_testCacheSupervisor.AssertSingleCall(TestCacheSupervisor.LoadedFromRemoteInSyncId);
@@ -92,6 +99,8 @@ namespace Kp2aUnitTests
AssertDatabasesAreEqual(app.GetDb().KpDatabase, appRemoteLoaded.GetDb().KpDatabase);
}
+
+
[TestMethod]
public void TestSyncWhenRemoteDeleted()
{
@@ -133,11 +142,11 @@ namespace Kp2aUnitTests
_testCacheSupervisor.AssertSingleCall(TestCacheSupervisor.LoadedFromRemoteInSyncId);
var app2 = LoadDatabase(DefaultFilename, DefaultPassword, DefaultKeyfile);
- app2.FileStorage = _testFileStorage; //give app2 direct access to the remote file
+ app2.FileStorage = app.TestFileStorage; //give app2 direct access to the remote file
_testCacheSupervisor.AssertSingleCall(TestCacheSupervisor.LoadedFromRemoteInSyncId);
//go offline:
- _testFileStorage.Offline = true;
+ TestFileStorage.Offline = true;
string resultMessage;
@@ -153,7 +162,7 @@ namespace Kp2aUnitTests
_testCacheSupervisor.AssertSingleCall(TestCacheSupervisor.CouldntSaveToRemoteId);
//go online again:
- _testFileStorage.Offline = false;
+ TestFileStorage.Offline = false;
//...and remote only for "app2":
SaveDatabase(app2);
diff --git a/src/keepass2android/Properties/AndroidManifest_net.xml b/src/keepass2android/Properties/AndroidManifest_net.xml
index 0418abea..42221f32 100644
--- a/src/keepass2android/Properties/AndroidManifest_net.xml
+++ b/src/keepass2android/Properties/AndroidManifest_net.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/src/keepass2android/Resources/Resource.designer.cs b/src/keepass2android/Resources/Resource.designer.cs
index c9d08cc3..c1a968a9 100644
--- a/src/keepass2android/Resources/Resource.designer.cs
+++ b/src/keepass2android/Resources/Resource.designer.cs
@@ -77,23 +77,29 @@ namespace keepass2android
public partial class Array
{
+ // aapt resource value: 0x7f0e0007
+ public const int AcceptAllServerCertificates_options = 2131623943;
+
// aapt resource value: 0x7f0e0002
- public const int clipboard_timeout_options = 2131623938;
+ public const int AcceptAllServerCertificates_values = 2131623938;
+
+ // aapt resource value: 0x7f0e0003
+ public const int clipboard_timeout_options = 2131623939;
// aapt resource value: 0x7f0e0000
public const int clipboard_timeout_values = 2131623936;
- // aapt resource value: 0x7f0e0004
- public const int cred_remember_modes = 2131623940;
+ // aapt resource value: 0x7f0e0005
+ public const int cred_remember_modes = 2131623941;
- // aapt resource value: 0x7f0e0003
- public const int list_size_options = 2131623939;
+ // aapt resource value: 0x7f0e0004
+ public const int list_size_options = 2131623940;
// aapt resource value: 0x7f0e0001
public const int list_size_values = 2131623937;
- // aapt resource value: 0x7f0e0005
- public const int password_modes = 2131623941;
+ // aapt resource value: 0x7f0e0006
+ public const int password_modes = 2131623942;
static Array()
{
@@ -3280,53 +3286,65 @@ namespace keepass2android
public partial class String
{
- // aapt resource value: 0x7f0800a1
- public const int AboutText = 2131230881;
+ // aapt resource value: 0x7f0800a3
+ public const int AboutText = 2131230883;
- // aapt resource value: 0x7f0801a8
- public const int AddingEntry = 2131231144;
+ // aapt resource value: 0x7f08009e
+ public const int AcceptAllServerCertificates_default = 2131230878;
- // aapt resource value: 0x7f0801a9
- public const int AddingGroup = 2131231145;
+ // aapt resource value: 0x7f080094
+ public const int AcceptAllServerCertificates_key = 2131230868;
+
+ // aapt resource value: 0x7f08018d
+ public const int AcceptAllServerCertificates_summary = 2131231117;
+
+ // aapt resource value: 0x7f08018c
+ public const int AcceptAllServerCertificates_title = 2131231116;
+
+ // aapt resource value: 0x7f0801ac
+ public const int AddingEntry = 2131231148;
+
+ // aapt resource value: 0x7f0801ad
+ public const int AddingGroup = 2131231149;
// aapt resource value: 0x7f080015
public const int ApplicationName = 2131230741;
- // aapt resource value: 0x7f08019e
- public const int AskDeletePermanentlyEntry = 2131231134;
-
- // aapt resource value: 0x7f08019f
- public const int AskDeletePermanentlyGroup = 2131231135;
-
- // aapt resource value: 0x7f0801a0
- public const int AskDeletePermanently_title = 2131231136;
+ // aapt resource value: 0x7f0801a2
+ public const int AskDeletePermanentlyEntry = 2131231138;
// aapt resource value: 0x7f0801a3
- public const int AskDiscardChanges = 2131231139;
+ public const int AskDeletePermanentlyGroup = 2131231139;
// aapt resource value: 0x7f0801a4
- public const int AskDiscardChanges_title = 2131231140;
+ public const int AskDeletePermanently_title = 2131231140;
- // aapt resource value: 0x7f080198
- public const int AskOverwriteBinary = 2131231128;
+ // aapt resource value: 0x7f0801a7
+ public const int AskDiscardChanges = 2131231143;
- // aapt resource value: 0x7f08019b
- public const int AskOverwriteBinary_no = 2131231131;
-
- // aapt resource value: 0x7f080199
- public const int AskOverwriteBinary_title = 2131231129;
-
- // aapt resource value: 0x7f08019a
- public const int AskOverwriteBinary_yes = 2131231130;
-
- // aapt resource value: 0x7f0801a2
- public const int AskReloadFile = 2131231138;
-
- // aapt resource value: 0x7f0801a1
- public const int AskReloadFile_title = 2131231137;
+ // aapt resource value: 0x7f0801a8
+ public const int AskDiscardChanges_title = 2131231144;
// aapt resource value: 0x7f08019c
- public const int AttachFailed = 2131231132;
+ public const int AskOverwriteBinary = 2131231132;
+
+ // aapt resource value: 0x7f08019f
+ public const int AskOverwriteBinary_no = 2131231135;
+
+ // aapt resource value: 0x7f08019d
+ public const int AskOverwriteBinary_title = 2131231133;
+
+ // aapt resource value: 0x7f08019e
+ public const int AskOverwriteBinary_yes = 2131231134;
+
+ // aapt resource value: 0x7f0801a6
+ public const int AskReloadFile = 2131231142;
+
+ // aapt resource value: 0x7f0801a5
+ public const int AskReloadFile_title = 2131231141;
+
+ // aapt resource value: 0x7f0801a0
+ public const int AttachFailed = 2131231136;
// aapt resource value: 0x7f080085
public const int BinaryDirectory_default = 2131230853;
@@ -3334,206 +3352,212 @@ namespace keepass2android
// aapt resource value: 0x7f080084
public const int BinaryDirectory_key = 2131230852;
- // aapt resource value: 0x7f080172
- public const int BinaryDirectory_summary = 2131231090;
+ // aapt resource value: 0x7f080174
+ public const int BinaryDirectory_summary = 2131231092;
- // aapt resource value: 0x7f080171
- public const int BinaryDirectory_title = 2131231089;
+ // aapt resource value: 0x7f080173
+ public const int BinaryDirectory_title = 2131231091;
- // aapt resource value: 0x7f0801cc
- public const int CannotMoveGroupHere = 2131231180;
-
- // aapt resource value: 0x7f080206
- public const int ChangeLog = 2131231238;
-
- // aapt resource value: 0x7f080205
- public const int ChangeLog_0_7 = 2131231237;
-
- // aapt resource value: 0x7f080203
- public const int ChangeLog_0_8 = 2131231235;
-
- // aapt resource value: 0x7f080202
- public const int ChangeLog_0_8_1 = 2131231234;
-
- // aapt resource value: 0x7f080201
- public const int ChangeLog_0_8_2 = 2131231233;
-
- // aapt resource value: 0x7f080200
- public const int ChangeLog_0_8_3 = 2131231232;
-
- // aapt resource value: 0x7f0801ff
- public const int ChangeLog_0_8_4 = 2131231231;
+ // aapt resource value: 0x7f0801d0
+ public const int CannotMoveGroupHere = 2131231184;
// aapt resource value: 0x7f0801fe
- public const int ChangeLog_0_8_5 = 2131231230;
+ public const int CertificateFailure = 2131231230;
// aapt resource value: 0x7f0801fd
- public const int ChangeLog_0_8_6 = 2131231229;
+ public const int CertificateWarning = 2131231229;
- // aapt resource value: 0x7f0801fc
- public const int ChangeLog_0_9 = 2131231228;
+ // aapt resource value: 0x7f08020c
+ public const int ChangeLog = 2131231244;
- // aapt resource value: 0x7f0801fb
- public const int ChangeLog_0_9_1 = 2131231227;
+ // aapt resource value: 0x7f08020b
+ public const int ChangeLog_0_7 = 2131231243;
- // aapt resource value: 0x7f0801fa
- public const int ChangeLog_0_9_2 = 2131231226;
+ // aapt resource value: 0x7f080209
+ public const int ChangeLog_0_8 = 2131231241;
+
+ // aapt resource value: 0x7f080208
+ public const int ChangeLog_0_8_1 = 2131231240;
+
+ // aapt resource value: 0x7f080207
+ public const int ChangeLog_0_8_2 = 2131231239;
+
+ // aapt resource value: 0x7f080206
+ public const int ChangeLog_0_8_3 = 2131231238;
+
+ // aapt resource value: 0x7f080205
+ public const int ChangeLog_0_8_4 = 2131231237;
// aapt resource value: 0x7f080204
- public const int ChangeLog_keptDonate = 2131231236;
+ public const int ChangeLog_0_8_5 = 2131231236;
- // aapt resource value: 0x7f0801f9
- public const int ChangeLog_title = 2131231225;
+ // aapt resource value: 0x7f080203
+ public const int ChangeLog_0_8_6 = 2131231235;
- // aapt resource value: 0x7f080094
- public const int CheckForFileChangesOnSave_key = 2131230868;
+ // aapt resource value: 0x7f080202
+ public const int ChangeLog_0_9 = 2131231234;
- // aapt resource value: 0x7f08018d
- public const int CheckForFileChangesOnSave_summary = 2131231117;
+ // aapt resource value: 0x7f080201
+ public const int ChangeLog_0_9_1 = 2131231233;
- // aapt resource value: 0x7f08018c
- public const int CheckForFileChangesOnSave_title = 2131231116;
+ // aapt resource value: 0x7f080200
+ public const int ChangeLog_0_9_2 = 2131231232;
- // aapt resource value: 0x7f0801bd
- public const int CheckingDatabaseForChanges = 2131231165;
+ // aapt resource value: 0x7f08020a
+ public const int ChangeLog_keptDonate = 2131231242;
- // aapt resource value: 0x7f0801b1
- public const int CheckingTargetFileForChanges = 2131231153;
+ // aapt resource value: 0x7f0801ff
+ public const int ChangeLog_title = 2131231231;
- // aapt resource value: 0x7f0800bd
- public const int ClearClipboard = 2131230909;
+ // aapt resource value: 0x7f080095
+ public const int CheckForFileChangesOnSave_key = 2131230869;
- // aapt resource value: 0x7f08018b
- public const int ClearOfflineCache_question = 2131231115;
+ // aapt resource value: 0x7f080191
+ public const int CheckForFileChangesOnSave_summary = 2131231121;
- // aapt resource value: 0x7f08018a
- public const int ClearOfflineCache_title = 2131231114;
+ // aapt resource value: 0x7f080190
+ public const int CheckForFileChangesOnSave_title = 2131231120;
- // aapt resource value: 0x7f080098
- public const int CopyToClipboardNotification_key = 2131230872;
+ // aapt resource value: 0x7f0801c1
+ public const int CheckingDatabaseForChanges = 2131231169;
- // aapt resource value: 0x7f0801bf
- public const int CouldNotLoadFromRemote = 2131231167;
+ // aapt resource value: 0x7f0801b5
+ public const int CheckingTargetFileForChanges = 2131231157;
- // aapt resource value: 0x7f0801be
- public const int CouldNotSaveToRemote = 2131231166;
+ // aapt resource value: 0x7f0800bf
+ public const int ClearClipboard = 2131230911;
- // aapt resource value: 0x7f0801ed
- public const int CouldntLoadOtpAuxFile = 2131231213;
+ // aapt resource value: 0x7f08018f
+ public const int ClearOfflineCache_question = 2131231119;
- // aapt resource value: 0x7f0801ee
- public const int CouldntLoadOtpAuxFile_Hint = 2131231214;
+ // aapt resource value: 0x7f08018e
+ public const int ClearOfflineCache_title = 2131231118;
- // aapt resource value: 0x7f0801f4
- public const int CouldntParseOtpSecret = 2131231220;
+ // aapt resource value: 0x7f080099
+ public const int CopyToClipboardNotification_key = 2131230873;
- // aapt resource value: 0x7f0800a2
- public const int CreditsText = 2131230882;
+ // aapt resource value: 0x7f0801c3
+ public const int CouldNotLoadFromRemote = 2131231171;
+
+ // aapt resource value: 0x7f0801c2
+ public const int CouldNotSaveToRemote = 2131231170;
+
+ // aapt resource value: 0x7f0801f1
+ public const int CouldntLoadOtpAuxFile = 2131231217;
+
+ // aapt resource value: 0x7f0801f2
+ public const int CouldntLoadOtpAuxFile_Hint = 2131231218;
+
+ // aapt resource value: 0x7f0801f8
+ public const int CouldntParseOtpSecret = 2131231224;
+
+ // aapt resource value: 0x7f0800a4
+ public const int CreditsText = 2131230884;
+
+ // aapt resource value: 0x7f0801b3
+ public const int DecodingDatabase = 2131231155;
+
+ // aapt resource value: 0x7f0801ae
+ public const int DeletingEntry = 2131231150;
// aapt resource value: 0x7f0801af
- public const int DecodingDatabase = 2131231151;
+ public const int DeletingGroup = 2131231151;
- // aapt resource value: 0x7f0801aa
- public const int DeletingEntry = 2131231146;
+ // aapt resource value: 0x7f0801bc
+ public const int DownloadingRemoteFile = 2131231164;
- // aapt resource value: 0x7f0801ab
- public const int DeletingGroup = 2131231147;
+ // aapt resource value: 0x7f0801ce
+ public const int ErrorOcurred = 2131231182;
- // aapt resource value: 0x7f0801b8
- public const int DownloadingRemoteFile = 2131231160;
+ // aapt resource value: 0x7f0801fa
+ public const int ErrorUpdatingOtpAuxFile = 2131231226;
- // aapt resource value: 0x7f0801ca
- public const int ErrorOcurred = 2131231178;
-
- // aapt resource value: 0x7f0801f6
- public const int ErrorUpdatingOtpAuxFile = 2131231222;
-
- // aapt resource value: 0x7f0800ba
- public const int FileHandling_prefs = 2131230906;
+ // aapt resource value: 0x7f0800bc
+ public const int FileHandling_prefs = 2131230908;
// aapt resource value: 0x7f08008a
public const int FileHandling_prefs_key = 2131230858;
- // aapt resource value: 0x7f0800ef
- public const int FileNotFound = 2131230959;
+ // aapt resource value: 0x7f0800f1
+ public const int FileNotFound = 2131230961;
- // aapt resource value: 0x7f0801bb
- public const int FilesInSync = 2131231163;
+ // aapt resource value: 0x7f0801bf
+ public const int FilesInSync = 2131231167;
- // aapt resource value: 0x7f080100
- public const int InvalidPassword = 2131230976;
+ // aapt resource value: 0x7f080102
+ public const int InvalidPassword = 2131230978;
// aapt resource value: 0x7f080090
public const int LastInfoVersionCode_key = 2131230864;
- // aapt resource value: 0x7f0801c2
- public const int LoadedFromRemoteInSync = 2131231170;
+ // aapt resource value: 0x7f0801c6
+ public const int LoadedFromRemoteInSync = 2131231174;
// aapt resource value: 0x7f080092
public const int LockWhenScreenOff_key = 2131230866;
- // aapt resource value: 0x7f080187
- public const int LockWhenScreenOff_summary = 2131231111;
+ // aapt resource value: 0x7f080189
+ public const int LockWhenScreenOff_summary = 2131231113;
- // aapt resource value: 0x7f080186
- public const int LockWhenScreenOff_title = 2131231110;
+ // aapt resource value: 0x7f080188
+ public const int LockWhenScreenOff_title = 2131231112;
- // aapt resource value: 0x7f080095
- public const int MarketURL = 2131230869;
+ // aapt resource value: 0x7f080096
+ public const int MarketURL = 2131230870;
- // aapt resource value: 0x7f08010a
- public const int MaskedPassword = 2131230986;
+ // aapt resource value: 0x7f08010c
+ public const int MaskedPassword = 2131230988;
- // aapt resource value: 0x7f0801b3
- public const int MessageSyncQuestion = 2131231155;
+ // aapt resource value: 0x7f0801b7
+ public const int MessageSyncQuestion = 2131231159;
- // aapt resource value: 0x7f0801b6
- public const int NoOverwrite = 2131231158;
+ // aapt resource value: 0x7f0801ba
+ public const int NoOverwrite = 2131231162;
- // aapt resource value: 0x7f0801c1
- public const int NotifyOpenFromLocalDueToConflict = 2131231169;
+ // aapt resource value: 0x7f0801c5
+ public const int NotifyOpenFromLocalDueToConflict = 2131231173;
- // aapt resource value: 0x7f08009a
- public const int OpenKp2aKeyboardAutomatically_key = 2131230874;
-
- // aapt resource value: 0x7f080193
- public const int OpenKp2aKeyboardAutomatically_summary = 2131231123;
-
- // aapt resource value: 0x7f080192
- public const int OpenKp2aKeyboardAutomatically_title = 2131231122;
-
- // aapt resource value: 0x7f0801f5
- public const int OtpKeyError = 2131231221;
-
- // aapt resource value: 0x7f0801b0
- public const int ParsingDatabase = 2131231152;
-
- // aapt resource value: 0x7f08009e
- public const int PreloadDatabaseEnabled_key = 2131230878;
+ // aapt resource value: 0x7f08009b
+ public const int OpenKp2aKeyboardAutomatically_key = 2131230875;
// aapt resource value: 0x7f080197
- public const int PreloadDatabaseEnabled_summary = 2131231127;
+ public const int OpenKp2aKeyboardAutomatically_summary = 2131231127;
// aapt resource value: 0x7f080196
- public const int PreloadDatabaseEnabled_title = 2131231126;
+ public const int OpenKp2aKeyboardAutomatically_title = 2131231126;
+
+ // aapt resource value: 0x7f0801f9
+ public const int OtpKeyError = 2131231225;
+
+ // aapt resource value: 0x7f0801b4
+ public const int ParsingDatabase = 2131231156;
+
+ // aapt resource value: 0x7f0800a0
+ public const int PreloadDatabaseEnabled_key = 2131230880;
+
+ // aapt resource value: 0x7f08019b
+ public const int PreloadDatabaseEnabled_summary = 2131231131;
+
+ // aapt resource value: 0x7f08019a
+ public const int PreloadDatabaseEnabled_title = 2131231130;
// aapt resource value: 0x7f08008b
public const int QuickUnlockDefaultEnabled_key = 2131230859;
- // aapt resource value: 0x7f08016b
- public const int QuickUnlockDefaultEnabled_summary = 2131231083;
+ // aapt resource value: 0x7f08016d
+ public const int QuickUnlockDefaultEnabled_summary = 2131231085;
- // aapt resource value: 0x7f08016a
- public const int QuickUnlockDefaultEnabled_title = 2131231082;
+ // aapt resource value: 0x7f08016c
+ public const int QuickUnlockDefaultEnabled_title = 2131231084;
// aapt resource value: 0x7f08008e
public const int QuickUnlockIconHidden_key = 2131230862;
- // aapt resource value: 0x7f08016d
- public const int QuickUnlockIconHidden_summary = 2131231085;
+ // aapt resource value: 0x7f08016f
+ public const int QuickUnlockIconHidden_summary = 2131231087;
- // aapt resource value: 0x7f08016c
- public const int QuickUnlockIconHidden_title = 2131231084;
+ // aapt resource value: 0x7f08016e
+ public const int QuickUnlockIconHidden_title = 2131231086;
// aapt resource value: 0x7f08008d
public const int QuickUnlockLength_default = 2131230861;
@@ -3541,152 +3565,152 @@ namespace keepass2android
// aapt resource value: 0x7f08008c
public const int QuickUnlockLength_key = 2131230860;
- // aapt resource value: 0x7f08016f
- public const int QuickUnlockLength_summary = 2131231087;
-
- // aapt resource value: 0x7f08016e
- public const int QuickUnlockLength_title = 2131231086;
-
- // aapt resource value: 0x7f080168
- public const int QuickUnlock_button = 2131231080;
+ // aapt resource value: 0x7f080171
+ public const int QuickUnlockLength_summary = 2131231089;
// aapt resource value: 0x7f080170
- public const int QuickUnlock_fail = 2131231088;
+ public const int QuickUnlockLength_title = 2131231088;
- // aapt resource value: 0x7f080167
- public const int QuickUnlock_label = 2131231079;
+ // aapt resource value: 0x7f08016a
+ public const int QuickUnlock_button = 2131231082;
+
+ // aapt resource value: 0x7f080172
+ public const int QuickUnlock_fail = 2131231090;
// aapt resource value: 0x7f080169
- public const int QuickUnlock_lockButton = 2131231081;
+ public const int QuickUnlock_label = 2131231081;
- // aapt resource value: 0x7f0800b9
- public const int QuickUnlock_prefs = 2131230905;
+ // aapt resource value: 0x7f08016b
+ public const int QuickUnlock_lockButton = 2131231083;
+
+ // aapt resource value: 0x7f0800bb
+ public const int QuickUnlock_prefs = 2131230907;
// aapt resource value: 0x7f080089
public const int QuickUnlock_prefs_key = 2131230857;
- // aapt resource value: 0x7f08019d
- public const int RecycleBin = 2131231133;
+ // aapt resource value: 0x7f0801a1
+ public const int RecycleBin = 2131231137;
// aapt resource value: 0x7f080081
public const int RememberRecentFiles_key = 2131230849;
- // aapt resource value: 0x7f08015b
- public const int RememberRecentFiles_summary = 2131231067;
+ // aapt resource value: 0x7f08015d
+ public const int RememberRecentFiles_summary = 2131231069;
- // aapt resource value: 0x7f08015a
- public const int RememberRecentFiles_title = 2131231066;
+ // aapt resource value: 0x7f08015c
+ public const int RememberRecentFiles_title = 2131231068;
- // aapt resource value: 0x7f0801c4
- public const int RemoteDatabaseUnchanged = 2131231172;
+ // aapt resource value: 0x7f0801c8
+ public const int RemoteDatabaseUnchanged = 2131231176;
- // aapt resource value: 0x7f0801c6
- public const int ResolvedCacheConflictByUsingLocalOtpAux = 2131231174;
+ // aapt resource value: 0x7f0801ca
+ public const int ResolvedCacheConflictByUsingLocalOtpAux = 2131231178;
- // aapt resource value: 0x7f0801c5
- public const int ResolvedCacheConflictByUsingRemoteOtpAux = 2131231173;
+ // aapt resource value: 0x7f0801c9
+ public const int ResolvedCacheConflictByUsingRemoteOtpAux = 2131231177;
- // aapt resource value: 0x7f0801ba
- public const int RestoringRemoteFile = 2131231162;
-
- // aapt resource value: 0x7f080176
- public const int SaveAttachmentDialog_open = 2131231094;
-
- // aapt resource value: 0x7f080175
- public const int SaveAttachmentDialog_save = 2131231093;
-
- // aapt resource value: 0x7f080174
- public const int SaveAttachmentDialog_text = 2131231092;
-
- // aapt resource value: 0x7f080173
- public const int SaveAttachmentDialog_title = 2131231091;
+ // aapt resource value: 0x7f0801be
+ public const int RestoringRemoteFile = 2131231166;
// aapt resource value: 0x7f080178
- public const int SaveAttachment_Failed = 2131231096;
+ public const int SaveAttachmentDialog_open = 2131231096;
// aapt resource value: 0x7f080177
- public const int SaveAttachment_doneMessage = 2131231095;
+ public const int SaveAttachmentDialog_save = 2131231095;
- // aapt resource value: 0x7f0801f7
- public const int SavingOtpAuxFile = 2131231223;
+ // aapt resource value: 0x7f080176
+ public const int SaveAttachmentDialog_text = 2131231094;
- // aapt resource value: 0x7f0801ac
- public const int SettingPassword = 2131231148;
+ // aapt resource value: 0x7f080175
+ public const int SaveAttachmentDialog_title = 2131231093;
- // aapt resource value: 0x7f08018f
- public const int ShowCopyToClipboardNotification_summary = 2131231119;
+ // aapt resource value: 0x7f08017a
+ public const int SaveAttachment_Failed = 2131231098;
- // aapt resource value: 0x7f08018e
- public const int ShowCopyToClipboardNotification_title = 2131231118;
+ // aapt resource value: 0x7f080179
+ public const int SaveAttachment_doneMessage = 2131231097;
- // aapt resource value: 0x7f080191
- public const int ShowKp2aKeyboardNotification_summary = 2131231121;
+ // aapt resource value: 0x7f0801fb
+ public const int SavingOtpAuxFile = 2131231227;
- // aapt resource value: 0x7f080190
- public const int ShowKp2aKeyboardNotification_title = 2131231120;
+ // aapt resource value: 0x7f0801b0
+ public const int SettingPassword = 2131231152;
- // aapt resource value: 0x7f08009d
- public const int ShowUnlockedNotification_key = 2131230877;
+ // aapt resource value: 0x7f080193
+ public const int ShowCopyToClipboardNotification_summary = 2131231123;
+
+ // aapt resource value: 0x7f080192
+ public const int ShowCopyToClipboardNotification_title = 2131231122;
// aapt resource value: 0x7f080195
- public const int ShowUnlockedNotification_summary = 2131231125;
+ public const int ShowKp2aKeyboardNotification_summary = 2131231125;
// aapt resource value: 0x7f080194
- public const int ShowUnlockedNotification_title = 2131231124;
+ public const int ShowKp2aKeyboardNotification_title = 2131231124;
+
+ // aapt resource value: 0x7f08009f
+ public const int ShowUnlockedNotification_key = 2131230879;
+
+ // aapt resource value: 0x7f080199
+ public const int ShowUnlockedNotification_summary = 2131231129;
+
+ // aapt resource value: 0x7f080198
+ public const int ShowUnlockedNotification_title = 2131231128;
// aapt resource value: 0x7f080080
public const int ShowUsernameInList_key = 2131230848;
- // aapt resource value: 0x7f080159
- public const int ShowUsernameInList_summary = 2131231065;
+ // aapt resource value: 0x7f08015b
+ public const int ShowUsernameInList_summary = 2131231067;
- // aapt resource value: 0x7f080158
- public const int ShowUsernameInList_title = 2131231064;
+ // aapt resource value: 0x7f08015a
+ public const int ShowUsernameInList_title = 2131231066;
- // aapt resource value: 0x7f080096
- public const int SuggestionsURL = 2131230870;
+ // aapt resource value: 0x7f080097
+ public const int SuggestionsURL = 2131230871;
- // aapt resource value: 0x7f0801bc
- public const int SynchronizedDatabaseSuccessfully = 2131231164;
+ // aapt resource value: 0x7f0801c0
+ public const int SynchronizedDatabaseSuccessfully = 2131231168;
- // aapt resource value: 0x7f0801b7
- public const int SynchronizingCachedDatabase = 2131231159;
+ // aapt resource value: 0x7f0801bb
+ public const int SynchronizingCachedDatabase = 2131231163;
- // aapt resource value: 0x7f0801b4
- public const int SynchronizingDatabase = 2131231156;
+ // aapt resource value: 0x7f0801b8
+ public const int SynchronizingDatabase = 2131231160;
- // aapt resource value: 0x7f0801c7
- public const int SynchronizingOtpAuxFile = 2131231175;
+ // aapt resource value: 0x7f0801cb
+ public const int SynchronizingOtpAuxFile = 2131231179;
// aapt resource value: 0x7f08007f
public const int TanExpiresOnUse_key = 2131230847;
- // aapt resource value: 0x7f080157
- public const int TanExpiresOnUse_summary = 2131231063;
+ // aapt resource value: 0x7f080159
+ public const int TanExpiresOnUse_summary = 2131231065;
- // aapt resource value: 0x7f080156
- public const int TanExpiresOnUse_title = 2131231062;
+ // aapt resource value: 0x7f080158
+ public const int TanExpiresOnUse_title = 2131231064;
+
+ // aapt resource value: 0x7f0801b6
+ public const int TitleSyncQuestion = 2131231158;
// aapt resource value: 0x7f0801b2
- public const int TitleSyncQuestion = 2131231154;
+ public const int TransformingKey = 2131231154;
- // aapt resource value: 0x7f0801ae
- public const int TransformingKey = 2131231150;
+ // aapt resource value: 0x7f080098
+ public const int TranslationURL = 2131230872;
- // aapt resource value: 0x7f080097
- public const int TranslationURL = 2131230871;
+ // aapt resource value: 0x7f0801b1
+ public const int UndoingChanges = 2131231153;
- // aapt resource value: 0x7f0801ad
- public const int UndoingChanges = 2131231149;
+ // aapt resource value: 0x7f0801c7
+ public const int UpdatedCachedFileOnLoad = 2131231175;
- // aapt resource value: 0x7f0801c3
- public const int UpdatedCachedFileOnLoad = 2131231171;
+ // aapt resource value: 0x7f0801c4
+ public const int UpdatedRemoteFileOnLoad = 2131231172;
- // aapt resource value: 0x7f0801c0
- public const int UpdatedRemoteFileOnLoad = 2131231168;
-
- // aapt resource value: 0x7f0801b9
- public const int UploadingFile = 2131231161;
+ // aapt resource value: 0x7f0801bd
+ public const int UploadingFile = 2131231165;
// aapt resource value: 0x7f08008f
public const int UsageCount_key = 2131230863;
@@ -3694,26 +3718,26 @@ namespace keepass2android
// aapt resource value: 0x7f080091
public const int UseFileTransactions_key = 2131230865;
- // aapt resource value: 0x7f080185
- public const int UseFileTransactions_summary = 2131231109;
+ // aapt resource value: 0x7f080187
+ public const int UseFileTransactions_summary = 2131231111;
- // aapt resource value: 0x7f080184
- public const int UseFileTransactions_title = 2131231108;
+ // aapt resource value: 0x7f080186
+ public const int UseFileTransactions_title = 2131231110;
- // aapt resource value: 0x7f080099
- public const int UseKp2aKeyboard_key = 2131230873;
+ // aapt resource value: 0x7f08009a
+ public const int UseKp2aKeyboard_key = 2131230874;
// aapt resource value: 0x7f080093
public const int UseOfflineCache_key = 2131230867;
- // aapt resource value: 0x7f080189
- public const int UseOfflineCache_summary = 2131231113;
+ // aapt resource value: 0x7f08018b
+ public const int UseOfflineCache_summary = 2131231115;
- // aapt resource value: 0x7f080188
- public const int UseOfflineCache_title = 2131231112;
+ // aapt resource value: 0x7f08018a
+ public const int UseOfflineCache_title = 2131231114;
- // aapt resource value: 0x7f0801b5
- public const int YesSynchronize = 2131231157;
+ // aapt resource value: 0x7f0801b9
+ public const int YesSynchronize = 2131231161;
// aapt resource value: 0x7f080021
public const int abc_action_bar_home_description = 2131230753;
@@ -3754,32 +3778,32 @@ namespace keepass2android
// aapt resource value: 0x7f08002b
public const int abc_shareactionprovider_share_with_application = 2131230763;
- // aapt resource value: 0x7f08009f
- public const int about_feedback = 2131230879;
+ // aapt resource value: 0x7f0800a1
+ public const int about_feedback = 2131230881;
- // aapt resource value: 0x7f0800a0
- public const int about_homepage = 2131230880;
-
- // aapt resource value: 0x7f0800a3
- public const int accept = 2131230883;
-
- // aapt resource value: 0x7f08017e
- public const int add_binary = 2131231102;
-
- // aapt resource value: 0x7f0800a4
- public const int add_entry = 2131230884;
-
- // aapt resource value: 0x7f08017f
- public const int add_extra_string = 2131231103;
-
- // aapt resource value: 0x7f0800a6
- public const int add_group = 2131230886;
-
- // aapt resource value: 0x7f0800a7
- public const int add_group_title = 2131230887;
+ // aapt resource value: 0x7f0800a2
+ public const int about_homepage = 2131230882;
// aapt resource value: 0x7f0800a5
- public const int add_url_entry = 2131230885;
+ public const int accept = 2131230885;
+
+ // aapt resource value: 0x7f080180
+ public const int add_binary = 2131231104;
+
+ // aapt resource value: 0x7f0800a6
+ public const int add_entry = 2131230886;
+
+ // aapt resource value: 0x7f080181
+ public const int add_extra_string = 2131231105;
+
+ // aapt resource value: 0x7f0800a8
+ public const int add_group = 2131230888;
+
+ // aapt resource value: 0x7f0800a9
+ public const int add_group_title = 2131230889;
+
+ // aapt resource value: 0x7f0800a7
+ public const int add_url_entry = 2131230887;
// aapt resource value: 0x7f080067
public const int afc_bullet = 2131230823;
@@ -3961,11 +3985,11 @@ namespace keepass2android
// aapt resource value: 0x7f080066
public const int afc_yesterday = 2131230822;
- // aapt resource value: 0x7f0800a9
- public const int algorithm = 2131230889;
+ // aapt resource value: 0x7f0800ab
+ public const int algorithm = 2131230891;
- // aapt resource value: 0x7f0800aa
- public const int algorithm_colon = 2131230890;
+ // aapt resource value: 0x7f0800ac
+ public const int algorithm_colon = 2131230892;
// aapt resource value: 0x7f080073
public const int algorithm_key = 2131230835;
@@ -3973,26 +3997,26 @@ namespace keepass2android
// aapt resource value: 0x7f080074
public const int app_key = 2131230836;
- // aapt resource value: 0x7f0800ab
- public const int app_name = 2131230891;
-
// aapt resource value: 0x7f0800ad
- public const int app_name_nonet = 2131230893;
+ public const int app_name = 2131230893;
// aapt resource value: 0x7f0800af
- public const int app_timeout = 2131230895;
+ public const int app_name_nonet = 2131230895;
+
+ // aapt resource value: 0x7f0800b1
+ public const int app_timeout = 2131230897;
// aapt resource value: 0x7f080075
public const int app_timeout_key = 2131230837;
- // aapt resource value: 0x7f0800b0
- public const int app_timeout_summary = 2131230896;
+ // aapt resource value: 0x7f0800b2
+ public const int app_timeout_summary = 2131230898;
- // aapt resource value: 0x7f0800b4
- public const int application = 2131230900;
+ // aapt resource value: 0x7f0800b6
+ public const int application = 2131230902;
- // aapt resource value: 0x7f0800b5
- public const int application_settings = 2131230901;
+ // aapt resource value: 0x7f0800b7
+ public const int application_settings = 2131230903;
// aapt resource value: 0x7f080010
public const int auth_client_needs_enabling_title = 2131230736;
@@ -4012,38 +4036,38 @@ namespace keepass2android
// aapt resource value: 0x7f08000f
public const int auth_client_using_bad_version_title = 2131230735;
- // aapt resource value: 0x7f08014f
- public const int author = 2131231055;
+ // aapt resource value: 0x7f080151
+ public const int author = 2131231057;
- // aapt resource value: 0x7f0800c2
- public const int available_through_keyboard = 2131230914;
+ // aapt resource value: 0x7f0800c4
+ public const int available_through_keyboard = 2131230916;
- // aapt resource value: 0x7f0800bb
- public const int brackets = 2131230907;
+ // aapt resource value: 0x7f0800bd
+ public const int brackets = 2131230909;
- // aapt resource value: 0x7f0801e1
- public const int button_change_location = 2131231201;
+ // aapt resource value: 0x7f0801e5
+ public const int button_change_location = 2131231205;
- // aapt resource value: 0x7f0800bc
- public const int cancel = 2131230908;
+ // aapt resource value: 0x7f0800be
+ public const int cancel = 2131230910;
- // aapt resource value: 0x7f08015f
- public const int caseSensitive = 2131231071;
+ // aapt resource value: 0x7f080161
+ public const int caseSensitive = 2131231073;
// aapt resource value: 0x7f080018
public const int change_entry = 2131230744;
- // aapt resource value: 0x7f0800be
- public const int clipboard_timeout = 2131230910;
+ // aapt resource value: 0x7f0800c0
+ public const int clipboard_timeout = 2131230912;
- // aapt resource value: 0x7f08009b
- public const int clipboard_timeout_default = 2131230875;
+ // aapt resource value: 0x7f08009c
+ public const int clipboard_timeout_default = 2131230876;
// aapt resource value: 0x7f080077
public const int clipboard_timeout_key = 2131230839;
- // aapt resource value: 0x7f0800bf
- public const int clipboard_timeout_summary = 2131230911;
+ // aapt resource value: 0x7f0800c1
+ public const int clipboard_timeout_summary = 2131230913;
// aapt resource value: 0x7f080006
public const int common_google_play_services_enable_button = 2131230726;
@@ -4090,53 +4114,53 @@ namespace keepass2android
// aapt resource value: 0x7f08000e
public const int common_signin_button_text_long = 2131230734;
- // aapt resource value: 0x7f080154
- public const int contributors = 2131231060;
+ // aapt resource value: 0x7f080156
+ public const int contributors = 2131231062;
- // aapt resource value: 0x7f0800c1
- public const int copy_password = 2131230913;
+ // aapt resource value: 0x7f0800c3
+ public const int copy_password = 2131230915;
- // aapt resource value: 0x7f0800c0
- public const int copy_username = 2131230912;
+ // aapt resource value: 0x7f0800c2
+ public const int copy_username = 2131230914;
- // aapt resource value: 0x7f08012e
- public const int create_database = 2131231022;
-
- // aapt resource value: 0x7f0800c5
- public const int creating_db_key = 2131230917;
-
- // aapt resource value: 0x7f080183
- public const int credentials_dialog_title = 2131231107;
-
- // aapt resource value: 0x7f080152
- public const int credit_android_filechooser = 2131231058;
-
- // aapt resource value: 0x7f080151
- public const int credit_plugin1 = 2131231057;
-
- // aapt resource value: 0x7f0800c6
- public const int current_group = 2131230918;
+ // aapt resource value: 0x7f080130
+ public const int create_database = 2131231024;
// aapt resource value: 0x7f0800c7
- public const int current_group_root = 2131230919;
+ public const int creating_db_key = 2131230919;
+
+ // aapt resource value: 0x7f080185
+ public const int credentials_dialog_title = 2131231109;
+
+ // aapt resource value: 0x7f080154
+ public const int credit_android_filechooser = 2131231060;
+
+ // aapt resource value: 0x7f080153
+ public const int credit_plugin1 = 2131231059;
// aapt resource value: 0x7f0800c8
- public const int database = 2131230920;
+ public const int current_group = 2131230920;
- // aapt resource value: 0x7f0801c8
- public const int database_file = 2131231176;
+ // aapt resource value: 0x7f0800c9
+ public const int current_group_root = 2131230921;
- // aapt resource value: 0x7f080181
- public const int database_loaded_quickunlock_enabled = 2131231105;
+ // aapt resource value: 0x7f0800ca
+ public const int database = 2131230922;
- // aapt resource value: 0x7f080182
- public const int database_loaded_unlocked = 2131231106;
+ // aapt resource value: 0x7f0801cc
+ public const int database_file = 2131231180;
- // aapt resource value: 0x7f0801de
- public const int database_location = 2131231198;
+ // aapt resource value: 0x7f080183
+ public const int database_loaded_quickunlock_enabled = 2131231107;
- // aapt resource value: 0x7f080138
- public const int database_name = 2131231032;
+ // aapt resource value: 0x7f080184
+ public const int database_loaded_unlocked = 2131231108;
+
+ // aapt resource value: 0x7f0801e2
+ public const int database_location = 2131231202;
+
+ // aapt resource value: 0x7f08013a
+ public const int database_name = 2131231034;
// aapt resource value: 0x7f080083
public const int database_name_key = 2131230851;
@@ -4147,281 +4171,281 @@ namespace keepass2android
// aapt resource value: 0x7f08006a
public const int default_file_path = 2131230826;
- // aapt resource value: 0x7f080139
- public const int default_username = 2131231033;
+ // aapt resource value: 0x7f08013b
+ public const int default_username = 2131231035;
// aapt resource value: 0x7f080082
public const int default_username_key = 2131230850;
- // aapt resource value: 0x7f080180
- public const int delete_extra_string = 2131231104;
+ // aapt resource value: 0x7f080182
+ public const int delete_extra_string = 2131231106;
- // aapt resource value: 0x7f0800c9
- public const int digits = 2131230921;
+ // aapt resource value: 0x7f0800cb
+ public const int digits = 2131230923;
- // aapt resource value: 0x7f0800ca
- public const int disclaimer_formal = 2131230922;
+ // aapt resource value: 0x7f0800cc
+ public const int disclaimer_formal = 2131230924;
- // aapt resource value: 0x7f0800b7
- public const int display_prefs = 2131230903;
+ // aapt resource value: 0x7f0800b9
+ public const int display_prefs = 2131230905;
// aapt resource value: 0x7f080088
public const int display_prefs_key = 2131230856;
- // aapt resource value: 0x7f0801cd
- public const int donate_question = 2131231181;
+ // aapt resource value: 0x7f0801d1
+ public const int donate_question = 2131231185;
// aapt resource value: 0x7f08006b
public const int donate_url = 2131230827;
- // aapt resource value: 0x7f0800a8
- public const int edit_group_title = 2131230888;
-
- // aapt resource value: 0x7f0800cb
- public const int ellipsis = 2131230923;
-
- // aapt resource value: 0x7f080166
- public const int enable_quickunlock = 2131231078;
-
- // aapt resource value: 0x7f0800cc
- public const int enter_filename = 2131230924;
-
- // aapt resource value: 0x7f080165
- public const int enter_filename_details_create_import = 2131231077;
-
- // aapt resource value: 0x7f080164
- public const int enter_filename_details_url = 2131231076;
+ // aapt resource value: 0x7f0800aa
+ public const int edit_group_title = 2131230890;
// aapt resource value: 0x7f0800cd
- public const int entry_accessed = 2131230925;
+ public const int ellipsis = 2131230925;
- // aapt resource value: 0x7f0800dd
- public const int entry_binaries = 2131230941;
+ // aapt resource value: 0x7f080168
+ public const int enable_quickunlock = 2131231080;
// aapt resource value: 0x7f0800ce
- public const int entry_cancel = 2131230926;
+ public const int enter_filename = 2131230926;
+
+ // aapt resource value: 0x7f080167
+ public const int enter_filename_details_create_import = 2131231079;
+
+ // aapt resource value: 0x7f080166
+ public const int enter_filename_details_url = 2131231078;
// aapt resource value: 0x7f0800cf
- public const int entry_comment = 2131230927;
-
- // aapt resource value: 0x7f0800d2
- public const int entry_confpassword = 2131230930;
-
- // aapt resource value: 0x7f0800d3
- public const int entry_created = 2131230931;
-
- // aapt resource value: 0x7f0800d4
- public const int entry_expires = 2131230932;
-
- // aapt resource value: 0x7f0800dc
- public const int entry_extra_strings = 2131230940;
-
- // aapt resource value: 0x7f0800d5
- public const int entry_keyfile = 2131230933;
-
- // aapt resource value: 0x7f0800d6
- public const int entry_modified = 2131230934;
-
- // aapt resource value: 0x7f0800d1
- public const int entry_override_url = 2131230929;
-
- // aapt resource value: 0x7f0800d7
- public const int entry_password = 2131230935;
-
- // aapt resource value: 0x7f0800d8
- public const int entry_save = 2131230936;
-
- // aapt resource value: 0x7f0800d0
- public const int entry_tags = 2131230928;
-
- // aapt resource value: 0x7f0800d9
- public const int entry_title = 2131230937;
-
- // aapt resource value: 0x7f0800da
- public const int entry_url = 2131230938;
-
- // aapt resource value: 0x7f0800db
- public const int entry_user_name = 2131230939;
-
- // aapt resource value: 0x7f0801e9
- public const int error_adding_keyfile = 2131231209;
-
- // aapt resource value: 0x7f0800de
- public const int error_can_not_handle_uri = 2131230942;
+ public const int entry_accessed = 2131230927;
// aapt resource value: 0x7f0800df
- public const int error_could_not_create_group = 2131230943;
+ public const int entry_binaries = 2131230943;
+
+ // aapt resource value: 0x7f0800d0
+ public const int entry_cancel = 2131230928;
+
+ // aapt resource value: 0x7f0800d1
+ public const int entry_comment = 2131230929;
+
+ // aapt resource value: 0x7f0800d4
+ public const int entry_confpassword = 2131230932;
+
+ // aapt resource value: 0x7f0800d5
+ public const int entry_created = 2131230933;
+
+ // aapt resource value: 0x7f0800d6
+ public const int entry_expires = 2131230934;
+
+ // aapt resource value: 0x7f0800de
+ public const int entry_extra_strings = 2131230942;
+
+ // aapt resource value: 0x7f0800d7
+ public const int entry_keyfile = 2131230935;
+
+ // aapt resource value: 0x7f0800d8
+ public const int entry_modified = 2131230936;
+
+ // aapt resource value: 0x7f0800d3
+ public const int entry_override_url = 2131230931;
+
+ // aapt resource value: 0x7f0800d9
+ public const int entry_password = 2131230937;
+
+ // aapt resource value: 0x7f0800da
+ public const int entry_save = 2131230938;
+
+ // aapt resource value: 0x7f0800d2
+ public const int entry_tags = 2131230930;
+
+ // aapt resource value: 0x7f0800db
+ public const int entry_title = 2131230939;
+
+ // aapt resource value: 0x7f0800dc
+ public const int entry_url = 2131230940;
+
+ // aapt resource value: 0x7f0800dd
+ public const int entry_user_name = 2131230941;
+
+ // aapt resource value: 0x7f0801ed
+ public const int error_adding_keyfile = 2131231213;
// aapt resource value: 0x7f0800e0
- public const int error_could_not_create_parent = 2131230944;
+ public const int error_can_not_handle_uri = 2131230944;
// aapt resource value: 0x7f0800e1
- public const int error_database_exists = 2131230945;
+ public const int error_could_not_create_group = 2131230945;
// aapt resource value: 0x7f0800e2
- public const int error_database_settings = 2131230946;
+ public const int error_could_not_create_parent = 2131230946;
// aapt resource value: 0x7f0800e3
- public const int error_failed_to_launch_link = 2131230947;
-
- // aapt resource value: 0x7f0800e5
- public const int error_file_not_create = 2131230949;
+ public const int error_database_exists = 2131230947;
// aapt resource value: 0x7f0800e4
- public const int error_filename_required = 2131230948;
+ public const int error_database_settings = 2131230948;
- // aapt resource value: 0x7f0800e6
- public const int error_invalid_db = 2131230950;
-
- // aapt resource value: 0x7f080179
- public const int error_invalid_expiry_date = 2131231097;
+ // aapt resource value: 0x7f0800e5
+ public const int error_failed_to_launch_link = 2131230949;
// aapt resource value: 0x7f0800e7
- public const int error_invalid_path = 2131230951;
+ public const int error_file_not_create = 2131230951;
+
+ // aapt resource value: 0x7f0800e6
+ public const int error_filename_required = 2131230950;
// aapt resource value: 0x7f0800e8
- public const int error_no_name = 2131230952;
-
- // aapt resource value: 0x7f0800e9
- public const int error_nopass = 2131230953;
-
- // aapt resource value: 0x7f0800ea
- public const int error_pass_gen_type = 2131230954;
-
- // aapt resource value: 0x7f0800eb
- public const int error_pass_match = 2131230955;
-
- // aapt resource value: 0x7f0800ec
- public const int error_rounds_not_number = 2131230956;
-
- // aapt resource value: 0x7f08017a
- public const int error_string_key = 2131231098;
-
- // aapt resource value: 0x7f0800ed
- public const int error_title_required = 2131230957;
-
- // aapt resource value: 0x7f0800ee
- public const int error_wrong_length = 2131230958;
-
- // aapt resource value: 0x7f08015d
- public const int excludeExpiredEntries = 2131231069;
+ public const int error_invalid_db = 2131230952;
// aapt resource value: 0x7f08017b
- public const int field_name = 2131231099;
+ public const int error_invalid_expiry_date = 2131231099;
+
+ // aapt resource value: 0x7f0800e9
+ public const int error_invalid_path = 2131230953;
+
+ // aapt resource value: 0x7f0800ea
+ public const int error_no_name = 2131230954;
+
+ // aapt resource value: 0x7f0800eb
+ public const int error_nopass = 2131230955;
+
+ // aapt resource value: 0x7f0800ec
+ public const int error_pass_gen_type = 2131230956;
+
+ // aapt resource value: 0x7f0800ed
+ public const int error_pass_match = 2131230957;
+
+ // aapt resource value: 0x7f0800ee
+ public const int error_rounds_not_number = 2131230958;
// aapt resource value: 0x7f08017c
- public const int field_value = 2131231100;
+ public const int error_string_key = 2131231100;
+
+ // aapt resource value: 0x7f0800ef
+ public const int error_title_required = 2131230959;
// aapt resource value: 0x7f0800f0
- public const int file_browser = 2131230960;
+ public const int error_wrong_length = 2131230960;
+
+ // aapt resource value: 0x7f08015f
+ public const int excludeExpiredEntries = 2131231071;
+
+ // aapt resource value: 0x7f08017d
+ public const int field_name = 2131231101;
+
+ // aapt resource value: 0x7f08017e
+ public const int field_value = 2131231102;
+
+ // aapt resource value: 0x7f0800f2
+ public const int file_browser = 2131230962;
+
+ // aapt resource value: 0x7f0801e1
+ public const int filestorage_setup_title = 2131231201;
// aapt resource value: 0x7f0801dd
- public const int filestorage_setup_title = 2131231197;
-
- // aapt resource value: 0x7f0801d9
- public const int filestoragehelp_dropboxKP2A = 2131231193;
-
- // aapt resource value: 0x7f0801d2
- public const int filestoragename_androidget = 2131231186;
-
- // aapt resource value: 0x7f0801d3
- public const int filestoragename_androidsend = 2131231187;
-
- // aapt resource value: 0x7f0801d7
- public const int filestoragename_dropbox = 2131231191;
-
- // aapt resource value: 0x7f0801d8
- public const int filestoragename_dropboxKP2A = 2131231192;
-
- // aapt resource value: 0x7f0801d1
- public const int filestoragename_file = 2131231185;
-
- // aapt resource value: 0x7f0801d4
- public const int filestoragename_ftp = 2131231188;
-
- // aapt resource value: 0x7f0801da
- public const int filestoragename_gdrive = 2131231194;
-
- // aapt resource value: 0x7f0801d5
- public const int filestoragename_http = 2131231189;
+ public const int filestoragehelp_dropboxKP2A = 2131231197;
// aapt resource value: 0x7f0801d6
- public const int filestoragename_https = 2131231190;
+ public const int filestoragename_androidget = 2131231190;
- // aapt resource value: 0x7f0801dc
- public const int filestoragename_sftp = 2131231196;
+ // aapt resource value: 0x7f0801d7
+ public const int filestoragename_androidsend = 2131231191;
// aapt resource value: 0x7f0801db
- public const int filestoragename_skydrive = 2131231195;
+ public const int filestoragename_dropbox = 2131231195;
+
+ // aapt resource value: 0x7f0801dc
+ public const int filestoragename_dropboxKP2A = 2131231196;
+
+ // aapt resource value: 0x7f0801d5
+ public const int filestoragename_file = 2131231189;
+
+ // aapt resource value: 0x7f0801d8
+ public const int filestoragename_ftp = 2131231192;
+
+ // aapt resource value: 0x7f0801de
+ public const int filestoragename_gdrive = 2131231198;
+
+ // aapt resource value: 0x7f0801d9
+ public const int filestoragename_http = 2131231193;
+
+ // aapt resource value: 0x7f0801da
+ public const int filestoragename_https = 2131231194;
+
+ // aapt resource value: 0x7f0801e0
+ public const int filestoragename_sftp = 2131231200;
+
+ // aapt resource value: 0x7f0801df
+ public const int filestoragename_skydrive = 2131231199;
// aapt resource value: 0x7f08006e
public const int further_author_names = 2131230830;
- // aapt resource value: 0x7f080150
- public const int further_authors = 2131231056;
-
- // aapt resource value: 0x7f0800f1
- public const int generate_password = 2131230961;
-
- // aapt resource value: 0x7f0800f2
- public const int group = 2131230962;
-
- // aapt resource value: 0x7f0801df
- public const int help_database_location = 2131231199;
-
- // aapt resource value: 0x7f0801e6
- public const int help_key_file = 2131231206;
-
- // aapt resource value: 0x7f0801e3
- public const int help_master_password = 2131231203;
+ // aapt resource value: 0x7f080152
+ public const int further_authors = 2131231058;
// aapt resource value: 0x7f0800f3
- public const int hint_comment = 2131230963;
+ public const int generate_password = 2131230963;
// aapt resource value: 0x7f0800f4
- public const int hint_conf_pass = 2131230964;
+ public const int group = 2131230964;
- // aapt resource value: 0x7f0801e0
- public const int hint_database_location = 2131231200;
+ // aapt resource value: 0x7f0801e3
+ public const int help_database_location = 2131231203;
- // aapt resource value: 0x7f0800f5
- public const int hint_generated_password = 2131230965;
-
- // aapt resource value: 0x7f0800f6
- public const int hint_group_name = 2131230966;
+ // aapt resource value: 0x7f0801ea
+ public const int help_key_file = 2131231210;
// aapt resource value: 0x7f0801e7
- public const int hint_key_file = 2131231207;
+ public const int help_master_password = 2131231207;
- // aapt resource value: 0x7f0800f7
- public const int hint_keyfile = 2131230967;
+ // aapt resource value: 0x7f0800f5
+ public const int hint_comment = 2131230965;
- // aapt resource value: 0x7f0800f8
- public const int hint_length = 2131230968;
-
- // aapt resource value: 0x7f0800fa
- public const int hint_login_pass = 2131230970;
+ // aapt resource value: 0x7f0800f6
+ public const int hint_conf_pass = 2131230966;
// aapt resource value: 0x7f0801e4
- public const int hint_master_password = 2131231204;
+ public const int hint_database_location = 2131231204;
- // aapt resource value: 0x7f0800fd
- public const int hint_override_url = 2131230973;
+ // aapt resource value: 0x7f0800f7
+ public const int hint_generated_password = 2131230967;
+
+ // aapt resource value: 0x7f0800f8
+ public const int hint_group_name = 2131230968;
+
+ // aapt resource value: 0x7f0801eb
+ public const int hint_key_file = 2131231211;
// aapt resource value: 0x7f0800f9
- public const int hint_pass = 2131230969;
+ public const int hint_keyfile = 2131230969;
- // aapt resource value: 0x7f0800fe
- public const int hint_tags = 2131230974;
-
- // aapt resource value: 0x7f0800fb
- public const int hint_title = 2131230971;
+ // aapt resource value: 0x7f0800fa
+ public const int hint_length = 2131230970;
// aapt resource value: 0x7f0800fc
- public const int hint_url = 2131230972;
+ public const int hint_login_pass = 2131230972;
+
+ // aapt resource value: 0x7f0801e8
+ public const int hint_master_password = 2131231208;
// aapt resource value: 0x7f0800ff
- public const int hint_username = 2131230975;
+ public const int hint_override_url = 2131230975;
+
+ // aapt resource value: 0x7f0800fb
+ public const int hint_pass = 2131230971;
+
+ // aapt resource value: 0x7f080100
+ public const int hint_tags = 2131230976;
+
+ // aapt resource value: 0x7f0800fd
+ public const int hint_title = 2131230973;
+
+ // aapt resource value: 0x7f0800fe
+ public const int hint_url = 2131230974;
+
+ // aapt resource value: 0x7f080101
+ public const int hint_username = 2131230977;
// aapt resource value: 0x7f08006c
public const int homepage = 2131230828;
@@ -4435,38 +4459,38 @@ namespace keepass2android
// aapt resource value: 0x7f080016
public const int ime_name = 2131230742;
- // aapt resource value: 0x7f0801ea
- public const int init_otp = 2131231210;
+ // aapt resource value: 0x7f0801ee
+ public const int init_otp = 2131231214;
- // aapt resource value: 0x7f080146
- public const int insert_element_here = 2131231046;
+ // aapt resource value: 0x7f080148
+ public const int insert_element_here = 2131231048;
- // aapt resource value: 0x7f080101
- public const int invalid_algorithm = 2131230977;
+ // aapt resource value: 0x7f080103
+ public const int invalid_algorithm = 2131230979;
- // aapt resource value: 0x7f080102
- public const int invalid_db_sig = 2131230978;
+ // aapt resource value: 0x7f080104
+ public const int invalid_db_sig = 2131230980;
// aapt resource value: 0x7f08006f
public const int issues = 2131230831;
- // aapt resource value: 0x7f0801e5
- public const int key_file = 2131231205;
+ // aapt resource value: 0x7f0801e9
+ public const int key_file = 2131231209;
- // aapt resource value: 0x7f080103
- public const int keyfile_does_not_exist = 2131230979;
+ // aapt resource value: 0x7f080105
+ public const int keyfile_does_not_exist = 2131230981;
- // aapt resource value: 0x7f080104
- public const int keyfile_is_empty = 2131230980;
+ // aapt resource value: 0x7f080106
+ public const int keyfile_is_empty = 2131230982;
// aapt resource value: 0x7f08007a
public const int keyfile_key = 2131230842;
- // aapt resource value: 0x7f0800b1
- public const int kill_app_label = 2131230897;
+ // aapt resource value: 0x7f0800b3
+ public const int kill_app_label = 2131230899;
- // aapt resource value: 0x7f08015c
- public const int kp2a_findUrl = 2131231068;
+ // aapt resource value: 0x7f08015e
+ public const int kp2a_findUrl = 2131231070;
// aapt resource value: 0x7f08001b
public const int label_go_key = 2131230747;
@@ -4480,128 +4504,128 @@ namespace keepass2android
// aapt resource value: 0x7f08001e
public const int label_subtype_generic = 2131230750;
- // aapt resource value: 0x7f080105
- public const int length = 2131230981;
+ // aapt resource value: 0x7f080107
+ public const int length = 2131230983;
// aapt resource value: 0x7f08001f
public const int library_name = 2131230751;
- // aapt resource value: 0x7f08009c
- public const int list_size_default = 2131230876;
+ // aapt resource value: 0x7f08009d
+ public const int list_size_default = 2131230877;
// aapt resource value: 0x7f08007d
public const int list_size_key = 2131230845;
- // aapt resource value: 0x7f080107
- public const int list_size_summary = 2131230983;
-
- // aapt resource value: 0x7f080106
- public const int list_size_title = 2131230982;
-
- // aapt resource value: 0x7f0801f8
- public const int loading = 2131231224;
+ // aapt resource value: 0x7f080109
+ public const int list_size_summary = 2131230985;
// aapt resource value: 0x7f080108
- public const int loading_database = 2131230984;
+ public const int list_size_title = 2131230984;
- // aapt resource value: 0x7f080109
- public const int lowercase = 2131230985;
+ // aapt resource value: 0x7f0801fc
+ public const int loading = 2131231228;
+
+ // aapt resource value: 0x7f08010a
+ public const int loading_database = 2131230986;
+
+ // aapt resource value: 0x7f08010b
+ public const int lowercase = 2131230987;
// aapt resource value: 0x7f08007b
public const int maskpass_key = 2131230843;
- // aapt resource value: 0x7f08010c
- public const int maskpass_summary = 2131230988;
-
- // aapt resource value: 0x7f08010b
- public const int maskpass_title = 2131230987;
-
- // aapt resource value: 0x7f08012c
- public const int master_key_type = 2131231020;
-
- // aapt resource value: 0x7f0801e2
- public const int master_password = 2131231202;
+ // aapt resource value: 0x7f08010e
+ public const int maskpass_summary = 2131230990;
// aapt resource value: 0x7f08010d
- public const int menu_about = 2131230989;
+ public const int maskpass_title = 2131230989;
- // aapt resource value: 0x7f080112
- public const int menu_app_settings = 2131230994;
+ // aapt resource value: 0x7f08012e
+ public const int master_key_type = 2131231022;
- // aapt resource value: 0x7f08011f
- public const int menu_change_db = 2131231007;
-
- // aapt resource value: 0x7f08010e
- public const int menu_change_key = 2131230990;
+ // aapt resource value: 0x7f0801e6
+ public const int master_password = 2131231206;
// aapt resource value: 0x7f08010f
- public const int menu_copy_pass = 2131230991;
-
- // aapt resource value: 0x7f080110
- public const int menu_copy_user = 2131230992;
-
- // aapt resource value: 0x7f080111
- public const int menu_create = 2131230993;
-
- // aapt resource value: 0x7f080113
- public const int menu_db_settings = 2131230995;
+ public const int menu_about = 2131230991;
// aapt resource value: 0x7f080114
- public const int menu_delete = 2131230996;
-
- // aapt resource value: 0x7f080116
- public const int menu_donate = 2131230998;
-
- // aapt resource value: 0x7f080117
- public const int menu_edit = 2131230999;
-
- // aapt resource value: 0x7f080118
- public const int menu_hide_password = 2131231000;
-
- // aapt resource value: 0x7f080119
- public const int menu_lock = 2131231001;
-
- // aapt resource value: 0x7f080115
- public const int menu_move = 2131230997;
-
- // aapt resource value: 0x7f08011a
- public const int menu_open = 2131231002;
-
- // aapt resource value: 0x7f08011b
- public const int menu_rename = 2131231003;
-
- // aapt resource value: 0x7f08011c
- public const int menu_search = 2131231004;
-
- // aapt resource value: 0x7f08011d
- public const int menu_search_advanced = 2131231005;
-
- // aapt resource value: 0x7f08011e
- public const int menu_url = 2131231006;
-
- // aapt resource value: 0x7f080120
- public const int minus = 2131231008;
+ public const int menu_app_settings = 2131230996;
// aapt resource value: 0x7f080121
- public const int never = 2131231009;
+ public const int menu_change_db = 2131231009;
+
+ // aapt resource value: 0x7f080110
+ public const int menu_change_key = 2131230992;
+
+ // aapt resource value: 0x7f080111
+ public const int menu_copy_pass = 2131230993;
+
+ // aapt resource value: 0x7f080112
+ public const int menu_copy_user = 2131230994;
+
+ // aapt resource value: 0x7f080113
+ public const int menu_create = 2131230995;
+
+ // aapt resource value: 0x7f080115
+ public const int menu_db_settings = 2131230997;
+
+ // aapt resource value: 0x7f080116
+ public const int menu_delete = 2131230998;
+
+ // aapt resource value: 0x7f080118
+ public const int menu_donate = 2131231000;
+
+ // aapt resource value: 0x7f080119
+ public const int menu_edit = 2131231001;
+
+ // aapt resource value: 0x7f08011a
+ public const int menu_hide_password = 2131231002;
+
+ // aapt resource value: 0x7f08011b
+ public const int menu_lock = 2131231003;
+
+ // aapt resource value: 0x7f080117
+ public const int menu_move = 2131230999;
+
+ // aapt resource value: 0x7f08011c
+ public const int menu_open = 2131231004;
+
+ // aapt resource value: 0x7f08011d
+ public const int menu_rename = 2131231005;
+
+ // aapt resource value: 0x7f08011e
+ public const int menu_search = 2131231006;
+
+ // aapt resource value: 0x7f08011f
+ public const int menu_search_advanced = 2131231007;
+
+ // aapt resource value: 0x7f080120
+ public const int menu_url = 2131231008;
+
+ // aapt resource value: 0x7f080122
+ public const int minus = 2131231010;
// aapt resource value: 0x7f080123
- public const int no = 2131231011;
-
- // aapt resource value: 0x7f080124
- public const int no_keys = 2131231012;
+ public const int never = 2131231011;
// aapt resource value: 0x7f080125
- public const int no_results = 2131231013;
-
- // aapt resource value: 0x7f0801cf
- public const int no_thanks = 2131231183;
+ public const int no = 2131231013;
// aapt resource value: 0x7f080126
- public const int no_url_handler = 2131231014;
+ public const int no_keys = 2131231014;
- // aapt resource value: 0x7f0800c3
- public const int not_possible_im_picker = 2131230915;
+ // aapt resource value: 0x7f080127
+ public const int no_results = 2131231015;
+
+ // aapt resource value: 0x7f0801d3
+ public const int no_thanks = 2131231187;
+
+ // aapt resource value: 0x7f080128
+ public const int no_url_handler = 2131231016;
+
+ // aapt resource value: 0x7f0800c5
+ public const int not_possible_im_picker = 2131230917;
// aapt resource value: 0x7f080070
public const int oi_filemanager_market = 2131230832;
@@ -4609,17 +4633,17 @@ namespace keepass2android
// aapt resource value: 0x7f080071
public const int oi_filemanager_web = 2131230833;
- // aapt resource value: 0x7f0801ce
- public const int ok_donate = 2131231182;
+ // aapt resource value: 0x7f0801d2
+ public const int ok_donate = 2131231186;
// aapt resource value: 0x7f08007c
public const int omitbackup_key = 2131230844;
- // aapt resource value: 0x7f080129
- public const int omitbackup_summary = 2131231017;
+ // aapt resource value: 0x7f08012b
+ public const int omitbackup_summary = 2131231019;
- // aapt resource value: 0x7f080128
- public const int omitbackup_title = 2131231016;
+ // aapt resource value: 0x7f08012a
+ public const int omitbackup_title = 2131231018;
// aapt resource value: 0x7f080019
public const int open_entry = 2131230745;
@@ -4627,215 +4651,215 @@ namespace keepass2android
// aapt resource value: 0x7f08001a
public const int open_entry_for_app = 2131230746;
- // aapt resource value: 0x7f080127
- public const int open_recent = 2131231015;
+ // aapt resource value: 0x7f080129
+ public const int open_recent = 2131231017;
- // aapt resource value: 0x7f0801c9
- public const int otp_aux_file = 2131231177;
+ // aapt resource value: 0x7f0801cd
+ public const int otp_aux_file = 2131231181;
- // aapt resource value: 0x7f0801f1
- public const int otp_discarded_because_db_open = 2131231217;
-
- // aapt resource value: 0x7f0801ef
- public const int otp_discarded_because_no_db = 2131231215;
-
- // aapt resource value: 0x7f0801f0
- public const int otp_discarded_no_space = 2131231216;
-
- // aapt resource value: 0x7f0801eb
- public const int otp_explanation = 2131231211;
-
- // aapt resource value: 0x7f0801ec
- public const int otp_hint = 2131231212;
-
- // aapt resource value: 0x7f0801f2
- public const int otps_pending = 2131231218;
+ // aapt resource value: 0x7f0801f5
+ public const int otp_discarded_because_db_open = 2131231221;
// aapt resource value: 0x7f0801f3
- public const int otpsecret_hint = 2131231219;
+ public const int otp_discarded_because_no_db = 2131231219;
- // aapt resource value: 0x7f08012a
- public const int pass_filename = 2131231018;
+ // aapt resource value: 0x7f0801f4
+ public const int otp_discarded_no_space = 2131231220;
- // aapt resource value: 0x7f0800b8
- public const int password_access_prefs = 2131230904;
+ // aapt resource value: 0x7f0801ef
+ public const int otp_explanation = 2131231215;
+
+ // aapt resource value: 0x7f0801f0
+ public const int otp_hint = 2131231216;
+
+ // aapt resource value: 0x7f0801f6
+ public const int otps_pending = 2131231222;
+
+ // aapt resource value: 0x7f0801f7
+ public const int otpsecret_hint = 2131231223;
+
+ // aapt resource value: 0x7f08012c
+ public const int pass_filename = 2131231020;
+
+ // aapt resource value: 0x7f0800ba
+ public const int password_access_prefs = 2131230906;
// aapt resource value: 0x7f080086
public const int password_access_prefs_key = 2131230854;
- // aapt resource value: 0x7f08012b
- public const int password_title = 2131231019;
+ // aapt resource value: 0x7f08012d
+ public const int password_title = 2131231021;
// aapt resource value: 0x7f080072
public const int permission_desc = 2131230834;
- // aapt resource value: 0x7f0800c4
- public const int please_activate_keyboard = 2131230916;
-
- // aapt resource value: 0x7f080153
- public const int please_note = 2131231059;
-
- // aapt resource value: 0x7f08012d
- public const int progress_create = 2131231021;
-
- // aapt resource value: 0x7f08012f
- public const int progress_title = 2131231023;
-
- // aapt resource value: 0x7f08017d
- public const int protection = 2131231101;
-
- // aapt resource value: 0x7f0801a6
- public const int rate_app = 2131231142;
+ // aapt resource value: 0x7f0800c6
+ public const int please_activate_keyboard = 2131230918;
// aapt resource value: 0x7f080155
- public const int regular_expression = 2131231061;
+ public const int please_note = 2131231061;
- // aapt resource value: 0x7f080130
- public const int remember_keyfile_summary = 2131231024;
+ // aapt resource value: 0x7f08012f
+ public const int progress_create = 2131231023;
// aapt resource value: 0x7f080131
- public const int remember_keyfile_title = 2131231025;
+ public const int progress_title = 2131231025;
+
+ // aapt resource value: 0x7f08017f
+ public const int protection = 2131231103;
+
+ // aapt resource value: 0x7f0801aa
+ public const int rate_app = 2131231146;
+
+ // aapt resource value: 0x7f080157
+ public const int regular_expression = 2131231063;
// aapt resource value: 0x7f080132
- public const int remove_from_filelist = 2131231026;
+ public const int remember_keyfile_summary = 2131231026;
// aapt resource value: 0x7f080133
- public const int rijndael = 2131231027;
+ public const int remember_keyfile_title = 2131231027;
// aapt resource value: 0x7f080134
- public const int root = 2131231028;
+ public const int remove_from_filelist = 2131231028;
// aapt resource value: 0x7f080135
- public const int rounds = 2131231029;
+ public const int rijndael = 2131231029;
// aapt resource value: 0x7f080136
- public const int rounds_explaination = 2131231030;
+ public const int root = 2131231030;
// aapt resource value: 0x7f080137
- public const int rounds_hint = 2131231031;
+ public const int rounds = 2131231031;
+
+ // aapt resource value: 0x7f080138
+ public const int rounds_explaination = 2131231032;
+
+ // aapt resource value: 0x7f080139
+ public const int rounds_hint = 2131231033;
// aapt resource value: 0x7f080079
public const int rounds_key = 2131230841;
- // aapt resource value: 0x7f08013a
- public const int saving_database = 2131231034;
-
- // aapt resource value: 0x7f080141
- public const int search_hint = 2131231041;
+ // aapt resource value: 0x7f08013c
+ public const int saving_database = 2131231036;
// aapt resource value: 0x7f080143
- public const int search_in = 2131231043;
+ public const int search_hint = 2131231043;
- // aapt resource value: 0x7f08013c
- public const int search_label = 2131231036;
+ // aapt resource value: 0x7f080145
+ public const int search_in = 2131231045;
- // aapt resource value: 0x7f08015e
- public const int search_options = 2131231070;
+ // aapt resource value: 0x7f08013e
+ public const int search_label = 2131231038;
- // aapt resource value: 0x7f080142
- public const int search_results = 2131231042;
+ // aapt resource value: 0x7f080160
+ public const int search_options = 2131231072;
- // aapt resource value: 0x7f0800b6
- public const int security_prefs = 2131230902;
+ // aapt resource value: 0x7f080144
+ public const int search_results = 2131231044;
+
+ // aapt resource value: 0x7f0800b8
+ public const int security_prefs = 2131230904;
// aapt resource value: 0x7f080087
public const int security_prefs_key = 2131230855;
- // aapt resource value: 0x7f080145
- public const int select_group_then_add = 2131231045;
+ // aapt resource value: 0x7f080147
+ public const int select_group_then_add = 2131231047;
- // aapt resource value: 0x7f080144
- public const int select_other_entry = 2131231044;
+ // aapt resource value: 0x7f080146
+ public const int select_other_entry = 2131231046;
- // aapt resource value: 0x7f0801d0
- public const int select_storage_type = 2131231184;
-
- // aapt resource value: 0x7f0800ac
- public const int short_app_name = 2131230892;
+ // aapt resource value: 0x7f0801d4
+ public const int select_storage_type = 2131231188;
// aapt resource value: 0x7f0800ae
- public const int short_app_name_nonet = 2131230894;
+ public const int short_app_name = 2131230894;
- // aapt resource value: 0x7f0800b2
- public const int show_kill_app = 2131230898;
+ // aapt resource value: 0x7f0800b0
+ public const int short_app_name_nonet = 2131230896;
+
+ // aapt resource value: 0x7f0800b4
+ public const int show_kill_app = 2131230900;
// aapt resource value: 0x7f080076
public const int show_kill_app_key = 2131230838;
- // aapt resource value: 0x7f0800b3
- public const int show_kill_app_summary = 2131230899;
-
- // aapt resource value: 0x7f08013d
- public const int show_password = 2131231037;
+ // aapt resource value: 0x7f0800b5
+ public const int show_kill_app_summary = 2131230901;
// aapt resource value: 0x7f08013f
- public const int sort_db = 2131231039;
+ public const int show_password = 2131231039;
+
+ // aapt resource value: 0x7f080141
+ public const int sort_db = 2131231041;
// aapt resource value: 0x7f08007e
public const int sort_key = 2131230846;
- // aapt resource value: 0x7f08013e
- public const int sort_name = 2131231038;
-
- // aapt resource value: 0x7f08013b
- public const int space = 2131231035;
-
// aapt resource value: 0x7f080140
- public const int special = 2131231040;
+ public const int sort_name = 2131231040;
- // aapt resource value: 0x7f080161
- public const int start_create = 2131231073;
+ // aapt resource value: 0x7f08013d
+ public const int space = 2131231037;
+
+ // aapt resource value: 0x7f080142
+ public const int special = 2131231042;
// aapt resource value: 0x7f080163
- public const int start_create_import = 2131231075;
+ public const int start_create = 2131231075;
- // aapt resource value: 0x7f080160
- public const int start_open_file = 2131231072;
+ // aapt resource value: 0x7f080165
+ public const int start_create_import = 2131231077;
// aapt resource value: 0x7f080162
- public const int start_open_url = 2131231074;
+ public const int start_open_file = 2131231074;
- // aapt resource value: 0x7f0801a5
- public const int suggest_improvements = 2131231141;
+ // aapt resource value: 0x7f080164
+ public const int start_open_url = 2131231076;
- // aapt resource value: 0x7f0801cb
- public const int synchronize_database_menu = 2131231179;
+ // aapt resource value: 0x7f0801a9
+ public const int suggest_improvements = 2131231145;
- // aapt resource value: 0x7f0801a7
- public const int translate_app = 2131231143;
+ // aapt resource value: 0x7f0801cf
+ public const int synchronize_database_menu = 2131231183;
- // aapt resource value: 0x7f080147
- public const int twofish = 2131231047;
-
- // aapt resource value: 0x7f080148
- public const int underline = 2131231048;
+ // aapt resource value: 0x7f0801ab
+ public const int translate_app = 2131231147;
// aapt resource value: 0x7f080149
- public const int unsupported_db_version = 2131231049;
+ public const int twofish = 2131231049;
// aapt resource value: 0x7f08014a
- public const int uppercase = 2131231050;
-
- // aapt resource value: 0x7f0801e8
- public const int use_key_file = 2131231208;
-
- // aapt resource value: 0x7f08014e
- public const int version_history = 2131231054;
-
- // aapt resource value: 0x7f08014d
- public const int version_label = 2131231053;
+ public const int underline = 2131231050;
// aapt resource value: 0x7f08014b
- public const int warning_read_only = 2131231051;
+ public const int unsupported_db_version = 2131231051;
// aapt resource value: 0x7f08014c
- public const int warning_unmounted = 2131231052;
+ public const int uppercase = 2131231052;
+
+ // aapt resource value: 0x7f0801ec
+ public const int use_key_file = 2131231212;
+
+ // aapt resource value: 0x7f080150
+ public const int version_history = 2131231056;
+
+ // aapt resource value: 0x7f08014f
+ public const int version_label = 2131231055;
+
+ // aapt resource value: 0x7f08014d
+ public const int warning_read_only = 2131231053;
+
+ // aapt resource value: 0x7f08014e
+ public const int warning_unmounted = 2131231054;
// aapt resource value: 0x7f080017
public const int word_separators = 2131230743;
- // aapt resource value: 0x7f080122
- public const int yes = 2131231010;
+ // aapt resource value: 0x7f080124
+ public const int yes = 2131231012;
static String()
{
@@ -5810,7 +5834,7 @@ namespace keepass2android
16843055,
16843056,
16843057,
- 16843788};
+ 16843754};
// aapt resource value: 4
public const int MenuView_android_headerBackground = 4;
diff --git a/src/keepass2android/Resources/values/config.xml b/src/keepass2android/Resources/values/config.xml
index 351a1c12..126186ed 100644
--- a/src/keepass2android/Resources/values/config.xml
+++ b/src/keepass2android/Resources/values/config.xml
@@ -89,6 +89,7 @@
UseFileTransactions
LockWhenScreenOff
UseOfflineCache
+ AcceptAllServerCertificates
CheckForFileChangesOnSave
market://details?id=
@@ -122,6 +123,13 @@
- 28
+ WARN
+
+ - IGNORE
+ - WARN
+ - ERROR
+
+
ShowUnlockedNotification
true
diff --git a/src/keepass2android/Resources/values/strings.xml b/src/keepass2android/Resources/values/strings.xml
index 1b40577f..c8ecb255 100644
--- a/src/keepass2android/Resources/values/strings.xml
+++ b/src/keepass2android/Resources/values/strings.xml
@@ -239,6 +239,11 @@
Lock the database when screen is switched off.
Database caching
Keep a copy of remote database files in the application cache directory. This allows to use remote databases even when offline.
+
+ SSL certificates
+ Define the behavior when certificate validation fails. Note: you can install certificates on your device if validation fails!
+
+
Clear cache?
This will delete all cached database files. Any changes you made while being offline which have not yet been synchronized will be lost! Continue?
Check for modifications
@@ -372,16 +377,20 @@
Saving auxiliary OTP file…
Loading…
+
+ Warning: Server certificate validation failed: %1$s. Install appropriate root certificate on your device or see settings!
+ Error: Server certificate validation failed! Install appropriate root certificate on your device or see settings!
Change log
- Version 0.9.2b (preview)\n
+ Version 0.9.2\n
* Added OTP support (compatible with OtpKeyProv plugin)\n
* Integrated NFC support for OTPs from YubiKey NEO \n
* Several UI improvements\n
* Integrated Keepass 2.24 library\n
* Added option to kill the app process (see settings)\n
+ * Improved SSL certificate validation\n
* Bug fixes\n
@@ -501,4 +510,10 @@ Initial public release
- Password + OTP
- Password + OTP secret (recovery mode)
+
+ - Ignore certificate validation failures
+ - Warn when validation fails
+ - Do not accept invalid certificates
+
+
diff --git a/src/keepass2android/Resources/xml/preferences.xml b/src/keepass2android/Resources/xml/preferences.xml
index 1e28479c..953dce8e 100644
--- a/src/keepass2android/Resources/xml/preferences.xml
+++ b/src/keepass2android/Resources/xml/preferences.xml
@@ -204,6 +204,16 @@
android:defaultValue="true"
android:title="@string/UseOfflineCache_title"
android:key="@string/UseOfflineCache_key" />
+
+
+
full
False
bin\Debug
- DEBUG;EXCLUDE_TWOFISH;INCLUDE_KEYBOARD;EXCLUDE_KEYTRANSFORM;INCLUDE_FILECHOOSER;INCLUDE_JAVAFILESTORAGE
+ DEBUG;EXCLUDE_TWOFISH;EXCLUDE_KEYBOARD;EXCLUDE_KEYTRANSFORM;EXCLUDE_FILECHOOSER;EXCLUDE_JAVAFILESTORAGE
prompt
4
False