mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Fix crash when orientation change after a modification
This commit is contained in:
@@ -53,6 +53,7 @@ import com.kunzisoft.keepass.database.Database;
|
||||
import com.kunzisoft.keepass.database.PwEntry;
|
||||
import com.kunzisoft.keepass.database.PwGroup;
|
||||
import com.kunzisoft.keepass.database.PwGroupId;
|
||||
import com.kunzisoft.keepass.database.PwIcon;
|
||||
import com.kunzisoft.keepass.database.PwIconStandard;
|
||||
import com.kunzisoft.keepass.database.PwNode;
|
||||
import com.kunzisoft.keepass.database.SortNodeEnum;
|
||||
@@ -87,6 +88,7 @@ public class GroupActivity extends ListNodesActivity
|
||||
|
||||
private static final String TAG = "Group Activity:";
|
||||
|
||||
private static final String OLD_GROUP_TO_UPDATE_KEY = "OLD_GROUP_TO_UPDATE_KEY";
|
||||
private PwGroup oldGroupToUpdate;
|
||||
|
||||
public static void launch(Activity act) {
|
||||
@@ -140,6 +142,11 @@ public class GroupActivity extends ListNodesActivity
|
||||
return;
|
||||
}
|
||||
|
||||
if (savedInstanceState != null
|
||||
&& savedInstanceState.containsKey(OLD_GROUP_TO_UPDATE_KEY)) {
|
||||
oldGroupToUpdate = (PwGroup) savedInstanceState.getSerializable(OLD_GROUP_TO_UPDATE_KEY);
|
||||
}
|
||||
|
||||
// Construct main view
|
||||
setContentView(getLayoutInflater().inflate(R.layout.list_nodes_with_add_button, null));
|
||||
|
||||
@@ -525,9 +532,9 @@ public class GroupActivity extends ListNodesActivity
|
||||
@Override
|
||||
public void approveEditGroup(GroupEditDialogFragment.EditGroupDialogAction action,
|
||||
String name,
|
||||
int iconId) {
|
||||
Database database = App.getDB(); // TODO encapsulate iconFactory
|
||||
PwIconStandard icon = database.getPwDatabase().getIconFactory().getIcon(iconId);
|
||||
PwIcon icon) {
|
||||
Database database = App.getDB();
|
||||
PwIconStandard iconStandard = database.getPwDatabase().getIconFactory().getFirstIcon();
|
||||
|
||||
switch (action) {
|
||||
case CREATION:
|
||||
@@ -535,7 +542,10 @@ public class GroupActivity extends ListNodesActivity
|
||||
// Build the group
|
||||
PwGroup newGroup = database.createGroup(mCurrentGroup);
|
||||
newGroup.setName(name);
|
||||
newGroup.setIcon(icon);
|
||||
try {
|
||||
iconStandard = (PwIconStandard) icon;
|
||||
} catch (Exception e) {} // TODO custom icon
|
||||
newGroup.setIcon(iconStandard);
|
||||
|
||||
new ProgressTask(this,
|
||||
new AddGroup(this,
|
||||
@@ -547,29 +557,41 @@ public class GroupActivity extends ListNodesActivity
|
||||
break;
|
||||
case UPDATE:
|
||||
// If update add new elements
|
||||
PwGroup updateGroup = oldGroupToUpdate.clone();
|
||||
updateGroup.setName(name);
|
||||
updateGroup.setIcon(icon);
|
||||
if (oldGroupToUpdate != null) {
|
||||
PwGroup updateGroup = oldGroupToUpdate.clone();
|
||||
updateGroup.setName(name);
|
||||
try {
|
||||
iconStandard = (PwIconStandard) icon;
|
||||
} catch (Exception e) {} // TODO custom icon
|
||||
updateGroup.setIcon(iconStandard);
|
||||
|
||||
mAdapter.removeNode(oldGroupToUpdate);
|
||||
// If group update
|
||||
new ProgressTask(this,
|
||||
new UpdateGroup(this,
|
||||
App.getDB(),
|
||||
oldGroupToUpdate,
|
||||
updateGroup,
|
||||
new AfterUpdateNode(new Handler())),
|
||||
R.string.saving_database)
|
||||
.run();
|
||||
mAdapter.removeNode(oldGroupToUpdate);
|
||||
// If group update
|
||||
new ProgressTask(this,
|
||||
new UpdateGroup(this,
|
||||
App.getDB(),
|
||||
oldGroupToUpdate,
|
||||
updateGroup,
|
||||
new AfterUpdateNode(new Handler())),
|
||||
R.string.saving_database)
|
||||
.run();
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onSaveInstanceState(Bundle outState) {
|
||||
outState.putSerializable(OLD_GROUP_TO_UPDATE_KEY, oldGroupToUpdate);
|
||||
super.onSaveInstanceState(outState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancelEditGroup(GroupEditDialogFragment.EditGroupDialogAction action,
|
||||
String name,
|
||||
int iconId) {
|
||||
PwIcon iconId) {
|
||||
// Do nothing here
|
||||
}
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@ import com.kunzisoft.keepass.icons.IconPackChooser;
|
||||
|
||||
import static com.kunzisoft.keepass.dialogs.GroupEditDialogFragment.EditGroupDialogAction.CREATION;
|
||||
import static com.kunzisoft.keepass.dialogs.GroupEditDialogFragment.EditGroupDialogAction.UPDATE;
|
||||
import static com.kunzisoft.keepass.dialogs.GroupEditDialogFragment.EditGroupDialogAction.getActionFromOrdinal;
|
||||
|
||||
public class GroupEditDialogFragment extends DialogFragment
|
||||
implements IconPickerDialogFragment.IconPickerListener {
|
||||
@@ -51,12 +52,13 @@ public class GroupEditDialogFragment extends DialogFragment
|
||||
public static final String KEY_ICON_ID = "KEY_ICON_ID";
|
||||
public static final String KEY_ACTION_ID = "KEY_ACTION_ID";
|
||||
|
||||
private EditGroupDialogAction editGroupDialogAction = EditGroupDialogAction.NONE;
|
||||
|
||||
private EditGroupListener editGroupListener;
|
||||
|
||||
private EditGroupDialogAction editGroupDialogAction;
|
||||
private String nameGroup;
|
||||
private PwIcon iconGroup;
|
||||
|
||||
private ImageView iconButton;
|
||||
private int mSelectedIconID;
|
||||
|
||||
public enum EditGroupDialogAction {
|
||||
CREATION, UPDATE, NONE;
|
||||
@@ -107,52 +109,57 @@ public class GroupEditDialogFragment extends DialogFragment
|
||||
TextView nameField = root.findViewById(R.id.group_name);
|
||||
iconButton = root.findViewById(R.id.icon_button);
|
||||
|
||||
if (getArguments() != null
|
||||
&& getArguments().containsKey(KEY_ACTION_ID))
|
||||
editGroupDialogAction = EditGroupDialogAction.getActionFromOrdinal(getArguments().getInt(KEY_ACTION_ID));
|
||||
|
||||
// Retrieve the textColor to tint the icon
|
||||
int[] attrs = {android.R.attr.textColorPrimary};
|
||||
TypedArray ta = getActivity().getTheme().obtainStyledAttributes(attrs);
|
||||
int iconColor = ta.getColor(0, Color.WHITE);
|
||||
|
||||
if (getArguments() != null
|
||||
&& getArguments().containsKey(KEY_NAME)
|
||||
&& getArguments().containsKey(KEY_ICON_ID)) {
|
||||
nameField.setText(getArguments().getString(KEY_NAME));
|
||||
// populate the icon
|
||||
if (IconPackChooser.getSelectedIconPack(getContext()).tintable()) {
|
||||
App.getDB().getDrawFactory()
|
||||
.assignDatabaseIconTo(
|
||||
getContext(),
|
||||
iconButton,
|
||||
(PwIcon) getArguments().getSerializable(KEY_ICON_ID),
|
||||
true,
|
||||
iconColor);
|
||||
} else {
|
||||
App.getDB().getDrawFactory()
|
||||
.assignDatabaseIconTo(
|
||||
getContext(),
|
||||
iconButton,
|
||||
(PwIcon) getArguments().getSerializable(KEY_ICON_ID));
|
||||
}
|
||||
// Init elements
|
||||
editGroupDialogAction = EditGroupDialogAction.NONE;
|
||||
nameGroup = "";
|
||||
iconGroup = App.getDB().getPwDatabase().getIconFactory().getFirstIcon();
|
||||
|
||||
if (savedInstanceState != null
|
||||
&& savedInstanceState.containsKey(KEY_ACTION_ID)
|
||||
&& savedInstanceState.containsKey(KEY_NAME)
|
||||
&& savedInstanceState.containsKey(KEY_ICON_ID)) {
|
||||
editGroupDialogAction = getActionFromOrdinal(savedInstanceState.getInt(KEY_ACTION_ID));
|
||||
nameGroup = savedInstanceState.getString(KEY_NAME);
|
||||
iconGroup = (PwIcon) savedInstanceState.getSerializable(KEY_ICON_ID);
|
||||
|
||||
} else {
|
||||
// populate the icon with the default one if not found
|
||||
if (IconPackChooser.getSelectedIconPack(getContext()).tintable()) {
|
||||
App.getDB().getDrawFactory()
|
||||
.assignDefaultDatabaseIconTo(
|
||||
getContext(),
|
||||
iconButton,
|
||||
true,
|
||||
iconColor);
|
||||
} else {
|
||||
App.getDB().getDrawFactory()
|
||||
.assignDefaultDatabaseIconTo(
|
||||
getContext(),
|
||||
iconButton);
|
||||
|
||||
if (getArguments() != null
|
||||
&& getArguments().containsKey(KEY_ACTION_ID))
|
||||
editGroupDialogAction = EditGroupDialogAction.getActionFromOrdinal(getArguments().getInt(KEY_ACTION_ID));
|
||||
|
||||
if (getArguments() != null
|
||||
&& getArguments().containsKey(KEY_NAME)
|
||||
&& getArguments().containsKey(KEY_ICON_ID)) {
|
||||
nameGroup = getArguments().getString(KEY_NAME);
|
||||
iconGroup = (PwIcon) getArguments().getSerializable(KEY_ICON_ID);
|
||||
}
|
||||
}
|
||||
|
||||
// populate the name
|
||||
nameField.setText(nameGroup);
|
||||
// populate the icon
|
||||
if (IconPackChooser.getSelectedIconPack(getContext()).tintable()) {
|
||||
App.getDB().getDrawFactory()
|
||||
.assignDatabaseIconTo(
|
||||
getContext(),
|
||||
iconButton,
|
||||
iconGroup,
|
||||
true,
|
||||
iconColor);
|
||||
} else {
|
||||
App.getDB().getDrawFactory()
|
||||
.assignDatabaseIconTo(
|
||||
getContext(),
|
||||
iconButton,
|
||||
iconGroup);
|
||||
}
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
builder.setView(root)
|
||||
.setPositiveButton(android.R.string.ok, (dialog, id) -> {
|
||||
@@ -161,7 +168,7 @@ public class GroupEditDialogFragment extends DialogFragment
|
||||
editGroupListener.approveEditGroup(
|
||||
editGroupDialogAction,
|
||||
name,
|
||||
mSelectedIconID);
|
||||
iconGroup);
|
||||
|
||||
GroupEditDialogFragment.this.getDialog().cancel();
|
||||
}
|
||||
@@ -174,7 +181,7 @@ public class GroupEditDialogFragment extends DialogFragment
|
||||
editGroupListener.cancelEditGroup(
|
||||
editGroupDialogAction,
|
||||
name,
|
||||
mSelectedIconID);
|
||||
iconGroup);
|
||||
|
||||
GroupEditDialogFragment.this.getDialog().cancel();
|
||||
});
|
||||
@@ -190,12 +197,21 @@ public class GroupEditDialogFragment extends DialogFragment
|
||||
|
||||
@Override
|
||||
public void iconPicked(Bundle bundle) {
|
||||
mSelectedIconID = bundle.getInt(IconPickerDialogFragment.KEY_ICON_ID);
|
||||
iconButton.setImageResource(IconPackChooser.getSelectedIconPack(getContext()).iconToResId(mSelectedIconID));
|
||||
int selectedIconID = bundle.getInt(IconPickerDialogFragment.KEY_ICON_ID);
|
||||
iconButton.setImageResource(IconPackChooser.getSelectedIconPack(getContext()).iconToResId(selectedIconID));
|
||||
iconGroup = App.getDB().getPwDatabase().getIconFactory().getIcon(selectedIconID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(Bundle outState) {
|
||||
outState.putInt(KEY_ACTION_ID, editGroupDialogAction.ordinal());
|
||||
outState.putString(KEY_NAME, nameGroup);
|
||||
outState.putSerializable(KEY_ICON_ID, iconGroup);
|
||||
super.onSaveInstanceState(outState);
|
||||
}
|
||||
|
||||
public interface EditGroupListener {
|
||||
void approveEditGroup(EditGroupDialogAction action, String name, int selectedIconId);
|
||||
void cancelEditGroup(EditGroupDialogAction action, String name, int selectedIconId);
|
||||
void approveEditGroup(EditGroupDialogAction action, String name, PwIcon selectedIcon);
|
||||
void cancelEditGroup(EditGroupDialogAction action, String name, PwIcon selectedIcon);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user