Serializable for Pw, solve bug of entry refresh

This commit is contained in:
Jeremy
2018-02-10 16:08:10 +01:00
parent d788d16020
commit 795d6fa334
14 changed files with 78 additions and 40 deletions

View File

@@ -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,12 +299,13 @@ 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 ) {
switch (requestCode) {
case EntryEditActivity.ADD_OR_UPDATE_ENTRY_REQUEST_CODE:
// TODO CHANGE Fill function to include data
fillData(true);
if ( resultCode == KeePass.EXIT_REFRESH_TITLE ) {
Intent ret = new Intent();
setResult(KeePass.EXIT_REFRESH, ret);
}
// Transit data in previous Activity
setResult(resultCode, data);
break;
}
}

View File

@@ -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);
@@ -180,19 +188,18 @@ 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();

View File

@@ -240,6 +240,23 @@ public abstract class GroupActivity extends GroupBaseActivity
pt.run();
}
@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()) {

View File

@@ -74,7 +74,6 @@ public abstract class GroupBaseActivity extends LockCloseListActivity
@Override
protected void onResume() {
super.onResume();
refreshIfDirty();
}

View File

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

View File

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

View File

@@ -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<String, String> customData = new HashMap<String, String>();
public class AutoType implements Cloneable {
public class AutoType implements Cloneable, Serializable {
private static final long OBF_OPT_NONE = 0;
public boolean enabled = true;

View File

@@ -1,5 +1,7 @@
package com.keepassdroid.database;
public abstract class PwGroupId {
import java.io.Serializable;
public abstract class PwGroupId implements Serializable {
}

View File

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

View File

@@ -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<PwNode> {
public abstract class PwNode implements Comparable<PwNode>, Serializable {
/**
* Get the type of Node

View File

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

View File

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

View File

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

View File

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