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 f7a2493..9eafef7 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/VariableDialog.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/VariableDialog.java @@ -1,16 +1,30 @@ package org.timecrafters.TimeCraftersConfigurationTool.dialogs; +import android.content.Context; import android.os.Bundle; +import android.text.InputType; +import android.util.Log; +import android.view.ContextMenu; +import android.view.ContextThemeWrapper; import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import android.widget.EditText; import android.widget.LinearLayout; +import android.widget.PopupMenu; +import android.widget.Switch; import android.widget.TextView; import org.timecrafters.TimeCraftersConfigurationTool.R; public class VariableDialog extends Dialog { + final String TAG = "VariableDialog"; + Button variableType; + EditText variableValue; + Switch variableValueBoolean; + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setCancelable(false); @@ -20,6 +34,24 @@ public class VariableDialog extends Dialog { ((TextView)v.findViewById(R.id.dialogTitle)).setText("Add Variable"); LinearLayout view = v.findViewById(R.id.dialogContent); view.addView(getLayoutInflater().inflate(R.layout.dialog_edit_variable, null)); + variableType = view.findViewById(R.id.variableType); + variableType.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + showVariableTypeMenu(); + } + }); + variableType.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() { + @Override + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { + getActivity().getMenuInflater().inflate(R.menu.variable_type_menu, menu); + } + }); + + variableValue = v.findViewById(R.id.variableValue); + variableValueBoolean = v.findViewById(R.id.variableValueBoolean); + + setVariableType("Double"); Button cancelButton = view.findViewById(R.id.cancel); Button mutateButton = view.findViewById(R.id.mutate); @@ -39,4 +71,91 @@ public class VariableDialog extends Dialog { return v; } + + private void showVariableTypeMenu() { + Context context = new ContextThemeWrapper(getActivity(), R.style.PopUpMenu); + PopupMenu menu = new PopupMenu(context, variableType); + menu.getMenuInflater().inflate(R.menu.variable_type_menu, menu.getMenu()); + + menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + switch (item.getItemId()) { + case R.id.boolean_type: { + setVariableType("boolean"); + return true; + } + case R.id.double_type: { + setVariableType("double"); + return true; + } + case R.id.float_type: { + setVariableType("float"); + return true; + } + case R.id.integer_type: { + setVariableType("integer"); + return true; + } + case R.id.long_type: { + setVariableType("long"); + return true; + } + case R.id.string_type: { + setVariableType("string"); + return true; + } + } + return false; + } + }); + + menu.show(); + } + + private void setVariableType(String type) { + String _type = type.toLowerCase(); + if (_type.equals("boolean")) { + variableType.setText("Boolean"); + variableValue.setVisibility(View.GONE); + variableValueBoolean.setVisibility(View.VISIBLE); + + } else if (_type.equals("double")) { + variableType.setText("Double"); + variableValue.setVisibility(View.VISIBLE); + variableValueBoolean.setVisibility(View.GONE); + + variableValue.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); + + } else if (_type.equals("float")) { + variableType.setText("Float"); + variableValue.setVisibility(View.VISIBLE); + variableValueBoolean.setVisibility(View.GONE); + + variableValue.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); + + } else if (_type.equals("long")){ + variableType.setText("Long"); + variableValue.setVisibility(View.VISIBLE); + variableValueBoolean.setVisibility(View.GONE); + + variableValue.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_NORMAL); + + } else if (_type.equals("integer")) { + variableType.setText("Integer"); + variableValue.setVisibility(View.VISIBLE); + variableValueBoolean.setVisibility(View.GONE); + + variableValue.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_NORMAL); + + } else if (_type.equals("string")) { + variableType.setText("String"); + variableValue.setVisibility(View.VISIBLE); + variableValueBoolean.setVisibility(View.GONE); + + variableValue.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PERSON_NAME); + } else { + Log.d(TAG, "setVariableType: unknown type \"" + type + "\""); + } + } } diff --git a/app/src/main/res/drawable/menu_item.xml b/app/src/main/res/drawable/menu_item.xml new file mode 100644 index 0000000..a18511b --- /dev/null +++ b/app/src/main/res/drawable/menu_item.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_edit_variable.xml b/app/src/main/res/layout/dialog_edit_variable.xml index cced27f..2b927d9 100644 --- a/app/src/main/res/layout/dialog_edit_variable.xml +++ b/app/src/main/res/layout/dialog_edit_variable.xml @@ -28,13 +28,11 @@ android:text="@string/variable_type" android:textColor="@color/dialogLabel" /> - + android:text="Button" /> + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index a6ea0b6..0bd2694 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -13,6 +13,7 @@ @style/NavigationBar @style/TextInput @style/ToggleButton + @style/PopUpMenu + + diff --git a/build.gradle b/build.gradle index da807a2..b58dc04 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath "com.android.tools.build:gradle:4.0.0" + classpath 'com.android.tools.build:gradle:4.0.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files