mirror of
https://github.com/beemdevelopment/Aegis.git
synced 2025-04-26 00:36:11 +00:00
Make replaceKey and removeKey functions rely on id's instead of instances
This commit is contained in:
parent
7bc4f19cf0
commit
e3024eda47
3 changed files with 36 additions and 30 deletions
|
@ -36,6 +36,7 @@ public class KeyProfileAdapter extends RecyclerView.Adapter<KeyProfileHolder> im
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeKey(KeyProfile profile) {
|
public void removeKey(KeyProfile profile) {
|
||||||
|
profile = getKeyByID(profile.getEntry().getID());
|
||||||
int position = _keyProfiles.indexOf(profile);
|
int position = _keyProfiles.indexOf(profile);
|
||||||
_keyProfiles.remove(position);
|
_keyProfiles.remove(position);
|
||||||
notifyItemRemoved(position);
|
notifyItemRemoved(position);
|
||||||
|
@ -47,12 +48,16 @@ public class KeyProfileAdapter extends RecyclerView.Adapter<KeyProfileHolder> im
|
||||||
}
|
}
|
||||||
|
|
||||||
public void replaceKey(KeyProfile newProfile) {
|
public void replaceKey(KeyProfile newProfile) {
|
||||||
for (KeyProfile oldProfile : _keyProfiles) {
|
KeyProfile oldProfile = getKeyByID(newProfile.getEntry().getID());
|
||||||
if (oldProfile.getEntry().getID() == newProfile.getEntry().getID()) {
|
|
||||||
int position = _keyProfiles.indexOf(oldProfile);
|
int position = _keyProfiles.indexOf(oldProfile);
|
||||||
_keyProfiles.set(position, newProfile);
|
_keyProfiles.set(position, newProfile);
|
||||||
notifyItemChanged(position);
|
notifyItemChanged(position);
|
||||||
return;
|
}
|
||||||
|
|
||||||
|
private KeyProfile getKeyByID(long id) {
|
||||||
|
for (KeyProfile profile : _keyProfiles) {
|
||||||
|
if (profile.getEntry().getID() == id) {
|
||||||
|
return profile;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw new AssertionError("no key profile found with the same id");
|
throw new AssertionError("no key profile found with the same id");
|
||||||
|
|
|
@ -358,9 +358,10 @@ public class MainActivity extends AegisActivity implements KeyProfileView.Listen
|
||||||
|
|
||||||
private void onEditKeyInfoResult(int resultCode, Intent data) {
|
private void onEditKeyInfoResult(int resultCode, Intent data) {
|
||||||
if (resultCode == RESULT_OK) {
|
if (resultCode == RESULT_OK) {
|
||||||
|
KeyProfile profile = (KeyProfile) data.getSerializableExtra("KeyProfile");
|
||||||
|
if (!data.getBooleanExtra("delete", false)) {
|
||||||
// this profile has been serialized/deserialized and is no longer the same instance it once was
|
// this profile has been serialized/deserialized and is no longer the same instance it once was
|
||||||
// to deal with this, the replaceKey functions are used
|
// to deal with this, the replaceKey functions are used
|
||||||
KeyProfile profile = (KeyProfile) data.getSerializableExtra("KeyProfile");
|
|
||||||
try {
|
try {
|
||||||
_db.replaceKey(profile.getEntry());
|
_db.replaceKey(profile.getEntry());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -369,14 +370,9 @@ public class MainActivity extends AegisActivity implements KeyProfileView.Listen
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_keyProfileView.replaceKey(profile);
|
_keyProfileView.replaceKey(profile);
|
||||||
|
|
||||||
// because of what's explained in the comment above, we had to replace the key before we can delete it
|
|
||||||
// this is an ugly solution and should be improved at some point
|
|
||||||
// TODO: make _db.removeKey and _db.replaceKey -> _db.updateKey work with id's instead of instances
|
|
||||||
if (data.getBooleanExtra("delete", false)) {
|
|
||||||
deleteProfile(profile);
|
|
||||||
} else {
|
|
||||||
saveDatabase();
|
saveDatabase();
|
||||||
|
} else {
|
||||||
|
deleteProfile(profile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,17 +66,13 @@ public class Database {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeKey(DatabaseEntry entry) {
|
public void removeKey(DatabaseEntry entry) {
|
||||||
|
entry = getKeyByID(entry.getID());
|
||||||
_entries.remove(entry);
|
_entries.remove(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void replaceKey(DatabaseEntry newEntry) {
|
public void replaceKey(DatabaseEntry newEntry) {
|
||||||
for (DatabaseEntry oldEntry : _entries) {
|
DatabaseEntry oldEntry = getKeyByID(newEntry.getID());
|
||||||
if (oldEntry.getID() == newEntry.getID()) {
|
|
||||||
_entries.set(_entries.indexOf(oldEntry), newEntry);
|
_entries.set(_entries.indexOf(oldEntry), newEntry);
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new AssertionError("no entry found with the same id");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void swapKeys(DatabaseEntry entry1, DatabaseEntry entry2) {
|
public void swapKeys(DatabaseEntry entry1, DatabaseEntry entry2) {
|
||||||
|
@ -86,4 +82,13 @@ public class Database {
|
||||||
public List<DatabaseEntry> getKeys() {
|
public List<DatabaseEntry> getKeys() {
|
||||||
return Collections.unmodifiableList(_entries);
|
return Collections.unmodifiableList(_entries);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private DatabaseEntry getKeyByID(long id) {
|
||||||
|
for (DatabaseEntry entry : _entries) {
|
||||||
|
if (entry.getID() == id) {
|
||||||
|
return entry;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new AssertionError("no entry found with the same id");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue