Action presets can now be properly edited, renamed, and deleted.

This commit is contained in:
2020-11-03 07:16:16 -06:00
parent 77fa799c77
commit 0640e79089
4 changed files with 111 additions and 18 deletions

View File

@@ -10,17 +10,17 @@ import android.widget.Button;
import android.widget.EditText; import android.widget.EditText;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast;
import com.google.android.material.snackbar.Snackbar; import com.google.android.material.snackbar.Snackbar;
import org.timecrafters.TimeCraftersConfigurationTool.R; import org.timecrafters.TimeCraftersConfigurationTool.R;
import org.timecrafters.TimeCraftersConfigurationTool.backend.Backend; import org.timecrafters.TimeCraftersConfigurationTool.backend.Backend;
import org.timecrafters.TimeCraftersConfigurationTool.backend.Config;
import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Action; import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Action;
import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group; import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group;
import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialog; import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialog;
import org.timecrafters.TimeCraftersConfigurationTool.ui.editor.ActionsFragment; import org.timecrafters.TimeCraftersConfigurationTool.ui.editor.ActionsFragment;
import org.timecrafters.TimeCraftersConfigurationTool.ui.editor.GroupsFragment; import org.timecrafters.TimeCraftersConfigurationTool.ui.settings.presets.PresetsFragment;
import java.util.ArrayList; import java.util.ArrayList;
@@ -63,9 +63,9 @@ public class PresetDialog extends TimeCraftersDialog {
} }
}); });
if (group != null) { if (!isNewPreset) {
title.setText("Editing " + group.name); title.setText("Editing " + action.name);
name.setText(group.name); name.setText(action.name);
mutate.setText(getResources().getString(R.string.dialog_update)); mutate.setText(getResources().getString(R.string.dialog_update));
} else { } else {
title.setText("Add Preset"); title.setText("Add Preset");
@@ -93,16 +93,30 @@ public class PresetDialog extends TimeCraftersDialog {
public void onClick(View v) { public void onClick(View v) {
final String presetName = name.getText().toString().trim(); final String presetName = name.getText().toString().trim();
Action actionClone = deepCopyAction(action); Action actionClone = deepCopyAction(action);
// if (group != null && group.name.equals(groupName)) { if (!isNewPreset && actionClone.name.equals(presetName)) {
// dismiss(); dismiss();
// } }
if (validated(presetName)) { if (validated(presetName)) {
if (action.name != presetName) { if (action.name != presetName) {
actionClone.name = presetName; if (isNewPreset) {
actionClone.name = presetName;
} else {
action.name = presetName;
}
} }
Backend.instance().getConfig().getPresets().getActions().add(actionClone); if (isNewPreset) {
Backend.instance().getConfig().getPresets().getActions().add(actionClone);
ActionsFragment fragment = (ActionsFragment) getFragmentManager().getPrimaryNavigationFragment();
Snackbar.make(fragment.getActivity().findViewById(R.id.snackbar_host), "Saved preset: " + presetName, Snackbar.LENGTH_LONG).show();
} else { // Don't repopulate presets when it is not possible
PresetsFragment fragment = (PresetsFragment) getFragmentManager().getPrimaryNavigationFragment();
if (fragment != null) {
fragment.populatePresets();
}
}
Backend.instance().configChanged(); Backend.instance().configChanged();
@@ -126,7 +140,6 @@ public class PresetDialog extends TimeCraftersDialog {
} }
} }
// TODO: fix editing preset name impossible
if (!nameUnique) { if (!nameUnique) {
message += "Name is not unique!"; message += "Name is not unique!";

View File

@@ -45,8 +45,12 @@ public class VariableDialog extends TimeCraftersDialog {
View root = super.onCreateView(inflater, container, savedInstanceState); View root = super.onCreateView(inflater, container, savedInstanceState);
if (getArguments() != null) { if (getArguments() != null) {
Group group = Backend.instance().getConfig().getGroups().get(getArguments().getInt("group_index")); if (getArguments().getBoolean("action_is_preset")) {
action = group.getActions().get(getArguments().getInt("action_index")); action = Backend.instance().getConfig().getPresets().getActions().get(getArguments().getInt("action_index"));
} else {
Group group = Backend.instance().getConfig().getGroups().get(getArguments().getInt("group_index"));
action = group.getActions().get(getArguments().getInt("action_index"));
}
if (getArguments().getInt("variable_index", -1) != -1) { if (getArguments().getInt("variable_index", -1) != -1) {
variable = action.getVariables().get(getArguments().getInt("variable_index")); variable = action.getVariables().get(getArguments().getInt("variable_index"));

View File

@@ -33,6 +33,7 @@ public class VariablesFragment extends TimeCraftersFragment {
private Config config; private Config config;
private LinearLayout container; private LinearLayout container;
private boolean actionIsPreset = false;
private Group group; private Group group;
private Action action; private Action action;
@@ -44,8 +45,13 @@ public class VariablesFragment extends TimeCraftersFragment {
final ScrollView scrollView = root.findViewById(R.id.scrollview); final ScrollView scrollView = root.findViewById(R.id.scrollview);
this.config = Backend.instance().getConfig(); this.config = Backend.instance().getConfig();
this.group = config.getGroups().get(getArguments().getInt("group_index")); this.actionIsPreset = getArguments().getBoolean("action_is_preset", false);
this.action = group.getActions().get(getArguments().getInt("action_index")); if (actionIsPreset) {
this.action = config.getPresets().getActions().get(getArguments().getInt("action_index"));
} else {
this.group = config.getGroups().get(getArguments().getInt("group_index"));
this.action = group.getActions().get(getArguments().getInt("action_index"));
}
if (config != null) { if (config != null) {
((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("Action: " + action.name); ((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("Action: " + action.name);
@@ -59,7 +65,11 @@ public class VariablesFragment extends TimeCraftersFragment {
public void onClick(View v) { public void onClick(View v) {
VariableDialog dialog = new VariableDialog(); VariableDialog dialog = new VariableDialog();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putInt("group_index", getArguments().getInt("group_index")); if (actionIsPreset) {
bundle.putBoolean("action_is_preset", actionIsPreset);
} else {
bundle.putInt("group_index", getArguments().getInt("group_index"));
}
bundle.putInt("action_index", getArguments().getInt("action_index")); bundle.putInt("action_index", getArguments().getInt("action_index"));
dialog.setArguments(bundle); dialog.setArguments(bundle);
dialog.show(getFragmentManager(), "add_variable"); dialog.show(getFragmentManager(), "add_variable");
@@ -94,7 +104,11 @@ public class VariablesFragment extends TimeCraftersFragment {
public void onClick(View v) { public void onClick(View v) {
VariableDialog dialog = new VariableDialog(); VariableDialog dialog = new VariableDialog();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putInt("group_index", getArguments().getInt("group_index")); if (actionIsPreset) {
bundle.putBoolean("action_is_preset", actionIsPreset);
} else {
bundle.putInt("group_index", getArguments().getInt("group_index"));
}
bundle.putInt("action_index", getArguments().getInt("action_index")); bundle.putInt("action_index", getArguments().getInt("action_index"));
bundle.putInt("variable_index", action.getVariables().indexOf(variable)); bundle.putInt("variable_index", action.getVariables().indexOf(variable));
dialog.setArguments(bundle); dialog.setArguments(bundle);

View File

@@ -1,5 +1,6 @@
package org.timecrafters.TimeCraftersConfigurationTool.ui.settings.presets; package org.timecrafters.TimeCraftersConfigurationTool.ui.settings.presets;
import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -10,17 +11,25 @@ import android.widget.LinearLayout;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.navigation.Navigation;
import org.timecrafters.TimeCraftersConfigurationTool.R; import org.timecrafters.TimeCraftersConfigurationTool.R;
import org.timecrafters.TimeCraftersConfigurationTool.backend.Backend; import org.timecrafters.TimeCraftersConfigurationTool.backend.Backend;
import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Action; import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Action;
import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group; import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group;
import org.timecrafters.TimeCraftersConfigurationTool.dialogs.ConfirmationDialog;
import org.timecrafters.TimeCraftersConfigurationTool.dialogs.PresetDialog;
import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialog;
import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialogRunnable;
import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersFragment; import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersFragment;
import org.timecrafters.TimeCraftersConfigurationTool.ui.editor.ActionsFragment;
import org.timecrafters.TimeCraftersConfigurationTool.ui.settings.configurations.ConfigurationsFragment;
public class PresetsFragment extends TimeCraftersFragment { public class PresetsFragment extends TimeCraftersFragment {
private LayoutInflater inflater; private LayoutInflater inflater;
private LinearLayout groupsContainer, actionsContainer; private LinearLayout groupsContainer, actionsContainer;
private View root; private View root;
private String deletePresetKey = "deletePresetKey";
@Nullable @Nullable
@Override @Override
@@ -35,7 +44,7 @@ public class PresetsFragment extends TimeCraftersFragment {
return root; return root;
} }
void populatePresets() { public void populatePresets() {
groupsContainer.removeAllViews(); groupsContainer.removeAllViews();
actionsContainer.removeAllViews(); actionsContainer.removeAllViews();
@@ -55,6 +64,7 @@ public class PresetsFragment extends TimeCraftersFragment {
i = 0; i = 0;
for (Action action : Backend.instance().getConfig().getPresets().getActions()) { for (Action action : Backend.instance().getConfig().getPresets().getActions()) {
final int action_index = i;
View view = inflater.inflate(R.layout.fragment_part_presets, null); View view = inflater.inflate(R.layout.fragment_part_presets, null);
if (i % 2 == 0) { // even if (i % 2 == 0) { // even
@@ -68,6 +78,58 @@ public class PresetsFragment extends TimeCraftersFragment {
ImageButton delete = view.findViewById(R.id.delete); ImageButton delete = view.findViewById(R.id.delete);
name.setText(action.name); name.setText(action.name);
name.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle bundle = new Bundle();
bundle.putBoolean("action_is_preset", true);
bundle.putInt("action_index", action_index);
Navigation.findNavController(v).navigate(R.id.variables_fragment, bundle);
}
});
rename.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PresetDialog dialog = new PresetDialog();
Bundle bundle = new Bundle();
bundle.putInt("action_index", action_index);
dialog.setArguments(bundle);
dialog.show(getFragmentManager(), "preset_dialog");
}
});
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ConfirmationDialog dialog = new ConfirmationDialog();
Bundle bundle = new Bundle();
bundle.putString("message", "Delete Preset?");
bundle.putString("action", deletePresetKey);
TimeCraftersDialogRunnable action = new TimeCraftersDialogRunnable() {
@Override
public void run(TimeCraftersDialog dialog) {
Backend.getStorage().remove(deletePresetKey);
if (Backend.instance().getConfig().getPresets().getActions().get(action_index) != null) {
Backend.instance().getConfig().getPresets().getActions().remove(action_index);
Backend.instance().configChanged();
}
PresetsFragment fragment = (PresetsFragment) dialog.getFragmentManager().getPrimaryNavigationFragment();
if (fragment != null) {
fragment.populatePresets();
}
}
} ;
Backend.getStorage().put(deletePresetKey, action);
dialog.setArguments(bundle);
dialog.show(getFragmentManager(), deletePresetKey);
}
});
actionsContainer.addView(view); actionsContainer.addView(view);
i++; i++;