Clean up thread handling. Only run tasks in UI thread that need to be run there.

This commit is contained in:
Brian Pellin
2009-09-23 23:37:09 -05:00
parent e1a78390e4
commit c684c17d24
15 changed files with 67 additions and 72 deletions

View File

@@ -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();

View File

@@ -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();
}

View File

@@ -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();
}

View File

@@ -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();

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -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;

View File

@@ -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() {

View File

@@ -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;

View File

@@ -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();
}
}
}

View File

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

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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