diff --git a/app/src/main/java/org/deke/risk/riskahead/MapsActivity.java b/app/src/main/java/org/deke/risk/riskahead/MapsActivity.java index 44bdf31..c1e4621 100644 --- a/app/src/main/java/org/deke/risk/riskahead/MapsActivity.java +++ b/app/src/main/java/org/deke/risk/riskahead/MapsActivity.java @@ -4,24 +4,43 @@ import android.app.SearchManager; import android.app.SearchableInfo; import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.database.Cursor; +import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.support.v7.widget.SearchView; +import android.util.Log; import android.view.Menu; import android.view.View; +import android.widget.Toast; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.StringRequest; import com.google.android.gms.maps.CameraUpdate; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.SupportMapFragment; +import com.google.android.gms.maps.model.Circle; +import com.google.android.gms.maps.model.CircleOptions; import com.google.android.gms.maps.model.LatLng; +import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; +import org.deke.risk.riskahead.helper.AppConfig; +import org.deke.risk.riskahead.helper.AppController; import org.deke.risk.riskahead.helper.BaseActivity; import org.deke.risk.riskahead.helper.PlaceProvider; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; public class MapsActivity extends BaseActivity implements LoaderManager.LoaderCallbacks { @@ -30,6 +49,7 @@ public class MapsActivity extends BaseActivity implements LoaderManager.LoaderCa private static final String TAG = MapsActivity.class.getSimpleName(); private static GoogleMap mMap; + Marker mMarker; private LatLng myLocation; private LatLng markedLocation; @@ -41,27 +61,33 @@ public class MapsActivity extends BaseActivity implements LoaderManager.LoaderCa mMap.getUiSettings().setZoomControlsEnabled(true); handleIntent(getIntent()); - //setUpMap(); - findViewById(R.id.btn_maps_confirm_position).setVisibility(View.GONE); mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() { @Override public void onMapClick(LatLng point) { + if (mMarker != null) { + mMarker.remove(); + } markedLocation = point; - mMap.clear(); - mMap.addMarker(new MarkerOptions().position(point)); + mMarker = mMap.addMarker(new MarkerOptions().position(point)); + mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(point, 12.0f)); findViewById(R.id.btn_maps_confirm_position).setVisibility(View.VISIBLE); findViewById(R.id.btn_maps_confirm_position).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - gotoReportActivity(markedLocation.latitude+":"+markedLocation.longitude); + gotoReportActivity(markedLocation.latitude + ":" + markedLocation.longitude); } }); } }); + //setUpMap(); + + String tag_string_req = "getincidentswithposition"; + StringRequest strReq = getStringRequestGetAllIncidentsWithPosition(); + AppController.getInstance().addToRequestQueue(strReq, tag_string_req); } private void handleIntent(Intent intent){ @@ -114,7 +140,7 @@ public class MapsActivity extends BaseActivity implements LoaderManager.LoaderCa if (position != null) { myLocation = new LatLng(position.latitude,position.longitude); } - mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(myLocation, 20)); + mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(myLocation, 20)); } @Override @@ -155,7 +181,9 @@ public class MapsActivity extends BaseActivity implements LoaderManager.LoaderCa mMap.setMyLocationEnabled(true); mMap.getUiSettings().setZoomControlsEnabled(true); // For dropping a marker at a point on the Map + mMap.addMarker(new MarkerOptions().position(myLocation).title("My Home").snippet("Home Address")); + // For zooming automatically to the Dropped PIN Location mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(myLocation, 12.0f)); } @@ -179,4 +207,73 @@ public class MapsActivity extends BaseActivity implements LoaderManager.LoaderCa return mActivityTitle; } + private StringRequest getStringRequestGetAllIncidentsWithPosition() { + return new StringRequest(Request.Method.POST, AppConfig.URL_REGISTER, new Response.Listener() { + + @Override + public void onResponse(String response) { + Log.d(TAG, "Map positions response: " + response); + hideDialog(); + + try { + JSONObject jObj = new JSONObject(response); + boolean error = jObj.getBoolean("error"); + + // Check for error node in json + if (!error) { + JSONArray incidents = jObj.getJSONArray("message"); + for(int i=0;i getParams() { + // Posting parameters to login url + Map params = new HashMap<>(); + params.put("tag", "getincidentswithposition"); + params.put("uid", user.get("uid")); + params.put("token", user.get("token")); + + + return params; + } + + }; + } + + } diff --git a/app/src/main/java/org/deke/risk/riskahead/ReportActivity.java b/app/src/main/java/org/deke/risk/riskahead/ReportActivity.java index 33b06b6..39fe3ae 100644 --- a/app/src/main/java/org/deke/risk/riskahead/ReportActivity.java +++ b/app/src/main/java/org/deke/risk/riskahead/ReportActivity.java @@ -4,24 +4,36 @@ import android.app.DatePickerDialog; import android.app.Dialog; import android.app.TimePickerDialog; import android.content.Intent; +import android.content.SharedPreferences; import android.location.Address; import android.location.Geocoder; import android.os.Bundle; +import android.util.Log; import android.view.View; import android.widget.ArrayAdapter; import android.widget.DatePicker; import android.widget.EditText; import android.widget.Spinner; import android.widget.TimePicker; +import android.widget.Toast; -import com.google.android.gms.maps.model.LatLng; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.StringRequest; +import org.deke.risk.riskahead.helper.AppConfig; +import org.deke.risk.riskahead.helper.AppController; import org.deke.risk.riskahead.helper.BaseActivity; +import org.json.JSONException; +import org.json.JSONObject; import java.io.IOException; import java.util.Calendar; +import java.util.HashMap; import java.util.List; import java.util.Locale; +import java.util.Map; public class ReportActivity extends BaseActivity { @@ -44,6 +56,8 @@ public class ReportActivity extends BaseActivity { private EditText txtDay; private EditText txtTime; + private String latitude, longitude; + private int year, month, day; private int hour, minute; @@ -70,12 +84,19 @@ public class ReportActivity extends BaseActivity { txtTime = (EditText) findViewById(R.id.input_report_time); txtPosition = (EditText) findViewById(R.id.input_report_position); - txtDay.setText(new StringBuilder() - .append(day).append("-").append(month + 1).append("-") - .append(year).append(" ")); + restoreSharedPreferences(); - txtTime.setText(new StringBuilder().append(hour) - .append(":").append(minute).append(" ")); + + if(txtDay.getText().toString() == "") { + txtDay.setText(new StringBuilder() + .append(day).append("-").append(month + 1).append("-") + .append(year).append(" ")); + } + + if(txtTime.getText().toString() == "") { + txtTime.setText(new StringBuilder().append(hour) + .append(":").append(minute).append(" ")); + } findViewById(R.id.btn_report_position).setOnClickListener(new View.OnClickListener() { @Override @@ -95,11 +116,22 @@ public class ReportActivity extends BaseActivity { try { List
addresses = geocoder.getFromLocation(Double.parseDouble(position[0]), Double.parseDouble(position[1]), 1); txtPosition.setText(addresses.get(0).getLocality()); + latitude = position[0]; + longitude = position[1]; } catch (IOException e) { e.printStackTrace(); } } + findViewById(R.id.btn_report_report).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String tag_string_req = "addincidentwithposition"; + StringRequest strReq = getStringRequestAddIncidentWithPosition(txtTitle.getText().toString(), txtDescription.getText().toString(), txtCrimeCategory.getSelectedItemPosition(), latitude, longitude, 10, 1, txtDay.getText().toString(), txtTime.getText().toString()); + AppController.getInstance().addToRequestQueue(strReq, tag_string_req); + } + }); + txtDay.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -115,15 +147,92 @@ public class ReportActivity extends BaseActivity { }); } - @Override - public void onRestoreInstanceState(Bundle savedInstanceState) { - super.onRestoreInstanceState(savedInstanceState); - txtTitle.setText(savedInstanceState.getString(SAVED_TITLE)); - txtDescription.setText(savedInstanceState.getString(SAVED_DESCRIPTION_LONG)); - txtCrimeCategory.setSelection(savedInstanceState.getInt(SAVED_CRIME_CATEGORY)); - txtDay.setText(savedInstanceState.getString(SAVED_DATE_INCIDENT)); - txtTime.setText(savedInstanceState.getString(SAVED_DATE_TIME)); - txtPosition.setText(savedInstanceState.getString(SAVED_POSITION)); + private void restoreSharedPreferences() { + SharedPreferences prefs = getPreferences(MODE_PRIVATE); + String title = prefs.getString(SAVED_TITLE, null); + if (title != null) txtTitle.setText(title); + + String descr = prefs.getString(SAVED_DESCRIPTION_LONG, null); + if (descr != null) txtDescription.setText(descr); + + int crimec = prefs.getInt(SAVED_CRIME_CATEGORY, 0); + txtCrimeCategory.setSelection(crimec); + + String day = prefs.getString(SAVED_DATE_INCIDENT, null); + if (day != null) txtDay.setText(day); + + String time = prefs.getString(SAVED_DATE_TIME, null); + if (time != null) txtTime.setText(time); + + String posi = prefs.getString(SAVED_POSITION, null); + if (posi != null) txtPosition.setText(posi); + + latitude = prefs.getString("latitude",null); + longitude = prefs.getString("longitude",null); + } + + private StringRequest getStringRequestAddIncidentWithPosition(final String textshort, final String textlong, final int crimecategory, final String latitude, final String longitude, final int status, final int radius, final String day, final String time) { + return new StringRequest(Request.Method.POST, AppConfig.URL_REGISTER, new Response.Listener() { + + @Override + public void onResponse(String response) { + Log.d(TAG, "Report response: " + response); + hideDialog(); + + try { + JSONObject jObj = new JSONObject(response); + boolean error = jObj.getBoolean("error"); + + if (!error) { + showMessage("Report added!"); + SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit(); + editor.clear(); + editor.commit(); + editor.apply(); + gotoMapActivity(); + } else { + // Error in login. Get the error message + String errorMsg = jObj.getString("error_msg"); + Toast.makeText(getApplicationContext(), errorMsg, Toast.LENGTH_LONG).show(); + } + } catch (JSONException e) { + e.printStackTrace(); + } + + } + }, new Response.ErrorListener() { + + @Override + public void onErrorResponse(VolleyError error) { + Log.e(TAG, "Report Error: " + error.getMessage()); + Toast.makeText(getApplicationContext(), + error.getMessage(), Toast.LENGTH_LONG).show(); + hideDialog(); + } + }) { + + @Override + protected Map getParams() { + // Posting parameters to login url + Map params = new HashMap<>(); + params.put("tag", "addincidentwithposition"); + params.put("uid", user.get("uid")); + params.put("token", user.get("token")); + params.put("textshort",textshort); + params.put("textlong",textlong); + params.put("fiduser",user.get("uid")); + params.put("fidcategory", Integer.toString(crimecategory)); + params.put("latitude",latitude); + params.put("longitude",longitude); + params.put("status",Integer.toString(status)); + params.put("radius",Integer.toString(radius)); + params.put("happened_at",year+"-"+month+"-"+day+" "+hour+":"+minute+":00"); + + + return params; + } + + }; } @Override @@ -151,7 +260,6 @@ public class ReportActivity extends BaseActivity { month = selectedMonth; day = selectedDay; - // set selected date into textview txtDay.setText(new StringBuilder().append(day) .append("-").append(month + 1).append("-").append(year) .append(" ")); @@ -167,7 +275,6 @@ public class ReportActivity extends BaseActivity { hour = selectedHour; minute = selectedMinute; - // set selected date into textview txtTime.setText(new StringBuilder().append(hour) .append(":").append(minute).append(" ")); } @@ -184,16 +291,19 @@ public class ReportActivity extends BaseActivity { } @Override - public void onSaveInstanceState(Bundle savedInstanceState) { - super.onSaveInstanceState(savedInstanceState); - savedInstanceState.putString(SAVED_TITLE, txtTitle.getText().toString()); - savedInstanceState.putString(SAVED_DESCRIPTION_LONG, txtDescription.getText().toString()); - savedInstanceState.putInt(SAVED_CRIME_CATEGORY, txtCrimeCategory.getSelectedItemPosition()); - savedInstanceState.putString(SAVED_DATE_INCIDENT, txtDay.getText().toString()); - savedInstanceState.putString(SAVED_DATE_TIME, txtTime.getText().toString()); - savedInstanceState.putString(SAVED_POSITION, txtPosition.getText().toString()); + protected void onStop() { + super.onStop(); // Always call the superclass method first + + SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit(); + editor.putString(SAVED_TITLE, txtTitle.getText().toString()); + editor.putString(SAVED_DESCRIPTION_LONG, txtDescription.getText().toString()); + editor.putInt(SAVED_CRIME_CATEGORY, txtCrimeCategory.getSelectedItemPosition()); + editor.putString(SAVED_DATE_INCIDENT, txtDay.getText().toString()); + editor.putString(SAVED_DATE_TIME, txtTime.getText().toString()); + editor.putString(SAVED_POSITION, txtPosition.getText().toString()); + editor.putString("latitude", latitude); + editor.putString("longitude", longitude); + editor.apply(); } - - } diff --git a/app/src/main/java/org/deke/risk/riskahead/helper/AppController.java b/app/src/main/java/org/deke/risk/riskahead/helper/AppController.java index 786f768..bfee9f2 100644 --- a/app/src/main/java/org/deke/risk/riskahead/helper/AppController.java +++ b/app/src/main/java/org/deke/risk/riskahead/helper/AppController.java @@ -2,6 +2,7 @@ package org.deke.risk.riskahead.helper; import android.app.Application; import android.text.TextUtils; +import android.util.Log; import com.android.volley.Request; import com.android.volley.RequestQueue; diff --git a/app/src/main/java/org/deke/risk/riskahead/helper/BaseActivity.java b/app/src/main/java/org/deke/risk/riskahead/helper/BaseActivity.java index c715055..328303a 100644 --- a/app/src/main/java/org/deke/risk/riskahead/helper/BaseActivity.java +++ b/app/src/main/java/org/deke/risk/riskahead/helper/BaseActivity.java @@ -1,6 +1,9 @@ package org.deke.risk.riskahead.helper; +import android.app.ProgressDialog; +import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.content.res.Configuration; import android.support.v4.view.MenuItemCompat; import android.support.v4.widget.DrawerLayout; @@ -45,6 +48,8 @@ public abstract class BaseActivity extends AppCompatActivity { public SessionManager session; public HashMap user; + public ProgressDialog pDialog; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -53,6 +58,9 @@ public abstract class BaseActivity extends AppCompatActivity { // SqLite database handler db = new SQLiteHandler(getApplicationContext()); + pDialog = new ProgressDialog(this); + pDialog.setCancelable(false); + // session manager session = new SessionManager(getApplicationContext()); @@ -265,4 +273,14 @@ public abstract class BaseActivity extends AppCompatActivity { protected abstract int getLayoutResourceId(); protected abstract String getActivityName(); + + public void showDialog() { + if (!pDialog.isShowing()) + pDialog.show(); + } + + public void hideDialog() { + if (pDialog.isShowing()) + pDialog.dismiss(); + } } diff --git a/app/src/main/res/layout/activity_report.xml b/app/src/main/res/layout/activity_report.xml index eca2e0d..cd928c9 100644 --- a/app/src/main/res/layout/activity_report.xml +++ b/app/src/main/res/layout/activity_report.xml @@ -56,7 +56,7 @@ android:textColorHint="@color/input_login_hint" android:layout_below="@+id/lbl_report_long" android:scrollbars="vertical" - android:minLines="5"/> + android:minLines="3"/> + +