mirror of
https://github.com/TimeCrafters/TimeCraftersConfigurationTool.git
synced 2025-12-15 05:02:33 +00:00
More implementation work
This commit is contained in:
@@ -6,6 +6,9 @@ import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.internal.LinkedTreeMap;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Configuration;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Preset;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.serializers.SettingsDeserializer;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.serializers.SettingsSerializer;
|
||||
|
||||
@@ -15,6 +18,7 @@ import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
@@ -100,7 +104,52 @@ public class Backend {
|
||||
}
|
||||
|
||||
public void writeNewConfig(String name) {
|
||||
// TODO: Implement
|
||||
String path = "" + TAC.CONFIGS_PATH + File.separator + name;
|
||||
File file = new File(path);
|
||||
|
||||
Configuration configuration = new Configuration(new Date(), new Date(), TAC.CONFIG_SPEC_VERSION, 0);
|
||||
ArrayList<Group> groups = new ArrayList<>();
|
||||
ArrayList<Preset> presets = new ArrayList<>();
|
||||
Config config = new Config(configuration, groups, presets);
|
||||
|
||||
Gson gson = new Gson();
|
||||
|
||||
try {
|
||||
FileWriter fileWriter = new FileWriter(file);
|
||||
fileWriter.write(gsonForConfig().toJson(config));
|
||||
fileWriter.close();
|
||||
} catch (IOException error) {
|
||||
/* TODO */
|
||||
Log.d(TAG, "writeNewConfig: IO Error: " + error.toString());
|
||||
}
|
||||
}
|
||||
|
||||
public ArrayList<String> configsList() {
|
||||
ArrayList<String> list = new ArrayList<>();
|
||||
|
||||
File directory = new File(TAC.CONFIGS_PATH);
|
||||
FilenameFilter filter = new FilenameFilter() {
|
||||
@Override
|
||||
public boolean accept(File dir, String name) {
|
||||
return name.endsWith(".json");
|
||||
}
|
||||
};
|
||||
File fileList[] = directory.listFiles(filter);
|
||||
for (File file : fileList) {
|
||||
Log.d(TAG, "configsList: " + file.getName());
|
||||
list.add(file.getName());
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
// TODO: Write De/serializers for config
|
||||
private Gson gsonForConfig() {
|
||||
// return new GsonBuilder()
|
||||
// .registerTypeAdapter(Config.class, new ConfigSerializer())
|
||||
// .registerTypeAdapter(COnfig.class, new ConfigDeserializer())
|
||||
// .create();
|
||||
return new GsonBuilder().create();
|
||||
}
|
||||
|
||||
public void settingsChanged() {
|
||||
|
||||
@@ -17,52 +17,12 @@ public class Config {
|
||||
private ArrayList<Group> groups;
|
||||
private ArrayList<Preset> presets;
|
||||
|
||||
// DELETE ME
|
||||
// TODO: DELETE ME
|
||||
public Config() {
|
||||
this.name = "DEBUG ONLY";
|
||||
this.configuration = new Configuration(new Date(), new Date(), 0, 32);
|
||||
groups = new ArrayList<>();
|
||||
presets = new ArrayList<>();
|
||||
|
||||
ArrayList<Action> actions = new ArrayList<>();
|
||||
ArrayList<Variable> variables = new ArrayList<>();
|
||||
variables.add(new Variable("VarName", "Dx90.45"));
|
||||
variables.add(new Variable("VarName2", "Fx90.45"));
|
||||
variables.add(new Variable("VarName3", "Dx90.45"));
|
||||
variables.add(new Variable("distance", "Ix90"));
|
||||
variables.add(new Variable("variable", "Dx90.45"));
|
||||
variables.add(new Variable("tea_time", "SxThe Tea Party was quite enjoyable."));
|
||||
variables.add(new Variable("tea_time", "SxThe x Tea x Party was x quite x enjoyable."));
|
||||
|
||||
actions.add(new Action("DriverOne", "This is a comment", true, variables));
|
||||
actions.add(new Action("DriverTwo", "", true, variables));
|
||||
actions.add(new Action("DriverAlt", "This is also is a comment", true, variables));
|
||||
actions.add(new Action("DriverOne", "This is a comment", true, variables));
|
||||
actions.add(new Action("DriverTwo", "", true, variables));
|
||||
actions.add(new Action("DriverAlt", "This is also is a comment", true, variables));
|
||||
actions.add(new Action("DriverOne", "This is a comment", true, variables));
|
||||
actions.add(new Action("DriverTwo", "", true, variables));
|
||||
actions.add(new Action("DriverAlt", "This is also is a comment", true, variables));
|
||||
actions.add(new Action("DriverOne", "This is a comment", true, variables));
|
||||
actions.add(new Action("DriverTwo", "", true, variables));
|
||||
actions.add(new Action("DriverAlt", "This is also is a comment", true, variables));
|
||||
|
||||
groups.add(new Group("TeleOp", actions));
|
||||
groups.add(new Group("BlueLeftA", actions));
|
||||
groups.add(new Group("TeleOp", actions));
|
||||
groups.add(new Group("BlueLeftA", actions));
|
||||
groups.add(new Group("TeleOp", actions));
|
||||
groups.add(new Group("BlueLeftA", actions));
|
||||
groups.add(new Group("TeleOp", actions));
|
||||
groups.add(new Group("BlueLeftA", actions));
|
||||
groups.add(new Group("TeleOp", actions));
|
||||
groups.add(new Group("BlueLeftA", actions));
|
||||
groups.add(new Group("TeleOp", actions));
|
||||
groups.add(new Group("BlueLeftA", actions));
|
||||
groups.add(new Group("TeleOp", actions));
|
||||
groups.add(new Group("BlueLeftA", actions));
|
||||
groups.add(new Group("TeleOp", actions));
|
||||
groups.add(new Group("BlueLeftA", actions));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,63 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.dialogs;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.R;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.backend.Backend;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialog;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class ConfigurationDialog extends TimeCraftersDialog {
|
||||
private static final String TAG = "ConfigurationDialog";
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
View root = super.onCreateView(inflater, container, savedInstanceState);
|
||||
|
||||
final LinearLayout view = root.findViewById(R.id.dialogContent);
|
||||
view.addView(getLayoutInflater().inflate(R.layout.dialog_configuration, null));
|
||||
|
||||
final TextView title = root.findViewById(R.id.dialogTitle);
|
||||
final EditText name = view.findViewById(R.id.name);
|
||||
final Button cancel = view.findViewById(R.id.cancel);
|
||||
final Button mutate = view.findViewById(R.id.mutate);
|
||||
|
||||
title.setText("Create Configuration");
|
||||
cancel.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
dismiss();
|
||||
}
|
||||
});
|
||||
|
||||
// mutate.setText(getResources().getString(R.string.dialog_update));
|
||||
mutate.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
String configName = name.getText().toString();
|
||||
|
||||
if (isValid(configName)) {
|
||||
Backend.instance().writeNewConfig(configName);
|
||||
dismiss();
|
||||
} else {
|
||||
Log.d(TAG, "onClick: InValid");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
private boolean isValid(String name) {
|
||||
return name.length() > 0 && name.matches("^[A-Za-z0-9\\._\\-]+$");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import android.widget.TextView;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.R;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.backend.Backend;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialog;
|
||||
|
||||
public class ServerDialog extends TimeCraftersDialog {
|
||||
@@ -31,6 +32,7 @@ public class ServerDialog extends TimeCraftersDialog {
|
||||
stopServer.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
// TODO: Halt server
|
||||
dismiss();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -40,7 +40,7 @@ public class ActionsFragment extends TimeCraftersFragment {
|
||||
final ScrollView scrollView = root.findViewById(R.id.scrollview);
|
||||
|
||||
this.config = Backend.instance().getConfig();
|
||||
this.group = config.getGroups().get(0);
|
||||
this.group = config.getGroups().get(getArguments().getInt("group_index"));
|
||||
if (config != null) {
|
||||
((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("Group: " + group.name);
|
||||
|
||||
@@ -90,7 +90,10 @@ public class ActionsFragment extends TimeCraftersFragment {
|
||||
edit.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Navigation.findNavController(v).navigate(R.id.variablesFragment);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putInt("group_index", getArguments().getInt("group_index"));
|
||||
bundle.putInt("action_index", group.getActions().indexOf(action));
|
||||
Navigation.findNavController(v).navigate(R.id.variablesFragment, bundle);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -87,7 +87,9 @@ public class GroupsFragment extends TimeCraftersFragment {
|
||||
name.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Navigation.findNavController(v).navigate(R.id.actionsFragment);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putInt("group_index", config.getGroups().indexOf(group));
|
||||
Navigation.findNavController(v).navigate(R.id.actionsFragment, bundle);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -37,8 +37,8 @@ public class VariablesFragment extends TimeCraftersFragment {
|
||||
final ScrollView scrollView = root.findViewById(R.id.scrollview);
|
||||
|
||||
this.config = Backend.instance().getConfig();
|
||||
this.group = config.getGroups().get(0);
|
||||
this.action = group.getActions().get(0);
|
||||
this.group = config.getGroups().get(getArguments().getInt("group_index"));
|
||||
this.action = group.getActions().get(getArguments().getInt("action_index"));
|
||||
if (config != null) {
|
||||
((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("Action: " + action.name);
|
||||
|
||||
|
||||
@@ -4,17 +4,43 @@ import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ScrollView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.R;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.backend.Backend;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.dialogs.ConfigurationDialog;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersFragment;
|
||||
|
||||
public class ConfigurationsFragment extends TimeCraftersFragment {
|
||||
public View onCreateView(@NonNull LayoutInflater inflater,
|
||||
ViewGroup container, Bundle savedInstanceState) {
|
||||
final View root = inflater.inflate(R.layout.fragment_configuration, container, false);
|
||||
final ScrollView scrollview = root.findViewById(R.id.scrollview);
|
||||
final LinearLayout configsContainer = root.findViewById(R.id.container);
|
||||
final FloatingActionButton actionButton = root.findViewById(R.id.actionButton);
|
||||
|
||||
floatingActionButtonAutoHide(actionButton, scrollview);
|
||||
actionButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
ConfigurationDialog dialog = new ConfigurationDialog();
|
||||
dialog.show(getFragmentManager(), null);
|
||||
}
|
||||
});
|
||||
|
||||
for (String config : Backend.instance().configsList()) {
|
||||
View view = inflater.inflate(R.layout.fragment_part_configuration, null);
|
||||
Button configName = view.findViewById(R.id.name);
|
||||
configName.setText(config);
|
||||
|
||||
configsContainer.addView(view);
|
||||
}
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
43
app/src/main/res/layout/dialog_configuration.xml
Normal file
43
app/src/main/res/layout/dialog_configuration.xml
Normal file
@@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView8"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:text="@string/variable_name"
|
||||
android:textColor="@color/dialogLabel" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:hint="@string/variable_name"
|
||||
android:inputType="textPersonName" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/dialog_button_margin">
|
||||
|
||||
<Button
|
||||
android:id="@+id/cancel"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="0.5"
|
||||
android:text="@string/dialog_cancel" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/mutate"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="0.5"
|
||||
android:text="@string/dialog_add" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
Reference in New Issue
Block a user