From 9f852782f6c7e4c576828b8483dda90988c1e672 Mon Sep 17 00:00:00 2001 From: amalafrozalam Date: Tue, 26 Apr 2016 04:59:38 -0400 Subject: [PATCH] #52, #53, #54, #57 Move methods to HelperMethods Add area, range, frequency, duration, and text questions --- .../healthassistantsclient/HelperMethods.java | 254 ++++++++++++++++++ .../QuestionNodeActivity.java | 144 +--------- .../res/layout/dialog_1_number_picker.xml | 16 ++ ...picker.xml => dialog_2_numbers_picker.xml} | 13 +- app/src/main/res/values/strings.xml | 2 +- 5 files changed, 291 insertions(+), 138 deletions(-) create mode 100644 app/src/main/res/layout/dialog_1_number_picker.xml rename app/src/main/res/layout/{dialog_duration_picker.xml => dialog_2_numbers_picker.xml} (61%) diff --git a/app/src/main/java/edu/jhu/bme/cbid/healthassistantsclient/HelperMethods.java b/app/src/main/java/edu/jhu/bme/cbid/healthassistantsclient/HelperMethods.java index 395b74240d..be824df6ea 100644 --- a/app/src/main/java/edu/jhu/bme/cbid/healthassistantsclient/HelperMethods.java +++ b/app/src/main/java/edu/jhu/bme/cbid/healthassistantsclient/HelperMethods.java @@ -1,13 +1,28 @@ package edu.jhu.bme.cbid.healthassistantsclient; +import android.app.Activity; +import android.app.DatePickerDialog; import android.content.Context; +import android.content.DialogInterface; +import android.support.v7.app.AlertDialog; +import android.text.InputType; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.DatePicker; +import android.widget.EditText; +import android.widget.NumberPicker; +import android.widget.TextView; import org.json.JSONException; import org.json.JSONObject; import java.io.IOException; import java.io.InputStream; +import java.text.SimpleDateFormat; import java.util.Calendar; +import java.util.Date; + +import edu.jhu.bme.cbid.healthassistantsclient.objects.Node; /** * Created by tusharjois on 3/22/16. @@ -62,5 +77,244 @@ public static JSONObject encodeJSON(Context context, String fileName) { } + public static void askText(final Node node, Activity context) { + final AlertDialog.Builder textInput = new AlertDialog.Builder(context); + textInput.setTitle(R.string.question_text_input); + final EditText dialogEditText = new EditText(context); + dialogEditText.setInputType(InputType.TYPE_CLASS_TEXT); + textInput.setView(dialogEditText); + textInput.setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + node.addLanguage(dialogEditText.getText().toString()); + node.changeText(node.language()); + node.setSelected(); + } + }); + textInput.setNegativeButton(R.string.generic_cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.cancel(); + } + }); + textInput.show(); + } + + public static void askDate(final Node node, final Activity context) { + Calendar calendar = Calendar.getInstance(); + DatePickerDialog datePickerDialog = new DatePickerDialog(context, + android.R.style.Theme_Holo_Light_Dialog_NoActionBar, + new DatePickerDialog.OnDateSetListener() { + @Override + public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(0); + cal.set(year, monthOfYear, dayOfMonth); + Date date = cal.getTime(); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MMM/yyyy", context.getResources().getConfiguration().locale); + String dateString = simpleDateFormat.format(date); + node.addLanguage(dateString); + node.changeText(node.language()); + node.setSelected(); + //TODO:: Check if the language is actually what is intended to be displayed + } + }, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)); + datePickerDialog.setTitle(R.string.question_date_picker); + datePickerDialog.show(); + } + + public static void askLocation(final Node node, Activity context) { + + final AlertDialog.Builder textInput = new AlertDialog.Builder(context); + textInput.setTitle(R.string.question_location_picker); + + } + + public static void askNumber(final Node node, Activity context) { + + final AlertDialog.Builder numberDialog = new AlertDialog.Builder(context); + numberDialog.setTitle(R.string.question_number_picker); + final LayoutInflater inflater = context.getLayoutInflater(); + View convertView = inflater.inflate(R.layout.dialog_1_number_picker, null); + numberDialog.setView(convertView); + final NumberPicker numberPicker = (NumberPicker) convertView.findViewById(R.id.dialog_1_number_picker); + numberPicker.setMinValue(0); + numberPicker.setMaxValue(100); + numberDialog.setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + numberPicker.setValue(numberPicker.getValue()); + String value = String.valueOf(numberPicker.getValue()); + node.addLanguage(" " + value); + node.changeText(value); + node.setSelected(); + dialog.dismiss(); + } + }); + numberDialog.setNegativeButton(R.string.generic_cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + } + }); + numberDialog.show(); + + } + + public static void askArea(final Node node, Activity context) { + + final AlertDialog.Builder areaDialog = new AlertDialog.Builder(context); + areaDialog.setTitle(R.string.question_area_picker); + final LayoutInflater inflater = context.getLayoutInflater(); + View convertView = inflater.inflate(R.layout.dialog_2_numbers_picker, null); + areaDialog.setView(convertView); + final NumberPicker widthPicker = (NumberPicker) convertView.findViewById(R.id.dialog_2_numbers_quantity); + final NumberPicker lengthPicker = (NumberPicker) convertView.findViewById(R.id.dialog_2_numbers_unit); + final TextView middleText = (TextView) convertView.findViewById(R.id.dialog_2_numbers_text); + middleText.setText("X"); + widthPicker.setMinValue(0); + widthPicker.setMaxValue(100); + lengthPicker.setMinValue(0); + lengthPicker.setMaxValue(100); + + areaDialog.setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + widthPicker.setValue(widthPicker.getValue()); + lengthPicker.setValue(lengthPicker.getValue()); + String durationString = String.valueOf(widthPicker.getValue()) + " X " + lengthPicker.getValue(); + node.addLanguage(" " + durationString); + node.changeText(durationString); + node.setSelected(); + dialog.dismiss(); + } + }); + areaDialog.setNegativeButton(R.string.generic_cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + areaDialog.show(); + + } + + + public static void askRange(final Node node, Activity context) { + + final AlertDialog.Builder rangeDialog = new AlertDialog.Builder(context); + rangeDialog.setTitle(R.string.question_range_picker); + final LayoutInflater inflater = context.getLayoutInflater(); + View convertView = inflater.inflate(R.layout.dialog_2_numbers_picker, null); + rangeDialog.setView(convertView); + final NumberPicker startPicker = (NumberPicker) convertView.findViewById(R.id.dialog_2_numbers_quantity); + final NumberPicker endPicker = (NumberPicker) convertView.findViewById(R.id.dialog_2_numbers_unit); + final TextView middleText = (TextView) convertView.findViewById(R.id.dialog_2_numbers_text); + middleText.setText(" - "); + + startPicker.setMinValue(0); + startPicker.setMaxValue(100); + endPicker.setMinValue(0); + endPicker.setMaxValue(100); + rangeDialog.setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + startPicker.setValue(startPicker.getValue()); + endPicker.setValue(endPicker.getValue()); + String durationString = String.valueOf(startPicker.getValue()) + " to " + endPicker.getValue(); + //TODO gotta get the units of the range somehow. gotta see what they look like first + node.addLanguage(" " + durationString); + node.changeText(durationString); + node.setSelected(); + dialog.dismiss(); + } + }); + rangeDialog.setNegativeButton(R.string.generic_cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + rangeDialog.show(); + } + + public static void askFrequency(final Node node, Activity context) { + + final AlertDialog.Builder frequencyDialog = new AlertDialog.Builder(context); + frequencyDialog.setTitle(R.string.question_frequency_picker); + final LayoutInflater inflater = context.getLayoutInflater(); + View convertView = inflater.inflate(R.layout.dialog_2_numbers_picker, null); + frequencyDialog.setView(convertView); + final NumberPicker quantityPicker = (NumberPicker) convertView.findViewById(R.id.dialog_2_numbers_quantity); + final NumberPicker unitPicker = (NumberPicker) convertView.findViewById(R.id.dialog_2_numbers_unit); + final TextView middleText = (TextView) convertView.findViewById(R.id.dialog_2_numbers_text); + middleText.setVisibility(View.GONE); + final String[] units = new String[]{"per Hour", "per Day", "Per Week", "per Month", "per Year"}; + final String[] doctorUnits = new String[]{"times per hour", "time per day", "times per week", "times per month", "times per year"}; + unitPicker.setDisplayedValues(units); + quantityPicker.setMinValue(0); + quantityPicker.setMaxValue(24); + unitPicker.setMinValue(0); + unitPicker.setMaxValue(4); + frequencyDialog.setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + quantityPicker.setValue(quantityPicker.getValue()); + unitPicker.setValue(unitPicker.getValue()); + String durationString = String.valueOf(quantityPicker.getValue()) + " " + doctorUnits[unitPicker.getValue()]; + node.addLanguage(" " + durationString); + node.changeText(durationString); + node.setSelected(); + dialog.dismiss(); + } + }); + frequencyDialog.setNegativeButton(R.string.generic_cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + frequencyDialog.show(); + + } + + public static void askDuration(final Node node, Activity context) { + final AlertDialog.Builder durationDialog = new AlertDialog.Builder(context); + durationDialog.setTitle(R.string.question_duration_picker); + final LayoutInflater inflater = context.getLayoutInflater(); + View convertView = inflater.inflate(R.layout.dialog_2_numbers_picker, null); + durationDialog.setView(convertView); + final NumberPicker quantityPicker = (NumberPicker) convertView.findViewById(R.id.dialog_2_numbers_quantity); + final NumberPicker unitPicker = (NumberPicker) convertView.findViewById(R.id.dialog_2_numbers_unit); + final TextView middleText = (TextView) convertView.findViewById(R.id.dialog_2_numbers_text); + middleText.setVisibility(View.GONE); + final String[] units = new String[]{"Hours", "Days", "Weeks", "Months", "Years"}; + unitPicker.setDisplayedValues(units); + quantityPicker.setMinValue(0); + quantityPicker.setMaxValue(24); + unitPicker.setMinValue(0); + unitPicker.setMaxValue(4); + durationDialog.setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + quantityPicker.setValue(quantityPicker.getValue()); + unitPicker.setValue(unitPicker.getValue()); + String durationString = String.valueOf(quantityPicker.getValue()) + " " + units[unitPicker.getValue()]; + node.addLanguage(" " + durationString); + node.changeText(durationString); + node.setSelected(); + dialog.dismiss(); + } + }); + durationDialog.setNegativeButton(R.string.generic_cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + durationDialog.show(); + } + } diff --git a/app/src/main/java/edu/jhu/bme/cbid/healthassistantsclient/QuestionNodeActivity.java b/app/src/main/java/edu/jhu/bme/cbid/healthassistantsclient/QuestionNodeActivity.java index bbab57956c..9df2210009 100644 --- a/app/src/main/java/edu/jhu/bme/cbid/healthassistantsclient/QuestionNodeActivity.java +++ b/app/src/main/java/edu/jhu/bme/cbid/healthassistantsclient/QuestionNodeActivity.java @@ -1,25 +1,16 @@ package edu.jhu.bme.cbid.healthassistantsclient; -import android.app.DatePickerDialog; import android.content.DialogInterface; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; -import android.text.InputType; import android.util.Log; -import android.view.LayoutInflater; import android.view.View; -import android.widget.DatePicker; -import android.widget.EditText; import android.widget.ExpandableListView; -import android.widget.NumberPicker; -import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; import java.util.HashMap; import java.util.List; @@ -107,7 +98,7 @@ public boolean onChildClick(ExpandableListView parent, View v, int groupPosition adapter.notifyDataSetChanged(); } if (!question.isTerminal()) { - displayNextLevel(question); + //TODO: nth level parsing of nodes } //nextQuestion(groupPosition); @@ -158,147 +149,30 @@ private void handleQuestion(Node questionNode) { String type = questionNode.type(); switch (type) { case "text": - askText(questionNode); + HelperMethods.askText(questionNode, this); break; case "date": - askDate(questionNode); + HelperMethods.askDate(questionNode, this); break; case "location": - askLocation(questionNode); + HelperMethods.askLocation(questionNode, this); break; case "number": - askNumber(questionNode); + HelperMethods.askNumber(questionNode, this); break; case "area": - askArea(questionNode); + HelperMethods.askArea(questionNode, this); break; case "duration": - askDuration(questionNode); + HelperMethods.askDuration(questionNode, this); break; case "range": - askRange(questionNode); + HelperMethods.askRange(questionNode, this); break; case "frequency": - askFrequency(questionNode); + HelperMethods.askFrequency(questionNode, this); break; } } - private void displayNextLevel(Node node) { - - } - - private void askText(final Node node) { - final AlertDialog.Builder textInput = new AlertDialog.Builder(QuestionNodeActivity.this); - textInput.setTitle(R.string.question_text_input); - final EditText dialogEditText = new EditText(this); - dialogEditText.setInputType(InputType.TYPE_CLASS_TEXT); - textInput.setView(dialogEditText); - textInput.setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - node.addLanguage(dialogEditText.getText().toString()); - node.changeText(node.language()); - } - }); - textInput.setNegativeButton(R.string.generic_cancel, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.cancel(); - } - }); - textInput.show(); - } - - private void askDate(final Node node) { - - final AlertDialog.Builder textInput = new AlertDialog.Builder(QuestionNodeActivity.this); - textInput.setTitle(R.string.question_date_picker); - //DatePicker datePicker = new DatePicker() - - - Calendar calendar = Calendar.getInstance(); - DatePickerDialog datePickerDialog = new DatePickerDialog(QuestionNodeActivity.this, - android.R.style.Theme_Holo_Light_Dialog_NoActionBar, - new DatePickerDialog.OnDateSetListener() { - @Override - public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { - Calendar cal = Calendar.getInstance(); - cal.setTimeInMillis(0); - cal.set(year, monthOfYear, dayOfMonth); - Date date = cal.getTime(); - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MMM/yyyy", getResources().getConfiguration().locale); - String dateString = simpleDateFormat.format(date); - node.addLanguage(dateString); - node.changeText(node.language()); - //TODO:: Check if the language is actually what is intended to be displayed - } - }, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)); - } - - private void askLocation(final Node node) { - - final AlertDialog.Builder textInput = new AlertDialog.Builder(QuestionNodeActivity.this); - textInput.setTitle(R.string.question_text_input); - } - - private void askNumber(final Node node) { - - final AlertDialog.Builder textInput = new AlertDialog.Builder(QuestionNodeActivity.this); - textInput.setTitle(R.string.question_text_input); - } - - private void askArea(final Node node) { - - final AlertDialog.Builder textInput = new AlertDialog.Builder(QuestionNodeActivity.this); - textInput.setTitle(R.string.question_text_input); - } - - private void askDuration(final Node node) { - final AlertDialog.Builder durationPicker = new AlertDialog.Builder(QuestionNodeActivity.this); - durationPicker.setTitle(R.string.question_duration_picker); - final LayoutInflater inflater = getLayoutInflater(); - View convertView = inflater.inflate(R.layout.dialog_duration_picker, null); - durationPicker.setView(convertView); - final NumberPicker quantityPicker = (NumberPicker) convertView.findViewById(R.id.dialog_duration_quantity); - final NumberPicker unitPicker = (NumberPicker) convertView.findViewById(R.id.dialog_duration_unit); - final String[] units = new String[]{"Hours", "Days", "Weeks", "Months", "Years"}; - unitPicker.setDisplayedValues(units); - quantityPicker.setMinValue(0); - quantityPicker.setMaxValue(24); - unitPicker.setMinValue(0); - unitPicker.setMaxValue(4); - durationPicker.setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - quantityPicker.setValue(quantityPicker.getValue()); - unitPicker.setValue(unitPicker.getValue()); - String durationString = String.valueOf(quantityPicker.getValue()) + " " + units[unitPicker.getValue()]; - node.addLanguage(" " + durationString); - node.changeText(durationString); - node.setSelected(); - dialog.dismiss(); - } - }); - durationPicker.setNegativeButton(R.string.generic_cancel, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - } - }); - durationPicker.show(); - } - - private void askRange(final Node node) { - - final AlertDialog.Builder textInput = new AlertDialog.Builder(QuestionNodeActivity.this); - textInput.setTitle(R.string.question_text_input); - } - - private void askFrequency(final Node node) { - - final AlertDialog.Builder textInput = new AlertDialog.Builder(QuestionNodeActivity.this); - textInput.setTitle(R.string.question_text_input); - } - } diff --git a/app/src/main/res/layout/dialog_1_number_picker.xml b/app/src/main/res/layout/dialog_1_number_picker.xml new file mode 100644 index 0000000000..8ea06ab755 --- /dev/null +++ b/app/src/main/res/layout/dialog_1_number_picker.xml @@ -0,0 +1,16 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_duration_picker.xml b/app/src/main/res/layout/dialog_2_numbers_picker.xml similarity index 61% rename from app/src/main/res/layout/dialog_duration_picker.xml rename to app/src/main/res/layout/dialog_2_numbers_picker.xml index b5a0b45442..55f04c0d84 100644 --- a/app/src/main/res/layout/dialog_duration_picker.xml +++ b/app/src/main/res/layout/dialog_2_numbers_picker.xml @@ -8,13 +8,22 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" - android:id="@+id/dialog_duration_quantity"> + android:id="@+id/dialog_2_numbers_quantity"> + + + + + android:id="@+id/dialog_2_numbers_unit"> + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3301984686..e8e0a195bb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -190,7 +190,7 @@ Please select date Please select locations Please enter number - Please enter the area + Please enter the area (width X length) Please enter a range Please enter how many times