From cd5ef5192abce055432c9b06ca855a81602776a4 Mon Sep 17 00:00:00 2001 From: Graham Jones Date: Mon, 17 Jan 2022 22:26:23 +0000 Subject: [PATCH] Modified EditEvent to use radiobuttons --- .../EditEventActivity.java | 131 +++++------ .../openseizuredetector/WebApiConnection.java | 48 +++++ .../main/res/layout/activity_edit_event.xml | 203 +++++++++--------- app/src/main/res/values/strings.xml | 3 +- 4 files changed, 220 insertions(+), 165 deletions(-) diff --git a/app/src/main/java/uk/org/openseizuredetector/EditEventActivity.java b/app/src/main/java/uk/org/openseizuredetector/EditEventActivity.java index 76146a8..15f7627 100644 --- a/app/src/main/java/uk/org/openseizuredetector/EditEventActivity.java +++ b/app/src/main/java/uk/org/openseizuredetector/EditEventActivity.java @@ -18,6 +18,7 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -41,6 +42,9 @@ public class EditEventActivity extends AppCompatActivity private Date mEventDateTime; private RadioGroup mEventTypeRg; private boolean mEventTypesListChanged = false; + private RadioGroup mEventSubTypeRg; + private boolean mEventSubTypesListChanged = false; + private JSONObject mEventObj; @Override @@ -52,6 +56,13 @@ public class EditEventActivity extends AppCompatActivity if (extras != null) { Long eventId = extras.getLong("eventId"); Log.v(TAG, "onCreate - eventId=" + eventId); + mEventId = eventId; + mWac.getEvent(mEventId, (JSONObject eventObj) -> { + mEventObj = eventObj; + updateUi(); + // FIXME: modify updateUi to use mEventObj + } + ); } mUtil = new OsdUtil(this, serverStatusHandler); @@ -63,12 +74,8 @@ public class EditEventActivity extends AppCompatActivity mEventTypeRg = findViewById(R.id.eventTypeRg); mEventTypeRg.setOnCheckedChangeListener(onEventTypeChange); - ListView lv; - //lv = (ListView) findViewById(R.id.eventTypeLv); - //lv.setOnItemClickListener(onEventTypeClick); - lv = (ListView) findViewById(R.id.eventSubTypeLv); - lv.setOnItemClickListener(onEventSubTypeClick); - + mEventSubTypeRg = findViewById(R.id.eventSubTypeRg); + mEventSubTypeRg.setOnCheckedChangeListener(onEventSubTypeChange); mWac = new WebApiConnection(this, this, this, this); mLm = new LogManager(this); @@ -130,19 +137,30 @@ public class EditEventActivity extends AppCompatActivity private void updateUi() { Log.v(TAG, "updateUI"); TextView tv; - // tv = (TextView) findViewById(R.id.tokenTv); - //tv.setText("Logged in with Token:" + storedAuthToken); + RadioButton b; - // Regenerate event type button group if necessary + tv = (TextView) findViewById(R.id.eventIdTv); + if (mEventId != null) { + tv.setText(mEventId.toString()); + } else { + tv.setText(R.string.waitingForData); + } + + tv = (TextView) findViewById(R.id.eventDateTv); + if (mEventDateTime != null) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String dateStr = dateFormat.format(mEventDateTime); + tv.setText(dateStr); + } else { + tv.setText(R.string.waitingForData); + } + + // Populate event type button group if necessary if (mEventTypesList != null && mEventTypesListChanged) { Log.v(TAG, "updateUi: " + mEventTypesList.toString()); - //ListView lv = (ListView) findViewById(R.id.eventTypeLv); - //ArrayAdapter adapter = new ArrayAdapter(this, - // R.layout.event_type_list_item, R.id.eventTypeTv, mEventTypesList); - //lv.setAdapter(adapter); mEventTypeRg.removeAllViews(); for (String eventTypeStr : mEventTypesList) { - RadioButton b = new RadioButton(this); + b = new RadioButton(this); b.setText(eventTypeStr); mEventTypeRg.addView(b); } @@ -150,7 +168,6 @@ public class EditEventActivity extends AppCompatActivity } // Check the correct button in the event type group - RadioButton b; for (int index = 0; index < mEventTypeRg.getChildCount(); index++) { b = (RadioButton) mEventTypeRg.getChildAt(index); String buttonText = b.getText().toString(); @@ -160,32 +177,34 @@ public class EditEventActivity extends AppCompatActivity } } - - if (mEventSubTypesHashMap != null) { + // Populate the event sub-types radio button list. + Log.v(TAG,"updateUi() - meventsubtypeshashmap="+mEventSubTypesHashMap+", mEventSubtypesListChanged="+mEventSubTypesListChanged); + if (mEventSubTypesHashMap != null && mEventSubTypesListChanged) { + Log.v(TAG,"UpdateUi() - populating event sub types list"); if (mEventTypeStr != null) { // based on https://androidexample.com/create-a-simple-listview ArrayList subtypesArrayList = mEventSubTypesHashMap.get(mEventTypeStr); - Log.v(TAG, "setSubtypesLV - eventType=" + mEventTypeStr + ", subtypes=" + subtypesArrayList); - ListView lv = (ListView) findViewById(R.id.eventSubTypeLv); - ArrayAdapter adapter = new ArrayAdapter(this, - R.layout.event_sub_type_list_item, R.id.eventSubTypeTv, subtypesArrayList); - lv.setAdapter(adapter); + Log.v(TAG, "updateUi() - eventType=" + mEventTypeStr + ", subtypes=" + subtypesArrayList); + mEventSubTypeRg.removeAllViews(); + for (String eventSubTypeStr : subtypesArrayList) { + b = new RadioButton(this); + b.setText(eventSubTypeStr); + mEventSubTypeRg.addView(b); + } + mEventSubTypesListChanged = false; } } - tv = (TextView) findViewById(R.id.eventTypeTv); - if (mEventTypeStr != null) { - tv.setText(mEventTypeStr); - } else { - tv.setText(R.string.selectFromOptionselow); - } - tv = (TextView) findViewById(R.id.eventSubTypeTv); - if (mEventSubTypeStr != null) { - tv.setText(mEventSubTypeStr); - } else { - tv.setText(R.string.selectFromOptionselow); + // And show the correct sub-type selected. + for (int index = 0; index < mEventSubTypeRg.getChildCount(); index++) { + b = (RadioButton) mEventSubTypeRg.getChildAt(index); + String buttonText = b.getText().toString(); + if (buttonText.equals(mEventSubTypeStr)) { + Log.v(TAG, "updateUi - selecting button " + mEventSubTypeStr); + b.setChecked(true); + } } - } + } // updateUi() View.OnClickListener onCancel = new View.OnClickListener() { @@ -211,37 +230,7 @@ public class EditEventActivity extends AppCompatActivity } }; - private void setSubTypesLV(String eventType) { - // based on https://androidexample.com/create-a-simple-listview - ArrayList subtypesArrayList = mEventSubTypesHashMap.get(eventType); - Log.v(TAG, "setSubtypesLV - eventType=" + eventType + ", subtypes=" + subtypesArrayList); - ListView lv = (ListView) findViewById(R.id.eventSubTypeLv); - ArrayAdapter adapter = new ArrayAdapter(this, - R.layout.event_sub_type_list_item, R.id.eventSubTypeTv, subtypesArrayList); - lv.setAdapter(adapter); - } - AdapterView.OnItemClickListener onEventTypeClick = - new AdapterView.OnItemClickListener() { - public void onItemClick(AdapterView adapter, View v, int position, long id) { - Log.v(TAG, "onEventTypeClick() - Position=" + position + ", id=" + id);// Confirmation dialog based on: https://stackoverflow.com/a/12213536/2104584 - mEventTypeStr = (String) adapter.getItemAtPosition(position); - Log.v(TAG, "onEventTypeClick - selected " + mEventTypeStr); - updateUi(); - //setSubTypesLV(selectedEventType); - } - }; - - AdapterView.OnItemClickListener onEventSubTypeClick = - new AdapterView.OnItemClickListener() { - public void onItemClick(AdapterView adapter, View v, int position, long id) { - Log.v(TAG, "onEventSubTypeClick() - Position=" + position + ", id=" + id);// Confirmation dialog based on: https://stackoverflow.com/a/12213536/2104584 - mEventSubTypeStr = (String) adapter.getItemAtPosition(position); - Log.v(TAG, "onEventSubTypeClick - selected " + mEventSubTypeStr); - updateUi(); - //setSubTypesLV(selectedEventType); - } - }; RadioGroup.OnCheckedChangeListener onEventTypeChange = new RadioGroup.OnCheckedChangeListener() { @Override @@ -250,8 +239,22 @@ public class EditEventActivity extends AppCompatActivity RadioButton b = (RadioButton)findViewById(group.getCheckedRadioButtonId()); String selectedEventType = b.getText().toString(); mEventTypeStr = selectedEventType; + mEventSubTypesListChanged = true; + Log.v(TAG,"onEventTypeChange() - mEventSubTypesListChanged="+mEventSubTypesListChanged); + updateUi(); + } + }; + RadioGroup.OnCheckedChangeListener onEventSubTypeChange = + new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + Log.v(TAG,"onEventSubTypeChange() - id="+checkedId); + RadioButton b = (RadioButton)findViewById(group.getCheckedRadioButtonId()); + String selectedEventSubType = b.getText().toString(); + mEventSubTypeStr = selectedEventSubType; updateUi(); } }; + } \ No newline at end of file diff --git a/app/src/main/java/uk/org/openseizuredetector/WebApiConnection.java b/app/src/main/java/uk/org/openseizuredetector/WebApiConnection.java index 677e682..31d93e8 100644 --- a/app/src/main/java/uk/org/openseizuredetector/WebApiConnection.java +++ b/app/src/main/java/uk/org/openseizuredetector/WebApiConnection.java @@ -218,6 +218,54 @@ public class WebApiConnection { return (true); } + public boolean getEvent(Long eventId, Consumer callback) { + Log.v(TAG, "getEvent()"); + String urlStr = mUrlBase + "/api/events/"+eventId; + Log.v(TAG, "getEvent(): urlStr=" + urlStr); + final String authtoken = getStoredToken(); + + if (!isLoggedIn()) { + Log.v(TAG, "not logged in - doing nothing"); + return (false); + } + + StringRequest req = new StringRequest(Request.Method.GET, urlStr, + new Response.Listener() { + @Override + public void onResponse(String response) { + Log.v(TAG, "Response is: " + response); + try { + JSONObject retObj = new JSONObject(response); + callback.accept(retObj); + } catch (JSONException e) { + Log.e(TAG,"getEventTypes.onRespons(): Error: "+e.getMessage()+","+e.toString()); + callback.accept(null); + } + } + }, + new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + String responseBody = new String(error.networkResponse.data); + Log.v(TAG, "Create Event Error: " + error.toString() + ", message:" + error.getMessage() + ", Response Code:" + error.networkResponse.statusCode + ", Response: " + responseBody); + callback.accept(null); + } + }) { + + @Override + public Map getHeaders() throws AuthFailureError { + Map params = new HashMap(); + params.put("Content-Type", "application/json; charset=UTF-8"); + params.put("Authorization", "Token " + getStoredToken()); + return params; + } + }; + mQueue.add(req); + return (true); + } + + + public boolean createDatapoint(JSONObject dataObj, int eventId) { Log.v(TAG, "createDatapoint()"); // Create a new event in the remote database, based on the provided parameters. diff --git a/app/src/main/res/layout/activity_edit_event.xml b/app/src/main/res/layout/activity_edit_event.xml index 700d262..10087a6 100644 --- a/app/src/main/res/layout/activity_edit_event.xml +++ b/app/src/main/res/layout/activity_edit_event.xml @@ -4,116 +4,119 @@ android:layout_height="fill_parent" android:orientation="vertical"> - + android:layout_height="wrap_content"> - + android:orientation="vertical"> - - + + + + + + + + android:orientation="horizontal"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + +