diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/MainActivity.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/MainActivity.java index 6901837..faf3f9a 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/MainActivity.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/MainActivity.java @@ -2,8 +2,6 @@ package org.timecrafters.TimeCraftersConfigurationTool; import android.Manifest; import android.os.Bundle; -import android.util.Log; -import android.widget.Toast; import com.google.android.material.bottomnavigation.BottomNavigationView; @@ -16,7 +14,6 @@ import androidx.navigation.ui.AppBarConfiguration; import androidx.navigation.ui.NavigationUI; import org.timecrafters.TimeCraftersConfigurationTool.backend.Backend; -import org.timecrafters.TimeCraftersConfigurationTool.dialogs.Dialog; import org.timecrafters.TimeCraftersConfigurationTool.dialogs.PermissionsRequestDialog; import static android.content.pm.PackageManager.PERMISSION_GRANTED; diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Config.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Config.java index 02d8524..eb60ef8 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Config.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Config.java @@ -2,9 +2,12 @@ package org.timecrafters.TimeCraftersConfigurationTool.backend; import com.google.gson.Gson; -import java.io.Reader; -import java.nio.file.Files; -import java.nio.file.Paths; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Configuration; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Action; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Variable; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Preset; + import java.util.ArrayList; import java.util.Date; @@ -24,11 +27,12 @@ public class Config { ArrayList actions = new ArrayList<>(); ArrayList variables = new ArrayList<>(); variables.add(new Variable("VarName", "Dx90.45")); - variables.add(new Variable("VarName2", "FxFx90.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)); @@ -96,129 +100,4 @@ public class Config { this.groups = config.groups; this.presets = config.presets; } - - public class Configuration { - public Date createdAt, updatedAt; - private int specVersion; - public int revision; - - public Configuration(Date createdAt, Date updatedAt, int specVersion, int revision) { - this.createdAt = createdAt; - this.updatedAt = updatedAt; - this.specVersion = specVersion; - this.revision = revision; - } - - public int getSpecVersion() { return specVersion; } - } - - public class Preset { - private ArrayList groups; - private ArrayList actions; - - public Preset(ArrayList groups, ArrayList actions) { - this.groups = groups; - this.actions = actions; - } - } - - public class Group { - public String name; - private ArrayList actions; - - public Group(String name, ArrayList actions) { - this.name = name; - this.actions = actions; - } - - public ArrayList getActions() { - return actions; - } - } - - public class Action { - public String name, comment; - public boolean enabled; - private ArrayList variables; - - public Action(String name, String comment, boolean enabled, ArrayList variables) { - this.name = name; - this.comment = comment; - this.enabled = enabled; - this.variables = variables; - } - - public ArrayList getVariables() { return variables; } - } - - public class Variable { - public String name; - private String value; - - public Variable(String name, String value) { - this.name = name; - this.value = value; - } - - public T value() { - return valueOf(); - } - - @SuppressWarnings("unchecked") - public T valueOf() { - String[] split = value.split("x"); - - switch (split[0]) { - case "B": { - return (T) Boolean.valueOf(split[(split.length-1)]); - } - case "D": { - return (T) Double.valueOf(split[(split.length-1)]); - } - case "F": { - return (T) Float.valueOf(split[(split.length-1)]); - } - case "I": { - return (T) Integer.valueOf(split[(split.length-1)]); - } - case "L": { - return (T) Long.valueOf(split[(split.length-1)]); - } - case "S": { - return (T) String.valueOf(split[(split.length-1)]); - } - default: { - return null; - } - } - } - - public String typeOf(String value) { - String[] split = value.split("x"); - - switch (split[0]) { - case "B": { - return "Boolean"; - } - case "D": { - return "Double"; - } - case "F": { - return "Float"; - } - case "I": { - return "Integer"; - } - case "L": { - return "Long"; - } - case "S": { - return "String"; - } - default: { - return "=!UNKNOWN!="; - } - } - } - } } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Action.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Action.java new file mode 100644 index 0000000..c55bbea --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Action.java @@ -0,0 +1,18 @@ +package org.timecrafters.TimeCraftersConfigurationTool.backend.config; + +import java.util.ArrayList; + +public class Action { + public String name, comment; + public boolean enabled; + private ArrayList variables; + + public Action(String name, String comment, boolean enabled, ArrayList variables) { + this.name = name; + this.comment = comment; + this.enabled = enabled; + this.variables = variables; + } + + public ArrayList getVariables() { return variables; } +} diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Configuration.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Configuration.java new file mode 100644 index 0000000..7c2af53 --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Configuration.java @@ -0,0 +1,18 @@ +package org.timecrafters.TimeCraftersConfigurationTool.backend.config; + +import java.util.Date; + +public class Configuration { + public Date createdAt, updatedAt; + private int specVersion; + public int revision; + + public Configuration(Date createdAt, Date updatedAt, int specVersion, int revision) { + this.createdAt = createdAt; + this.updatedAt = updatedAt; + this.specVersion = specVersion; + this.revision = revision; + } + + public int getSpecVersion() { return specVersion; } +} \ No newline at end of file diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Group.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Group.java new file mode 100644 index 0000000..a06ada5 --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Group.java @@ -0,0 +1,17 @@ +package org.timecrafters.TimeCraftersConfigurationTool.backend.config; + +import java.util.ArrayList; + +public class Group { + public String name; + private ArrayList actions; + + public Group(String name, ArrayList actions) { + this.name = name; + this.actions = actions; + } + + public ArrayList getActions() { + return actions; + } +} diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Preset.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Preset.java new file mode 100644 index 0000000..2c5c35e --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Preset.java @@ -0,0 +1,14 @@ +package org.timecrafters.TimeCraftersConfigurationTool.backend.config; + + +import java.util.ArrayList; + +public class Preset { + private ArrayList groups; + private ArrayList actions; + + public Preset(ArrayList groups, ArrayList actions) { + this.groups = groups; + this.actions = actions; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Variable.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Variable.java new file mode 100644 index 0000000..2132a55 --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/config/Variable.java @@ -0,0 +1,92 @@ +package org.timecrafters.TimeCraftersConfigurationTool.backend.config; + +import android.util.Log; + +import java.util.Arrays; + +public class Variable { + public String name; + private String value; + + public Variable(String name, String value) { + this.name = name; + this.value = value; + } + + public String rawValue() { + return value; + } + + public T value() { + return valueOf(value); + } + + public void setValue(String value) { + this.value = value; + } + + @SuppressWarnings("unchecked") + static public T valueOf(String value) { + String[] split = value.split("x", 2); +// Log.d("Variable", "valueOf split: " + Arrays.toString(split)); + + switch (split[0]) { + case "B": { + return (T) Boolean.valueOf(split[(split.length-1)]); + } + case "D": { + return (T) Double.valueOf(split[(split.length-1)]); + } + case "F": { + return (T) Float.valueOf(split[(split.length-1)]); + } + case "I": { + return (T) Integer.valueOf(split[(split.length-1)]); + } + case "L": { + return (T) Long.valueOf(split[(split.length-1)]); + } + case "S": { + String string = ""; + int i = 0; + for(String str : split) { + if (i == 0) { i++; continue; } + + string += str; + } + return (T) string; + } + default: { + return null; + } + } + } + + static public String typeOf(String value) { + String[] split = value.split("x"); + + switch (split[0]) { + case "B": { + return "Boolean"; + } + case "D": { + return "Double"; + } + case "F": { + return "Float"; + } + case "I": { + return "Integer"; + } + case "L": { + return "Long"; + } + case "S": { + return "String"; + } + default: { + return "=!UNKNOWN!="; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ActionDialog.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ActionDialog.java new file mode 100644 index 0000000..5c647e4 --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ActionDialog.java @@ -0,0 +1,99 @@ +package org.timecrafters.TimeCraftersConfigurationTool.dialogs; + +import android.os.Bundle; +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.Switch; +import android.widget.TextView; + +import org.timecrafters.TimeCraftersConfigurationTool.R; +import org.timecrafters.TimeCraftersConfigurationTool.backend.Backend; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Action; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Variable; +import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialog; + +import java.util.ArrayList; + +public class ActionDialog extends TimeCraftersDialog { + final String TAG = "ActionDialog"; + private TextView commentTextView; + private Switch nameSwitch; + private Group group; + private Action action; + + public ActionDialog() {} + + public ActionDialog(Group group) { + this.group = group; + } + + public ActionDialog(Action action, Switch nameSwitch, TextView commentTextView) { + this.action = action; + this.nameSwitch = nameSwitch; + this.commentTextView = commentTextView; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + setCancelable(false); + + View root = super.onCreateView(inflater, container, savedInstanceState); + + final TextView title = root.findViewById(R.id.dialogTitle); + final LinearLayout view = root.findViewById(R.id.dialogContent); + view.addView(getLayoutInflater().inflate(R.layout.dialog_edit_action, null)); + final EditText name = view.findViewById(R.id.name); + final EditText comment = view.findViewById(R.id.comment); + + final Button cancel = view.findViewById(R.id.cancel); + final Button mutate = view.findViewById(R.id.mutate); + cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dismiss(); + } + }); + + if (action != null) { + title.setText("Editing " + action.name); + name.setText(action.name); + comment.setText(action.comment); + + mutate.setText("Update"); + } else { + title.setText("Add Action"); + } + + mutate.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (action != null) { + action.name = name.getText().toString(); + + nameSwitch.setText(name.getText().toString()); + commentTextView.setText(comment.getText().toString()); + + if (comment.getText().toString().length() > 0) { + commentTextView.setVisibility(View.VISIBLE); + } else { + commentTextView.setVisibility(View.GONE); + } + } else { + Action action = new Action(name.getText().toString(), comment.getText().toString(), true, new ArrayList()); + + group.getActions().add(action); + } + + Backend.instance().configChanged(); + dismiss(); + } + }); + + return root; + } +} diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ConfigurationDialog.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ConfigurationDialog.java new file mode 100644 index 0000000..f9e0e1a --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ConfigurationDialog.java @@ -0,0 +1,6 @@ +package org.timecrafters.TimeCraftersConfigurationTool.dialogs; + +import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialog; + +public class ConfigurationDialog extends TimeCraftersDialog { +} diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ConfirmationDialog.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ConfirmationDialog.java new file mode 100644 index 0000000..6196f0e --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ConfirmationDialog.java @@ -0,0 +1,53 @@ +package org.timecrafters.TimeCraftersConfigurationTool.dialogs; + +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.TextView; + +import androidx.constraintlayout.widget.ConstraintLayout; + +import org.timecrafters.TimeCraftersConfigurationTool.R; +import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialog; + +public class ConfirmationDialog extends TimeCraftersDialog { + private String title, message; + private Runnable action; + + public ConfirmationDialog() {} + + public ConfirmationDialog(String title, String message, Runnable action) { + this.title = title; + this.message = message; + this.action = action; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View root = super.onCreateView(inflater, container, savedInstanceState); + + final TextView title = root.findViewById(R.id.dialogTitle); + final ConstraintLayout titlebar = root.findViewById(R.id.titlebar); + final LinearLayout view = root.findViewById(R.id.dialogContent); + view.addView(getLayoutInflater().inflate(R.layout.dialog_confirmation, null)); + final TextView messageView = root.findViewById(R.id.message); + final Button cancel = root.findViewById(R.id.cancel); + final Button confirm = root.findViewById(R.id.confirm); + + titlebar.setBackgroundColor(getResources().getColor(R.color.dialogAlert)); + title.setText(this.title); + messageView.setText(message); + + confirm.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dismiss(); + } + }); + + return root; + } +} diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/GroupDialog.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/GroupDialog.java new file mode 100644 index 0000000..2186326 --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/GroupDialog.java @@ -0,0 +1,76 @@ +package org.timecrafters.TimeCraftersConfigurationTool.dialogs; + +import android.os.Bundle; +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.backend.config.Action; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group; +import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialog; + +import java.util.ArrayList; + +public class GroupDialog extends TimeCraftersDialog { + final String TAG = "GroupDialog"; + private Group group; + + public GroupDialog() {} + + public GroupDialog(Group group) { + this.group = group; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + setCancelable(false); + + View root = super.onCreateView(inflater, container, savedInstanceState); + + final TextView title = root.findViewById(R.id.dialogTitle); + final LinearLayout view = root.findViewById(R.id.dialogContent); + view.addView(getLayoutInflater().inflate(R.layout.dialog_edit_group, null)); + final EditText name = view.findViewById(R.id.name); + + final Button cancel = view.findViewById(R.id.cancel); + final Button mutate = view.findViewById(R.id.mutate); + cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dismiss(); + } + }); + + if (group != null) { + title.setText("Editing " + group.name); + name.setText(group.name); + mutate.setText(getResources().getString(R.string.dialog_update)); + } else { + title.setText("Add Group"); + } + + mutate.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (group != null) { + group.name = name.getText().toString(); + } else { + Group group = new Group(name.getText().toString(), new ArrayList()); + + Backend.instance().getConfig().getGroups().add(group); + } + + Backend.instance().configChanged(); + dismiss(); + } + }); + + return root; + } +} diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/PermissionsRequestDialog.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/PermissionsRequestDialog.java index 2b3b829..181bd61 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/PermissionsRequestDialog.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/PermissionsRequestDialog.java @@ -1,6 +1,5 @@ package org.timecrafters.TimeCraftersConfigurationTool.dialogs; -import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -9,22 +8,20 @@ import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; -import androidx.annotation.NonNull; - import org.timecrafters.TimeCraftersConfigurationTool.MainActivity; import org.timecrafters.TimeCraftersConfigurationTool.R; -import org.timecrafters.TimeCraftersConfigurationTool.backend.Backend; import org.timecrafters.TimeCraftersConfigurationTool.backend.TAC; +import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialog; -public class PermissionsRequestDialog extends Dialog { +public class PermissionsRequestDialog extends TimeCraftersDialog { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setCancelable(false); - View v = super.onCreateView(inflater, container, savedInstanceState); + View root = super.onCreateView(inflater, container, savedInstanceState); - ((TextView)v.findViewById(R.id.dialogTitle)).setText("Storage Permission Required"); - LinearLayout view = v.findViewById(R.id.dialogContent); + ((TextView)root.findViewById(R.id.dialogTitle)).setText("Storage Permission Required"); + LinearLayout view = root.findViewById(R.id.dialogContent); view.addView(getLayoutInflater().inflate(R.layout.dialog_permission_request, null)); ((TextView)view.findViewById(R.id.message)).setText("Permission is required to write to external storage:\n\n" + TAC.ROOT_PATH); @@ -48,6 +45,6 @@ public class PermissionsRequestDialog extends Dialog { }); - return v; + return root; } } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ServerDialog.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ServerDialog.java new file mode 100644 index 0000000..1b75fc4 --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ServerDialog.java @@ -0,0 +1,40 @@ +package org.timecrafters.TimeCraftersConfigurationTool.dialogs; + +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.TextView; + +import androidx.constraintlayout.widget.ConstraintLayout; + +import org.timecrafters.TimeCraftersConfigurationTool.R; +import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialog; + +public class ServerDialog extends TimeCraftersDialog { + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + setCancelable(false); + + View root = super.onCreateView(inflater, container, savedInstanceState); + + final TextView title = root.findViewById(R.id.dialogTitle); + final ConstraintLayout titlebar = root.findViewById(R.id.titlebar); + final LinearLayout view = root.findViewById(R.id.dialogContent); + view.addView(getLayoutInflater().inflate(R.layout.dialog_server, null)); + + title.setText(getResources().getString(R.string.tacnet_server_status)); + + final Button stopServer = root.findViewById(R.id.stop_server); + stopServer.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dismiss(); + } + }); + + return root; + } +} diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/VariableDialog.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/VariableDialog.java index 9eafef7..bed7ea2 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/VariableDialog.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/VariableDialog.java @@ -11,6 +11,7 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import android.widget.CompoundButton; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.PopupMenu; @@ -18,22 +19,44 @@ import android.widget.Switch; import android.widget.TextView; import org.timecrafters.TimeCraftersConfigurationTool.R; +import org.timecrafters.TimeCraftersConfigurationTool.backend.Backend; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Action; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Variable; +import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialog; -public class VariableDialog extends Dialog { +public class VariableDialog extends TimeCraftersDialog { final String TAG = "VariableDialog"; + private Action action; + private Variable variable; + + private TextView nameTextView, valueTextView; Button variableType; - EditText variableValue; + EditText variableName, variableValue; Switch variableValueBoolean; + public VariableDialog() { + } + + public VariableDialog(Action action) { + this.action = action; + } + + public VariableDialog(Variable variable, TextView nameTextView, TextView valueTextView) { + this.variable = variable; + this.nameTextView = nameTextView; + this.valueTextView = valueTextView; + } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setCancelable(false); - View v = super.onCreateView(inflater, container, savedInstanceState); + View root = super.onCreateView(inflater, container, savedInstanceState); - ((TextView)v.findViewById(R.id.dialogTitle)).setText("Add Variable"); - LinearLayout view = v.findViewById(R.id.dialogContent); + final TextView title = root.findViewById(R.id.dialogTitle); + LinearLayout view = root.findViewById(R.id.dialogContent); view.addView(getLayoutInflater().inflate(R.layout.dialog_edit_variable, null)); + variableName = view.findViewById(R.id.variableName); variableType = view.findViewById(R.id.variableType); variableType.setOnClickListener(new View.OnClickListener() { @Override @@ -48,10 +71,8 @@ public class VariableDialog extends Dialog { } }); - variableValue = v.findViewById(R.id.variableValue); - variableValueBoolean = v.findViewById(R.id.variableValueBoolean); - - setVariableType("Double"); + variableValue = root.findViewById(R.id.variableValue); + variableValueBoolean = root.findViewById(R.id.variableValueBoolean); Button cancelButton = view.findViewById(R.id.cancel); Button mutateButton = view.findViewById(R.id.mutate); @@ -62,14 +83,62 @@ public class VariableDialog extends Dialog { } }); + if (variable != null) { + title.setText("Editing " + variable.name); + mutateButton.setText(getResources().getString(R.string.dialog_update)); + variableName.setText(variable.name); + setVariableType(Variable.typeOf(variable.rawValue())); + + if (variableType.getText().toString().toLowerCase().equals("boolean")) { + variableValueBoolean.setChecked((boolean)variable.value()); + } else { + variableValue.setText(variable.value().toString()); + } + } else { + title.setText("Add Variable"); + setVariableType("Double"); + } + + styleSwitch(variableValueBoolean, variableValueBoolean.isChecked()); + variableValueBoolean.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + styleSwitch(buttonView, isChecked); + } + }); + mutateButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + String value = "" + variableType.getText().toString().substring(0, 1) + "x"; + if (variableType.getText().toString().substring(0, 1).equals("B")) { + if (variableValueBoolean.isChecked()) { + value += "true"; + } else { + value += "false"; + } + } else { + value += variableValue.getText().toString(); + } + + if (variable != null) { + variable.name = variableName.getText().toString(); + + Log.d(TAG, "Value: " + value); + variable.setValue(value); + nameTextView.setText(variable.name); + valueTextView.setText(variable.value().toString()); + } else { + Variable variable = new Variable(variableName.getText().toString(), value); + action.getVariables().add(variable); + } + + Backend.instance().configChanged(); dismiss(); } }); - return v; + return root; } private void showVariableTypeMenu() { diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/Dialog.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/library/TimeCraftersDialog.java similarity index 75% rename from app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/Dialog.java rename to app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/library/TimeCraftersDialog.java index d967363..4c164fd 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/Dialog.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/library/TimeCraftersDialog.java @@ -1,4 +1,4 @@ -package org.timecrafters.TimeCraftersConfigurationTool.dialogs; +package org.timecrafters.TimeCraftersConfigurationTool.library; import android.graphics.Point; import android.os.Bundle; @@ -6,6 +6,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; +import android.widget.CompoundButton; import android.widget.ImageButton; import androidx.annotation.Nullable; @@ -13,7 +14,7 @@ import androidx.fragment.app.DialogFragment; import org.timecrafters.TimeCraftersConfigurationTool.R; -public class Dialog extends DialogFragment { +public class TimeCraftersDialog extends DialogFragment { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -49,4 +50,12 @@ public class Dialog extends DialogFragment { getActivity().getWindowManager().getDefaultDisplay().getSize(point); getDialog().getWindow().setLayout((int) (point.x * 0.8), ViewGroup.LayoutParams.WRAP_CONTENT); } + + public void styleSwitch(CompoundButton buttonView, boolean isChecked) { + if (isChecked) { + buttonView.setBackground(getResources().getDrawable(R.drawable.button)); + } else { + buttonView.setBackground(getResources().getDrawable(R.drawable.dangerous_button)); + } + } } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/library/TimeCraftersFragment.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/library/TimeCraftersFragment.java new file mode 100644 index 0000000..4565ed2 --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/library/TimeCraftersFragment.java @@ -0,0 +1,38 @@ +package org.timecrafters.TimeCraftersConfigurationTool.library; + +import android.os.Build; +import android.view.View; +import android.widget.CompoundButton; +import android.widget.ScrollView; + +import com.google.android.material.floatingactionbutton.FloatingActionButton; + +import org.timecrafters.TimeCraftersConfigurationTool.R; + +public class TimeCraftersFragment extends androidx.fragment.app.Fragment { + public void floatingActionButtonAutoHide(final FloatingActionButton button, final ScrollView view) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // API Level 23 (Android 6) + view.setOnScrollChangeListener(new View.OnScrollChangeListener() { + @Override + public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { + final int dy = scrollY - oldScrollY; + if (dy > 0 && button.getVisibility() == View.VISIBLE) { + button.hide(); + } else if (dy < 0 && button.getVisibility() == View.GONE) { + button.show(); + } else if (!view.canScrollVertically(1)) { + button.show(); + } + } + }); + } + } + + public void styleSwitch(CompoundButton buttonView, boolean isChecked) { + if (isChecked) { + buttonView.setBackground(getResources().getDrawable(R.drawable.button)); + } else { + buttonView.setBackground(getResources().getDrawable(R.drawable.dangerous_button)); + } + } +} diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/ActionsFragment.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/ActionsFragment.java index cfe4109..2e74000 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/ActionsFragment.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/ActionsFragment.java @@ -4,26 +4,31 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.Button; import android.widget.CompoundButton; import android.widget.ImageButton; import android.widget.LinearLayout; +import android.widget.ScrollView; import android.widget.Switch; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; -import androidx.fragment.app.Fragment; import androidx.navigation.Navigation; +import com.google.android.material.floatingactionbutton.FloatingActionButton; + import org.timecrafters.TimeCraftersConfigurationTool.R; 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.Group; +import org.timecrafters.TimeCraftersConfigurationTool.dialogs.ActionDialog; +import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersFragment; -public class ActionsFragment extends Fragment { +public class ActionsFragment extends TimeCraftersFragment { private Config config; - private Config.Group group; + private Group group; private LinearLayout container; @Nullable @@ -31,6 +36,8 @@ public class ActionsFragment extends Fragment { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { final View root = inflater.inflate(R.layout.fragment_actions, container, false); this.container = root.findViewById(R.id.container); + final FloatingActionButton actionButton = root.findViewById(R.id.actionButton); + final ScrollView scrollView = root.findViewById(R.id.scrollview); this.config = Backend.instance().getConfig(); this.group = config.getGroups().get(0); @@ -39,18 +46,28 @@ public class ActionsFragment extends Fragment { populateActions(); } + + floatingActionButtonAutoHide(actionButton, scrollView); + actionButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ActionDialog dialog = new ActionDialog(group); + dialog.show(getFragmentManager(), null); + } + }); + return root; } private void populateActions() { int i = 0; - for (final Config.Action action : group.getActions()) { - View view = View.inflate(getContext(), R.layout.fragment_part_actions, null); - Switch name = view.findViewById(R.id.name); - ImageButton edit = view.findViewById(R.id.edit); - ImageButton rename = view.findViewById(R.id.rename); - ImageButton delete = view.findViewById(R.id.delete); - TextView comment = view.findViewById(R.id.comment); + for (final Action action : group.getActions()) { + final View view = View.inflate(getContext(), R.layout.fragment_part_actions, null); + final Switch name = view.findViewById(R.id.name); + final ImageButton edit = view.findViewById(R.id.edit); + final ImageButton rename = view.findViewById(R.id.rename); + final ImageButton delete = view.findViewById(R.id.delete); + final TextView comment = view.findViewById(R.id.comment); if (i % 2 == 0) { // even view.setBackgroundColor(getResources().getColor(R.color.list_even)); @@ -83,16 +100,16 @@ public class ActionsFragment extends Fragment { comment.setVisibility(View.GONE); } + rename.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ActionDialog dialog = new ActionDialog(action, name, comment); + dialog.show(getFragmentManager(), null); + } + }); + i++; container.addView(view); } } - - private void styleSwitch(CompoundButton buttonView, boolean isChecked) { - if (isChecked) { - buttonView.setBackground(getResources().getDrawable(R.drawable.button)); - } else { - buttonView.setBackground(getResources().getDrawable(R.drawable.dangerous_button)); - } - } } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/EditorFragment.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/GroupsFragment.java similarity index 57% rename from app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/EditorFragment.java rename to app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/GroupsFragment.java index 63add74..7294e30 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/EditorFragment.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/GroupsFragment.java @@ -8,20 +8,25 @@ import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageButton; import android.widget.LinearLayout; +import android.widget.ScrollView; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; -import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProviders; import androidx.navigation.Navigation; +import com.google.android.material.floatingactionbutton.FloatingActionButton; + import org.timecrafters.TimeCraftersConfigurationTool.R; import org.timecrafters.TimeCraftersConfigurationTool.backend.Backend; import org.timecrafters.TimeCraftersConfigurationTool.backend.Config; -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.GroupDialog; +import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersFragment; -public class EditorFragment extends Fragment { +public class GroupsFragment extends TimeCraftersFragment { final private String TAG = "EditorFragment"; @@ -34,11 +39,24 @@ public class EditorFragment extends Fragment { ViewGroup container, Bundle savedInstanceState) { editorViewModel = ViewModelProviders.of(this).get(EditorViewModel.class); - final View root = inflater.inflate(R.layout.fragment_editor, container, false); + final View root = inflater.inflate(R.layout.fragment_groups, container, false); this.configName = root.findViewById(R.id.configuration_name); this.container = root.findViewById(R.id.container); + final FloatingActionButton actionButton = root.findViewById(R.id.actionButton); + final ScrollView scrollView = root.findViewById(R.id.scrollview); + actionButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + GroupDialog dialog = new GroupDialog(); + dialog.show(getFragmentManager(), null); + } + }); + + floatingActionButtonAutoHide(actionButton, scrollView); + + if (Backend.instance() != null) + this.config = Backend.instance().getConfig(); - this.config = Backend.instance().getConfig(); if (config != null) { configName.setVisibility(View.GONE); ((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("Config: " + config.getName()); @@ -53,7 +71,7 @@ public class EditorFragment extends Fragment { private void populateGroups() { int i = 0; - for (Group group : config.getGroups()) { + for (final Group group : config.getGroups()) { View view = View.inflate(getContext(), R.layout.fragment_part_groups, null); Button name = view.findViewById(R.id.name); ImageButton rename = view.findViewById(R.id.rename); @@ -73,6 +91,22 @@ public class EditorFragment extends Fragment { } }); + rename.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + GroupDialog dialog = new GroupDialog(group); + dialog.show(getFragmentManager(), null); + } + }); + + delete.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ConfirmationDialog dialog = new ConfirmationDialog("Are you sure?", "Really delete " + group.name + "?", null); + dialog.show(getFragmentManager(), null); + } + }); + i++; container.addView(view); } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/VariablesFragment.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/VariablesFragment.java index d612144..50d19ab 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/VariablesFragment.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/VariablesFragment.java @@ -4,32 +4,37 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.Button; import android.widget.ImageButton; import android.widget.LinearLayout; +import android.widget.ScrollView; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; -import androidx.fragment.app.Fragment; -import androidx.navigation.NavAction; -import androidx.navigation.Navigation; -import androidx.navigation.ui.NavigationUI; + +import com.google.android.material.floatingactionbutton.FloatingActionButton; import org.timecrafters.TimeCraftersConfigurationTool.R; 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.Group; +import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Variable; +import org.timecrafters.TimeCraftersConfigurationTool.dialogs.VariableDialog; +import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersFragment; -public class VariablesFragment extends Fragment { +public class VariablesFragment extends TimeCraftersFragment { private Config config; private LinearLayout container; - private Config.Group group; - private Config.Action action; + private Group group; + private Action action; public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View root = inflater.inflate(R.layout.fragment_variables, container, false); this.container = root.findViewById(R.id.container); + final FloatingActionButton actionButton = root.findViewById(R.id.actionButton); + final ScrollView scrollView = root.findViewById(R.id.scrollview); this.config = Backend.instance().getConfig(); this.group = config.getGroups().get(0); @@ -40,15 +45,24 @@ public class VariablesFragment extends Fragment { populateVariables(); } + floatingActionButtonAutoHide(actionButton, scrollView); + actionButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + VariableDialog dialog = new VariableDialog(action); + dialog.show(getFragmentManager(), null); + } + }); + return root; } private void populateVariables() { int i = 0; - for (Config.Variable variable : action.getVariables()) { + for (final Variable variable : action.getVariables()) { View view = View.inflate(getContext(), R.layout.fragment_part_variables, null); - TextView name = view.findViewById(R.id.name); - TextView value = view.findViewById(R.id.value); + final TextView name = view.findViewById(R.id.name); + final TextView value = view.findViewById(R.id.value); ImageButton rename = view.findViewById(R.id.rename); ImageButton delete = view.findViewById(R.id.delete); @@ -61,6 +75,14 @@ public class VariablesFragment extends Fragment { name.setText(variable.name); value.setText("" + variable.value()); + rename.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + VariableDialog dialog = new VariableDialog(variable, name, value); + dialog.show(getFragmentManager(), null); + } + }); + i++; container.addView(view); } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/search/SearchFragment.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/search/SearchFragment.java index 83433f9..ab20424 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/search/SearchFragment.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/search/SearchFragment.java @@ -4,17 +4,16 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import org.timecrafters.TimeCraftersConfigurationTool.R; +import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersFragment; -public class SearchFragment extends Fragment { +public class SearchFragment extends TimeCraftersFragment { private SearchViewModel searchViewModel; diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/SettingsFragment.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/SettingsFragment.java index 04b3f62..b467eb0 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/SettingsFragment.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/SettingsFragment.java @@ -1,6 +1,5 @@ package org.timecrafters.TimeCraftersConfigurationTool.ui.settings; -import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -9,14 +8,14 @@ import android.widget.Button; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import androidx.navigation.Navigation; import org.timecrafters.TimeCraftersConfigurationTool.R; +import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersFragment; -public class SettingsFragment extends Fragment { +public class SettingsFragment extends TimeCraftersFragment { private SettingsViewModel settingsViewModel; diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/configurations/ConfigurationsFragment.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/configurations/ConfigurationsFragment.java index c4aa1c6..e7c078d 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/configurations/ConfigurationsFragment.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/configurations/ConfigurationsFragment.java @@ -7,23 +7,14 @@ import android.view.ViewGroup; import android.widget.LinearLayout; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.fragment.app.Fragment; import org.timecrafters.TimeCraftersConfigurationTool.R; +import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersFragment; -public class ConfigurationsFragment extends Fragment { +public class ConfigurationsFragment extends TimeCraftersFragment { public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - final View root = inflater.inflate(R.layout.activity_manage_configurations, container, false); - - - LinearLayout v = root.findViewById(R.id.configurations); - v.setBackgroundColor(getResources().getColor(R.color.list_even)); - - View vv = v.inflate(getContext(), R.layout.fragment_configuration, null); - v.addView(vv); + final View root = inflater.inflate(R.layout.fragment_configuration, container, false); return root; } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/presets/PresetsFragment.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/presets/PresetsFragment.java index 96a51b1..978310d 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/presets/PresetsFragment.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/presets/PresetsFragment.java @@ -1,6 +1,6 @@ package org.timecrafters.TimeCraftersConfigurationTool.ui.settings.presets; -import androidx.fragment.app.Fragment; +import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersFragment; -public class PresetsFragment extends Fragment { +public class PresetsFragment extends TimeCraftersFragment { } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/tacnet/TACNETFragment.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/tacnet/TACNETFragment.java index c2af837..1b32ef5 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/tacnet/TACNETFragment.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/tacnet/TACNETFragment.java @@ -11,15 +11,15 @@ import android.widget.EditText; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import org.timecrafters.TimeCraftersConfigurationTool.R; import org.timecrafters.TimeCraftersConfigurationTool.backend.Backend; -import org.timecrafters.TimeCraftersConfigurationTool.dialogs.VariableDialog; +import org.timecrafters.TimeCraftersConfigurationTool.dialogs.ServerDialog; +import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersFragment; -public class TACNETFragment extends Fragment { +public class TACNETFragment extends TimeCraftersFragment { private static final String TAG = "TACNETFragment"; private TACNETViewModel TACNETViewModel; @@ -69,8 +69,8 @@ public class TACNETFragment extends Fragment { connectButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - VariableDialog dialog = new VariableDialog(); - dialog.show(getFragmentManager(), null); +// ConnectDialog dialog = new ConnectDialog(); +// dialog.show(getFragmentManager(), null); Backend.instance().saveSettings(); } }); @@ -78,7 +78,7 @@ public class TACNETFragment extends Fragment { startServerButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - VariableDialog dialog = new VariableDialog(); + ServerDialog dialog = new ServerDialog(); dialog.show(getFragmentManager(), null); } }); diff --git a/app/src/main/res/drawable-hdpi/plus.png b/app/src/main/res/drawable-hdpi/plus.png new file mode 100644 index 0000000..398f1d0 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/plus.png differ diff --git a/app/src/main/res/drawable-mdpi/plus.png b/app/src/main/res/drawable-mdpi/plus.png new file mode 100644 index 0000000..4efd4d3 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/plus.png differ diff --git a/app/src/main/res/drawable-xhdpi/plus.png b/app/src/main/res/drawable-xhdpi/plus.png new file mode 100644 index 0000000..7643809 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/plus.png differ diff --git a/app/src/main/res/drawable-xxhdpi/plus.png b/app/src/main/res/drawable-xxhdpi/plus.png new file mode 100644 index 0000000..e722fe5 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/plus.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/plus.png b/app/src/main/res/drawable-xxxhdpi/plus.png new file mode 100644 index 0000000..e340754 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/plus.png differ diff --git a/app/src/main/res/layout/activity_manage_configurations.xml b/app/src/main/res/layout/activity_manage_configurations.xml deleted file mode 100644 index b97202e..0000000 --- a/app/src/main/res/layout/activity_manage_configurations.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_base.xml b/app/src/main/res/layout/dialog_base.xml index 4789ceb..f2d976c 100644 --- a/app/src/main/res/layout/dialog_base.xml +++ b/app/src/main/res/layout/dialog_base.xml @@ -30,9 +30,10 @@ + + + + + + +