From 795d6fa334461fbc3098579cea23c4eda4c058a8 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Sat, 10 Feb 2018 16:08:10 +0100 Subject: [PATCH] Serializable for Pw, solve bug of entry refresh --- .../activities/EntryActivity.java | 28 +++++++++--------- .../activities/EntryEditActivity.java | 29 ++++++++++++------- .../activities/GroupActivity.java | 19 +++++++++++- .../activities/GroupBaseActivity.java | 1 - .../keepassdroid/adapters/NodeAdapter.java | 9 ++++++ .../com/keepassdroid/database/PwDate.java | 3 +- .../com/keepassdroid/database/PwEntryV4.java | 3 +- .../com/keepassdroid/database/PwGroupId.java | 4 ++- .../com/keepassdroid/database/PwIcon.java | 4 ++- .../com/keepassdroid/database/PwNode.java | 3 +- .../keepassdroid/database/edit/AddEntry.java | 8 ++--- .../database/edit/UpdateEntry.java | 1 + .../database/security/ProtectedString.java | 4 ++- .../java/com/kunzisoft/keepass/KeePass.java | 2 -- 14 files changed, 78 insertions(+), 40 deletions(-) diff --git a/app/src/main/java/com/keepassdroid/activities/EntryActivity.java b/app/src/main/java/com/keepassdroid/activities/EntryActivity.java index 356712667..76e340bc1 100644 --- a/app/src/main/java/com/keepassdroid/activities/EntryActivity.java +++ b/app/src/main/java/com/keepassdroid/activities/EntryActivity.java @@ -35,8 +35,8 @@ import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; import android.preference.PreferenceManager; -import android.support.v7.widget.Toolbar; import android.support.v4.app.NotificationCompat; +import android.support.v7.widget.Toolbar; import android.text.SpannableString; import android.text.method.LinkMovementMethod; import android.text.method.PasswordTransformationMethod; @@ -49,21 +49,21 @@ import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; -import com.keepassdroid.database.Database; -import com.keepassdroid.tasks.UIToastTask; -import com.kunzisoft.keepass.KeePass; -import com.kunzisoft.keepass.R; import com.keepassdroid.app.App; import com.keepassdroid.compat.ActivityCompat; +import com.keepassdroid.database.Database; import com.keepassdroid.database.PwDatabase; import com.keepassdroid.database.PwEntry; import com.keepassdroid.database.PwEntryV4; import com.keepassdroid.database.exception.SamsungClipboardException; import com.keepassdroid.intents.Intents; +import com.keepassdroid.tasks.UIToastTask; import com.keepassdroid.utils.EmptyUtils; import com.keepassdroid.utils.MenuUtil; import com.keepassdroid.utils.Types; import com.keepassdroid.utils.Util; +import com.kunzisoft.keepass.KeePass; +import com.kunzisoft.keepass.R; import java.text.DateFormat; import java.util.Date; @@ -90,7 +90,7 @@ public class EntryActivity extends LockCloseHideActivity { i.putExtra(KEY_ENTRY, Types.UUIDtoBytes(pw.getUUID())); - act.startActivityForResult(i,0); + act.startActivityForResult(i, EntryEditActivity.ADD_OR_UPDATE_ENTRY_REQUEST_CODE); } protected PwEntry mEntry; @@ -124,6 +124,7 @@ public class EntryActivity extends LockCloseHideActivity { @Override protected void onCreate(Bundle savedInstanceState) { + //TODO in Prefs SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); mShowPassword = ! prefs.getBoolean(getString(R.string.maskpass_key), getResources().getBoolean(R.bool.maskpass_default)); @@ -298,13 +299,14 @@ public class EntryActivity extends LockCloseHideActivity { @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - if ( resultCode == KeePass.EXIT_REFRESH || resultCode == KeePass.EXIT_REFRESH_TITLE ) { - fillData(true); - if ( resultCode == KeePass.EXIT_REFRESH_TITLE ) { - Intent ret = new Intent(); - setResult(KeePass.EXIT_REFRESH, ret); - } - } + switch (requestCode) { + case EntryEditActivity.ADD_OR_UPDATE_ENTRY_REQUEST_CODE: + // TODO CHANGE Fill function to include data + fillData(true); + // Transit data in previous Activity + setResult(resultCode, data); + break; + } } @Override diff --git a/app/src/main/java/com/keepassdroid/activities/EntryEditActivity.java b/app/src/main/java/com/keepassdroid/activities/EntryEditActivity.java index f2b32f9a5..55b34541f 100644 --- a/app/src/main/java/com/keepassdroid/activities/EntryEditActivity.java +++ b/app/src/main/java/com/keepassdroid/activities/EntryEditActivity.java @@ -66,9 +66,17 @@ import java.util.UUID; public abstract class EntryEditActivity extends LockCloseHideActivity implements IconPickerDialogFragment.IconPickerListener, GeneratePasswordDialogFragment.GeneratePasswordListener { + + // Keys for current Activity public static final String KEY_ENTRY = "entry"; public static final String KEY_PARENT = "parent"; + // Keys for callback + public static final int ADD_ENTRY_RESULT_CODE = 31; + public static final int UPDATE_ENTRY_RESULT_CODE = 32; + public static final int ADD_OR_UPDATE_ENTRY_REQUEST_CODE = 7129; + public static final String ADD_OR_UPDATE_ENTRY_KEY = "ADD_OR_UPDATE_ENTRY_KEY"; + protected PwEntry mEntry; protected boolean mIsNew; protected int mSelectedIconID = -1; @@ -87,7 +95,7 @@ public abstract class EntryEditActivity extends LockCloseHideActivity i.putExtra(KEY_ENTRY, Types.UUIDtoBytes(pw.getUUID())); - act.startActivityForResult(i, 0); + act.startActivityForResult(i, ADD_OR_UPDATE_ENTRY_REQUEST_CODE); } public static void Launch(Activity act, PwGroup pw) { @@ -104,7 +112,7 @@ public abstract class EntryEditActivity extends LockCloseHideActivity throw new RuntimeException("Not yet implemented."); } - act.startActivityForResult(i, 0); + act.startActivityForResult(i, ADD_OR_UPDATE_ENTRY_REQUEST_CODE); } protected abstract PwGroupId getParentGroupId(Intent i, String key); @@ -179,20 +187,19 @@ public abstract class EntryEditActivity extends LockCloseHideActivity } PwEntry newEntry = populateNewEntry(); - - if ( newEntry.getTitle().equals(mEntry.getTitle()) ) { - setResult(KeePass.EXIT_REFRESH); - } else { - setResult(KeePass.EXIT_REFRESH_TITLE); - } RunnableOnFinish task; OnFinish onFinish = act.new AfterSave(new Handler()); - + + Intent intentEntry = new Intent(); if ( mIsNew ) { - task = AddEntry.getInstance(EntryEditActivity.this, App.getDB(), newEntry, onFinish); + task = new AddEntry(act, App.getDB(), newEntry, onFinish); + intentEntry.putExtra(ADD_OR_UPDATE_ENTRY_KEY, newEntry); + setResult(ADD_ENTRY_RESULT_CODE, intentEntry); } else { - task = new UpdateEntry(EntryEditActivity.this, App.getDB(), mEntry, newEntry, onFinish); + task = new UpdateEntry(act, App.getDB(), mEntry, newEntry, onFinish); + intentEntry.putExtra(ADD_OR_UPDATE_ENTRY_KEY, mEntry); + setResult(UPDATE_ENTRY_RESULT_CODE, intentEntry); } ProgressTask pt = new ProgressTask(act, task, R.string.saving_database); pt.run(); diff --git a/app/src/main/java/com/keepassdroid/activities/GroupActivity.java b/app/src/main/java/com/keepassdroid/activities/GroupActivity.java index 01a7a8933..7196b4b4f 100644 --- a/app/src/main/java/com/keepassdroid/activities/GroupActivity.java +++ b/app/src/main/java/com/keepassdroid/activities/GroupActivity.java @@ -240,7 +240,24 @@ public abstract class GroupActivity extends GroupBaseActivity pt.run(); } - @Override + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + switch (requestCode) { + case EntryEditActivity.ADD_OR_UPDATE_ENTRY_REQUEST_CODE: + if (resultCode == EntryEditActivity.ADD_ENTRY_RESULT_CODE || + resultCode == EntryEditActivity.UPDATE_ENTRY_RESULT_CODE) { + PwNode newNode = (PwNode) data.getSerializableExtra(EntryEditActivity.ADD_OR_UPDATE_ENTRY_KEY); + if (resultCode == EntryEditActivity.ADD_ENTRY_RESULT_CODE) + mAdapter.addNode(newNode); + if (resultCode == EntryEditActivity.UPDATE_ENTRY_RESULT_CODE) + mAdapter.updateNode(newNode); + } + break; + } + } + + @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: diff --git a/app/src/main/java/com/keepassdroid/activities/GroupBaseActivity.java b/app/src/main/java/com/keepassdroid/activities/GroupBaseActivity.java index 3512c7e2b..770f27e71 100644 --- a/app/src/main/java/com/keepassdroid/activities/GroupBaseActivity.java +++ b/app/src/main/java/com/keepassdroid/activities/GroupBaseActivity.java @@ -74,7 +74,6 @@ public abstract class GroupBaseActivity extends LockCloseListActivity @Override protected void onResume() { super.onResume(); - refreshIfDirty(); } diff --git a/app/src/main/java/com/keepassdroid/adapters/NodeAdapter.java b/app/src/main/java/com/keepassdroid/adapters/NodeAdapter.java index dd3fc8715..f77189e6b 100644 --- a/app/src/main/java/com/keepassdroid/adapters/NodeAdapter.java +++ b/app/src/main/java/com/keepassdroid/adapters/NodeAdapter.java @@ -4,6 +4,7 @@ import android.content.Context; import android.support.v7.util.SortedList; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.util.SortedListAdapterCallback; +import android.util.Log; import android.view.ContextMenu; import android.view.LayoutInflater; import android.view.Menu; @@ -58,6 +59,14 @@ public class NodeAdapter extends RecyclerView.Adapter { nodeSortedList.add(node); } + public void updateNode(PwNode node) { + try { + nodeSortedList.updateItemAt(nodeSortedList.indexOf(node), node); + } catch (IndexOutOfBoundsException e) { + Log.e(NodeAdapter.class.getName(), e.getMessage()); + } + } + public void removeNode(PwNode node) { nodeSortedList.remove(node); } diff --git a/app/src/main/java/com/keepassdroid/database/PwDate.java b/app/src/main/java/com/keepassdroid/database/PwDate.java index 298fba6cf..e144349ec 100644 --- a/app/src/main/java/com/keepassdroid/database/PwDate.java +++ b/app/src/main/java/com/keepassdroid/database/PwDate.java @@ -19,6 +19,7 @@ */ package com.keepassdroid.database; +import java.io.Serializable; import java.util.Arrays; import java.util.Calendar; import java.util.Date; @@ -32,7 +33,7 @@ import com.keepassdroid.utils.Types; * @author bpellin * */ -public class PwDate implements Cloneable { +public class PwDate implements Cloneable, Serializable { private static final int DATE_SIZE = 5; diff --git a/app/src/main/java/com/keepassdroid/database/PwEntryV4.java b/app/src/main/java/com/keepassdroid/database/PwEntryV4.java index 667709f4f..8eccfd4eb 100644 --- a/app/src/main/java/com/keepassdroid/database/PwEntryV4.java +++ b/app/src/main/java/com/keepassdroid/database/PwEntryV4.java @@ -19,6 +19,7 @@ */ package com.keepassdroid.database; +import java.io.Serializable; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; @@ -62,7 +63,7 @@ public class PwEntryV4 extends PwEntry implements ITimeLogger { public String tags = ""; public Map customData = new HashMap(); - public class AutoType implements Cloneable { + public class AutoType implements Cloneable, Serializable { private static final long OBF_OPT_NONE = 0; public boolean enabled = true; diff --git a/app/src/main/java/com/keepassdroid/database/PwGroupId.java b/app/src/main/java/com/keepassdroid/database/PwGroupId.java index 793959326..4284618e2 100644 --- a/app/src/main/java/com/keepassdroid/database/PwGroupId.java +++ b/app/src/main/java/com/keepassdroid/database/PwGroupId.java @@ -1,5 +1,7 @@ package com.keepassdroid.database; -public abstract class PwGroupId { +import java.io.Serializable; + +public abstract class PwGroupId implements Serializable { } diff --git a/app/src/main/java/com/keepassdroid/database/PwIcon.java b/app/src/main/java/com/keepassdroid/database/PwIcon.java index 798ad2528..65fa67fd7 100644 --- a/app/src/main/java/com/keepassdroid/database/PwIcon.java +++ b/app/src/main/java/com/keepassdroid/database/PwIcon.java @@ -1,6 +1,8 @@ package com.keepassdroid.database; -public abstract class PwIcon { +import java.io.Serializable; + +public abstract class PwIcon implements Serializable { public boolean isMetaStreamIcon() { return false; diff --git a/app/src/main/java/com/keepassdroid/database/PwNode.java b/app/src/main/java/com/keepassdroid/database/PwNode.java index 945c54986..50f0f6265 100644 --- a/app/src/main/java/com/keepassdroid/database/PwNode.java +++ b/app/src/main/java/com/keepassdroid/database/PwNode.java @@ -22,13 +22,14 @@ package com.keepassdroid.database; import android.support.annotation.NonNull; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * Abstract class who manage Groups and Entries */ -public abstract class PwNode implements Comparable { +public abstract class PwNode implements Comparable, Serializable { /** * Get the type of Node diff --git a/app/src/main/java/com/keepassdroid/database/edit/AddEntry.java b/app/src/main/java/com/keepassdroid/database/edit/AddEntry.java index 82f94870f..80a8333b7 100644 --- a/app/src/main/java/com/keepassdroid/database/edit/AddEntry.java +++ b/app/src/main/java/com/keepassdroid/database/edit/AddEntry.java @@ -31,11 +31,7 @@ public class AddEntry extends RunnableOnFinish { private PwEntry mEntry; private Context ctx; - public static AddEntry getInstance(Context ctx, Database db, PwEntry entry, OnFinish finish) { - return new AddEntry(ctx, db, entry, finish); - } - - protected AddEntry(Context ctx, Database db, PwEntry entry, OnFinish finish) { + public AddEntry(Context ctx, Database db, PwEntry entry, OnFinish finish) { super(finish); mDb = db; @@ -56,7 +52,7 @@ public class AddEntry extends RunnableOnFinish { private class AfterAdd extends OnFinish { - public AfterAdd(OnFinish finish) { + AfterAdd(OnFinish finish) { super(finish); } diff --git a/app/src/main/java/com/keepassdroid/database/edit/UpdateEntry.java b/app/src/main/java/com/keepassdroid/database/edit/UpdateEntry.java index 2874e82fb..97920826f 100644 --- a/app/src/main/java/com/keepassdroid/database/edit/UpdateEntry.java +++ b/app/src/main/java/com/keepassdroid/database/edit/UpdateEntry.java @@ -71,6 +71,7 @@ public class UpdateEntry extends RunnableOnFinish { public void run() { if ( mSuccess ) { // Mark group dirty if title or icon changes + // TODO CHange if not equal... Why only title and Icon ? if ( ! mBackup.getTitle().equals(mNewE.getTitle()) || ! mBackup.getIcon().equals(mNewE.getIcon()) ) { PwGroup parent = mBackup.getParent(); if ( parent != null ) { diff --git a/app/src/main/java/com/keepassdroid/database/security/ProtectedString.java b/app/src/main/java/com/keepassdroid/database/security/ProtectedString.java index 6e2aff9a0..0b1015b46 100644 --- a/app/src/main/java/com/keepassdroid/database/security/ProtectedString.java +++ b/app/src/main/java/com/keepassdroid/database/security/ProtectedString.java @@ -19,7 +19,9 @@ */ package com.keepassdroid.database.security; -public class ProtectedString { +import java.io.Serializable; + +public class ProtectedString implements Serializable { private String string; private boolean protect; diff --git a/app/src/main/java/com/kunzisoft/keepass/KeePass.java b/app/src/main/java/com/kunzisoft/keepass/KeePass.java index 93da807d1..1ef941793 100644 --- a/app/src/main/java/com/kunzisoft/keepass/KeePass.java +++ b/app/src/main/java/com/kunzisoft/keepass/KeePass.java @@ -29,8 +29,6 @@ public class KeePass extends Activity { public static final int EXIT_NORMAL = 0; public static final int EXIT_LOCK = 1; - public static final int EXIT_REFRESH = 2; - public static final int EXIT_REFRESH_TITLE = 3; @Override protected void onCreate(Bundle savedInstanceState) {