mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Clean up thread handling. Only run tasks in UI thread that need to be run there.
This commit is contained in:
@@ -169,13 +169,12 @@ public class EntryEditActivity extends LockingActivity {
|
||||
}
|
||||
|
||||
RunnableOnFinish task;
|
||||
Handler handler = new Handler();
|
||||
OnFinish onFinish = act.new AfterSave(handler);
|
||||
OnFinish onFinish = act.new AfterSave(new Handler());
|
||||
|
||||
if ( mIsNew ) {
|
||||
task = new AddEntry(KeePass.db, newEntry, handler, onFinish);
|
||||
task = new AddEntry(KeePass.db, newEntry, onFinish);
|
||||
} else {
|
||||
task = new UpdateEntry(KeePass.db, mEntry, newEntry, handler, onFinish);
|
||||
task = new UpdateEntry(KeePass.db, mEntry, newEntry, onFinish);
|
||||
}
|
||||
ProgressTask pt = new ProgressTask(act, task);
|
||||
pt.run();
|
||||
|
||||
@@ -160,7 +160,7 @@ public class GroupActivity extends GroupBaseActivity {
|
||||
if ( ! mDialog.canceled() && res.length() > 0 ) {
|
||||
GroupActivity act = GroupActivity.this;
|
||||
Handler handler = new Handler();
|
||||
AddGroup task = new AddGroup(KeePass.db, res, mGroup, handler, act.new RefreshTask(handler), false);
|
||||
AddGroup task = new AddGroup(KeePass.db, res, mGroup, act.new RefreshTask(handler), false);
|
||||
ProgressTask pt = new ProgressTask(act, task);
|
||||
pt.run();
|
||||
}
|
||||
|
||||
@@ -191,7 +191,7 @@ public class PasswordActivity extends Activity {
|
||||
String fileName = getEditText(R.id.pass_filename);
|
||||
|
||||
Handler handler = new Handler();
|
||||
LoadDB task = new LoadDB(KeePass.db, PasswordActivity.this, handler, fileName, pass, key, new AfterLoad(handler));
|
||||
LoadDB task = new LoadDB(KeePass.db, PasswordActivity.this, fileName, pass, key, new AfterLoad(handler));
|
||||
ProgressTask pt = new ProgressTask(PasswordActivity.this, task);
|
||||
pt.run();
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ public class PwEntryView extends ClickView {
|
||||
|
||||
private void deleteEntry() {
|
||||
Handler handler = new Handler();
|
||||
DeleteEntry task = new DeleteEntry(KeePass.db, mPw, mAct, handler, mAct.new RefreshTask(handler));
|
||||
DeleteEntry task = new DeleteEntry(KeePass.db, mPw, mAct, mAct.new RefreshTask(handler));
|
||||
ProgressTask pt = new ProgressTask(mAct, task);
|
||||
pt.run();
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ public class PwGroupView extends ClickView {
|
||||
|
||||
case MENU_DELETE:
|
||||
Handler handler = new Handler();
|
||||
DeleteGroup task = new DeleteGroup(KeePass.db, mPw, mAct, handler, mAct.new AfterDeleteGroup(handler));
|
||||
DeleteGroup task = new DeleteGroup(KeePass.db, mPw, mAct, mAct.new AfterDeleteGroup(handler));
|
||||
ProgressTask pt = new ProgressTask(mAct, task);
|
||||
pt.run();
|
||||
return true;
|
||||
|
||||
@@ -25,21 +25,19 @@ import org.phoneid.keepassj2me.PwEntry;
|
||||
import org.phoneid.keepassj2me.PwGroup;
|
||||
import org.phoneid.keepassj2me.Types;
|
||||
|
||||
import android.os.Handler;
|
||||
|
||||
import com.keepassdroid.Database;
|
||||
|
||||
public class AddEntry extends RunnableOnFinish {
|
||||
private Database mDb;
|
||||
private PwEntry mEntry;
|
||||
|
||||
public AddEntry(Database db, PwEntry entry, Handler handler, OnFinish finish) {
|
||||
super(finish, handler);
|
||||
public AddEntry(Database db, PwEntry entry, OnFinish finish) {
|
||||
super(finish);
|
||||
|
||||
mDb = db;
|
||||
mEntry = entry;
|
||||
|
||||
mFinish = new AfterAdd(mFinish, mHandler);
|
||||
mFinish = new AfterAdd(mFinish);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -53,14 +51,14 @@ public class AddEntry extends RunnableOnFinish {
|
||||
mDb.mPM.entries.add(mEntry);
|
||||
|
||||
// Commit to disk
|
||||
SaveDB save = new SaveDB(mDb, mHandler, mFinish);
|
||||
SaveDB save = new SaveDB(mDb, mFinish);
|
||||
save.run();
|
||||
}
|
||||
|
||||
private class AfterAdd extends OnFinish {
|
||||
|
||||
public AfterAdd(OnFinish finish, Handler handler) {
|
||||
super(finish, handler);
|
||||
public AfterAdd(OnFinish finish) {
|
||||
super(finish);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -24,8 +24,6 @@ import java.lang.ref.WeakReference;
|
||||
import org.phoneid.keepassj2me.PwGroup;
|
||||
import org.phoneid.keepassj2me.PwManager;
|
||||
|
||||
import android.os.Handler;
|
||||
|
||||
import com.keepassdroid.Database;
|
||||
|
||||
public class AddGroup extends RunnableOnFinish {
|
||||
@@ -35,15 +33,15 @@ public class AddGroup extends RunnableOnFinish {
|
||||
private PwGroup mGroup;
|
||||
private boolean mDontSave;
|
||||
|
||||
public AddGroup(Database db, String name, PwGroup parent, Handler handler, OnFinish finish, boolean dontSave) {
|
||||
super(finish, handler);
|
||||
public AddGroup(Database db, String name, PwGroup parent, OnFinish finish, boolean dontSave) {
|
||||
super(finish);
|
||||
|
||||
mDb = db;
|
||||
mName = name;
|
||||
mParent = parent;
|
||||
mDontSave = dontSave;
|
||||
|
||||
mFinish = new AfterAdd(mFinish, mHandler);
|
||||
mFinish = new AfterAdd(mFinish);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -54,14 +52,14 @@ public class AddGroup extends RunnableOnFinish {
|
||||
mGroup = pm.newGroup(mName, mParent);
|
||||
|
||||
// Commit to disk
|
||||
SaveDB save = new SaveDB(mDb, mHandler, mFinish, mDontSave);
|
||||
SaveDB save = new SaveDB(mDb, mFinish, mDontSave);
|
||||
save.run();
|
||||
}
|
||||
|
||||
private class AfterAdd extends OnFinish {
|
||||
|
||||
public AfterAdd(OnFinish finish, Handler handler) {
|
||||
super(finish, handler);
|
||||
public AfterAdd(OnFinish finish) {
|
||||
super(finish);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -25,7 +25,6 @@ import org.phoneid.keepassj2me.PwEntry;
|
||||
import org.phoneid.keepassj2me.PwGroup;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Handler;
|
||||
|
||||
import com.keepassdroid.Database;
|
||||
import com.keepassdroid.search.SearchDbHelper;
|
||||
@@ -41,8 +40,8 @@ public class DeleteEntry extends RunnableOnFinish {
|
||||
private Context mCtx;
|
||||
private boolean mDontSave;
|
||||
|
||||
public DeleteEntry(Database db, PwEntry entry, Context ctx, Handler handler, OnFinish finish) {
|
||||
super(finish, handler);
|
||||
public DeleteEntry(Database db, PwEntry entry, Context ctx, OnFinish finish) {
|
||||
super(finish);
|
||||
|
||||
mDb = db;
|
||||
mEntry = entry;
|
||||
@@ -51,8 +50,8 @@ public class DeleteEntry extends RunnableOnFinish {
|
||||
|
||||
}
|
||||
|
||||
public DeleteEntry(Database db, PwEntry entry, Context ctx, Handler handler, OnFinish finish, boolean dontSave) {
|
||||
super(finish, handler);
|
||||
public DeleteEntry(Database db, PwEntry entry, Context ctx, OnFinish finish, boolean dontSave) {
|
||||
super(finish);
|
||||
|
||||
mDb = db;
|
||||
mEntry = entry;
|
||||
@@ -75,10 +74,10 @@ public class DeleteEntry extends RunnableOnFinish {
|
||||
mDb.mPM.entries.remove(mEntry);
|
||||
|
||||
// Save
|
||||
mFinish = new AfterDelete(mFinish, mHandler, dbHelper, parent, mEntry);
|
||||
mFinish = new AfterDelete(mFinish, dbHelper, parent, mEntry);
|
||||
|
||||
// Commit database
|
||||
SaveDB save = new SaveDB(mDb, mHandler, mFinish, mDontSave);
|
||||
SaveDB save = new SaveDB(mDb, mFinish, mDontSave);
|
||||
save.run();
|
||||
|
||||
|
||||
@@ -92,8 +91,8 @@ public class DeleteEntry extends RunnableOnFinish {
|
||||
private PwGroup mParent;
|
||||
private PwEntry mEntry;
|
||||
|
||||
public AfterDelete(OnFinish finish, Handler handler, SearchDbHelper helper, PwGroup parent, PwEntry entry) {
|
||||
super(finish, handler);
|
||||
public AfterDelete(OnFinish finish, SearchDbHelper helper, PwGroup parent, PwEntry entry) {
|
||||
super(finish);
|
||||
|
||||
mDbHelper = helper;
|
||||
mParent = parent;
|
||||
|
||||
@@ -26,7 +26,6 @@ import org.phoneid.keepassj2me.PwEntry;
|
||||
import org.phoneid.keepassj2me.PwGroup;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Handler;
|
||||
|
||||
import com.keepassdroid.Database;
|
||||
import com.keepassdroid.GroupBaseActivity;
|
||||
@@ -39,24 +38,24 @@ public class DeleteGroup extends RunnableOnFinish {
|
||||
private Context mCtx;
|
||||
private boolean mDontSave;
|
||||
|
||||
public DeleteGroup(Database db, PwGroup group, GroupBaseActivity act, Handler handler, OnFinish finish) {
|
||||
super(finish, handler);
|
||||
public DeleteGroup(Database db, PwGroup group, GroupBaseActivity act, OnFinish finish) {
|
||||
super(finish);
|
||||
setMembers(db, group, act, act, false);
|
||||
}
|
||||
|
||||
public DeleteGroup(Database db, PwGroup group, GroupBaseActivity act, Handler handler, OnFinish finish, boolean dontSave) {
|
||||
super(finish, handler);
|
||||
public DeleteGroup(Database db, PwGroup group, GroupBaseActivity act, OnFinish finish, boolean dontSave) {
|
||||
super(finish);
|
||||
setMembers(db, group, act, act, dontSave);
|
||||
}
|
||||
|
||||
public DeleteGroup(Database db, PwGroup group, GroupBaseActivity act, Context ctx, Handler handler, OnFinish finish, boolean dontSave) {
|
||||
super(finish, handler);
|
||||
public DeleteGroup(Database db, PwGroup group, GroupBaseActivity act, Context ctx, OnFinish finish, boolean dontSave) {
|
||||
super(finish);
|
||||
setMembers(db, group, act, ctx, dontSave);
|
||||
}
|
||||
|
||||
|
||||
public DeleteGroup(Database db, PwGroup group, Context ctx, Handler handler, OnFinish finish, boolean dontSave) {
|
||||
super(finish, handler);
|
||||
public DeleteGroup(Database db, PwGroup group, Context ctx, OnFinish finish, boolean dontSave) {
|
||||
super(finish);
|
||||
setMembers(db, group, null, ctx, dontSave);
|
||||
}
|
||||
|
||||
@@ -67,7 +66,7 @@ public class DeleteGroup extends RunnableOnFinish {
|
||||
mCtx = ctx;
|
||||
mDontSave = dontSave;
|
||||
|
||||
mFinish = new AfterDelete(mFinish, mHandler);
|
||||
mFinish = new AfterDelete(mFinish);
|
||||
}
|
||||
|
||||
|
||||
@@ -79,14 +78,14 @@ public class DeleteGroup extends RunnableOnFinish {
|
||||
// Remove child entries
|
||||
Vector<PwEntry> childEnt = (Vector<PwEntry>) mGroup.childEntries.clone();
|
||||
for ( int i = 0; i < childEnt.size(); i++ ) {
|
||||
DeleteEntry task = new DeleteEntry(mDb, childEnt.get(i), mCtx, mHandler, null, true);
|
||||
DeleteEntry task = new DeleteEntry(mDb, childEnt.get(i), mCtx, null, true);
|
||||
task.run();
|
||||
}
|
||||
|
||||
// Remove child groups
|
||||
Vector<PwGroup> childGrp = (Vector<PwGroup>) mGroup.childGroups.clone();
|
||||
for ( int i = 0; i < childGrp.size(); i++ ) {
|
||||
DeleteGroup task = new DeleteGroup(mDb, childGrp.get(i), mAct, mCtx, mHandler, null, true);
|
||||
DeleteGroup task = new DeleteGroup(mDb, childGrp.get(i), mAct, mCtx, null, true);
|
||||
task.run();
|
||||
}
|
||||
|
||||
@@ -101,14 +100,14 @@ public class DeleteGroup extends RunnableOnFinish {
|
||||
mDb.mPM.groups.remove(mGroup);
|
||||
|
||||
// Save
|
||||
SaveDB save = new SaveDB(mDb, mHandler, mFinish, mDontSave);
|
||||
SaveDB save = new SaveDB(mDb, mFinish, mDontSave);
|
||||
save.run();
|
||||
|
||||
}
|
||||
|
||||
private class AfterDelete extends OnFinish {
|
||||
public AfterDelete(OnFinish finish, Handler handler) {
|
||||
super(finish, handler);
|
||||
public AfterDelete(OnFinish finish) {
|
||||
super(finish);
|
||||
}
|
||||
|
||||
public void run() {
|
||||
|
||||
@@ -25,7 +25,6 @@ import java.io.IOException;
|
||||
import org.bouncycastle.crypto.InvalidCipherTextException;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Handler;
|
||||
|
||||
import com.android.keepass.R;
|
||||
import com.keepassdroid.Database;
|
||||
@@ -39,8 +38,8 @@ public class LoadDB extends RunnableOnFinish {
|
||||
private Database mDb;
|
||||
private Context mCtx;
|
||||
|
||||
public LoadDB(Database db, Context ctx, Handler handler, String fileName, String pass, String key, OnFinish finish) {
|
||||
super(finish, handler);
|
||||
public LoadDB(Database db, Context ctx, String fileName, String pass, String key, OnFinish finish) {
|
||||
super(finish);
|
||||
|
||||
mDb = db;
|
||||
mCtx = ctx;
|
||||
|
||||
@@ -38,6 +38,7 @@ public class OnFinish implements Runnable {
|
||||
|
||||
|
||||
public OnFinish(Handler handler) {
|
||||
mOnFinish = null;
|
||||
mHandler = handler;
|
||||
}
|
||||
|
||||
@@ -46,6 +47,11 @@ public class OnFinish implements Runnable {
|
||||
mHandler = handler;
|
||||
}
|
||||
|
||||
public OnFinish(OnFinish finish) {
|
||||
mOnFinish = finish;
|
||||
mHandler = null;
|
||||
}
|
||||
|
||||
public void setResult(boolean success, String message) {
|
||||
mSuccess = success;
|
||||
mMessage = message;
|
||||
@@ -59,7 +65,12 @@ public class OnFinish implements Runnable {
|
||||
if ( mOnFinish != null ) {
|
||||
// Pass on result on call finish
|
||||
mOnFinish.setResult(mSuccess, mMessage);
|
||||
mHandler.post(mOnFinish);
|
||||
|
||||
if ( mHandler != null ) {
|
||||
mHandler.post(mOnFinish);
|
||||
} else {
|
||||
mOnFinish.run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,16 +19,13 @@
|
||||
*/
|
||||
package com.keepassdroid.database;
|
||||
|
||||
import android.os.Handler;
|
||||
|
||||
public abstract class RunnableOnFinish implements Runnable {
|
||||
|
||||
public OnFinish mFinish;
|
||||
protected Handler mHandler;
|
||||
|
||||
public RunnableOnFinish(OnFinish finish, Handler handler) {
|
||||
public RunnableOnFinish(OnFinish finish) {
|
||||
mFinish = finish;
|
||||
mHandler = handler;
|
||||
}
|
||||
|
||||
protected void finish(boolean result, String message) {
|
||||
|
||||
@@ -21,8 +21,6 @@ package com.keepassdroid.database;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import android.os.Handler;
|
||||
|
||||
import com.keepassdroid.Database;
|
||||
import com.keepassdroid.keepasslib.PwManagerOutputException;
|
||||
|
||||
@@ -30,15 +28,15 @@ public class SaveDB extends RunnableOnFinish {
|
||||
private Database mDb;
|
||||
private boolean mDontSave;
|
||||
|
||||
public SaveDB(Database db, Handler handler, OnFinish finish, boolean dontSave) {
|
||||
super(finish, handler);
|
||||
public SaveDB(Database db, OnFinish finish, boolean dontSave) {
|
||||
super(finish);
|
||||
|
||||
mDb = db;
|
||||
mDontSave = dontSave;
|
||||
}
|
||||
|
||||
public SaveDB(Database db, Handler handler, OnFinish finish) {
|
||||
super(finish, handler);
|
||||
public SaveDB(Database db, OnFinish finish) {
|
||||
super(finish);
|
||||
|
||||
mDb = db;
|
||||
mDontSave = false;
|
||||
|
||||
@@ -24,8 +24,6 @@ import java.lang.ref.WeakReference;
|
||||
import org.phoneid.keepassj2me.PwEntry;
|
||||
import org.phoneid.keepassj2me.PwGroup;
|
||||
|
||||
import android.os.Handler;
|
||||
|
||||
import com.keepassdroid.Database;
|
||||
|
||||
public class UpdateEntry extends RunnableOnFinish {
|
||||
@@ -33,8 +31,8 @@ public class UpdateEntry extends RunnableOnFinish {
|
||||
private PwEntry mOldE;
|
||||
private PwEntry mNewE;
|
||||
|
||||
public UpdateEntry(Database db, PwEntry oldE, PwEntry newE, Handler handler, OnFinish finish) {
|
||||
super(finish, handler);
|
||||
public UpdateEntry(Database db, PwEntry oldE, PwEntry newE, OnFinish finish) {
|
||||
super(finish);
|
||||
|
||||
mDb = db;
|
||||
mOldE = oldE;
|
||||
@@ -42,7 +40,7 @@ public class UpdateEntry extends RunnableOnFinish {
|
||||
|
||||
// Keep backup of original values in case save fails
|
||||
PwEntry backup = new PwEntry(mOldE);
|
||||
mFinish = new AfterUpdate(backup, finish, handler);
|
||||
mFinish = new AfterUpdate(backup, finish);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -51,15 +49,15 @@ public class UpdateEntry extends RunnableOnFinish {
|
||||
mOldE.assign(mNewE);
|
||||
|
||||
// Commit to disk
|
||||
SaveDB save = new SaveDB(mDb, mHandler, mFinish);
|
||||
SaveDB save = new SaveDB(mDb, mFinish);
|
||||
save.run();
|
||||
}
|
||||
|
||||
private class AfterUpdate extends OnFinish {
|
||||
private PwEntry mBackup;
|
||||
|
||||
public AfterUpdate(PwEntry backup, OnFinish finish, Handler handler) {
|
||||
super(finish, handler);
|
||||
public AfterUpdate(PwEntry backup, OnFinish finish) {
|
||||
super(finish);
|
||||
|
||||
mBackup = backup;
|
||||
}
|
||||
|
||||
@@ -26,7 +26,6 @@ import org.phoneid.keepassj2me.PwGroup;
|
||||
import org.phoneid.keepassj2me.PwManager;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Handler;
|
||||
import android.test.AndroidTestCase;
|
||||
|
||||
import com.keepassdroid.Database;
|
||||
@@ -60,7 +59,7 @@ public class DeleteEntry extends AndroidTestCase {
|
||||
assertNotNull("Could not find group1", group1);
|
||||
|
||||
// Delete the group
|
||||
DeleteGroup task = new DeleteGroup(db, group1, ctx, new Handler(), null, true);
|
||||
DeleteGroup task = new DeleteGroup(db, group1, ctx, null, true);
|
||||
task.run();
|
||||
|
||||
// Verify the entries were deleted
|
||||
|
||||
Reference in New Issue
Block a user