Remove debugging delay, ensure prompt GC of memory used when loading DB

This commit is contained in:
AlexVallat 2013-08-04 09:38:15 +01:00
parent f0dfdefd67
commit 518479904a
1 changed files with 16 additions and 13 deletions

View File

@ -270,8 +270,7 @@ namespace keepass2android
Window.SetSoftInputMode(SoftInput.StateVisible);
Button confirmButton = (Button)FindViewById(Resource.Id.pass_ok);
confirmButton.Click += (sender, e) =>
{
confirmButton.Click += (sender, e) => {
String pass = GetEditText(Resource.Id.password);
String key = GetEditText(Resource.Id.pass_keyfile);
if (pass.Length == 0 && key.Length == 0)
@ -282,13 +281,12 @@ namespace keepass2android
CheckBox cbQuickUnlock = (CheckBox)FindViewById(Resource.Id.enable_quickunlock);
App.Kp2a.SetQuickUnlockEnabled(cbQuickUnlock.Checked);
Handler handler = new Handler();
LoadDb task = new LoadDb(App.Kp2a, _ioConnection, _loadDbTask, pass, key, new AfterLoad(handler, this));
_loadDbTask = null; // prevent accidental re-use
ProgressTask pt = new ProgressTask(App.Kp2a, this, task);
pt.Run();
new ProgressTask(App.Kp2a, this, task).Run();
};
/*CheckBox checkBox = (CheckBox) FindViewById(Resource.Id.show_password);
@ -396,13 +394,11 @@ namespace keepass2android
capacity = (int)stream.Length;
}
memoryStream = new MemoryStream(capacity);
MemUtil.CopyStream(stream, memoryStream);
stream.CopyTo(memoryStream);
stream.Close();
memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
}
System.Threading.Thread.Sleep(3000);
Kp2aLog.Log("Pre-loading database file completed");
return memoryStream;
@ -514,17 +510,24 @@ namespace keepass2android
private class AfterLoad : OnFinish {
readonly PasswordActivity _act;
public AfterLoad(Handler handler, PasswordActivity act):base(handler) {
public AfterLoad(Handler handler, PasswordActivity act):base(handler)
{
_act = act;
}
public override void Run() {
if ( Success ) {
if ( Success )
{
_act.SetEditText(Resource.Id.password, "");
_act.LaunchNextActivity();
} else {
GC.Collect(); // Ensure temporary memory used while loading is collected - it will contain sensitive data such as username and password, and also the large data of the encrypted database file
}
else
{
DisplayMessage(_act);
}
}