diff --git a/app/app.iml b/app/app.iml index 98ebd3f..fa129e9 100644 --- a/app/app.iml +++ b/app/app.iml @@ -134,7 +134,6 @@ - @@ -147,6 +146,7 @@ + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 78b4796..e37c2c8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -42,6 +42,7 @@ dependencies { compile 'com.facebook.android:facebook-android-sdk:4.1.0' compile 'com.beardedhen:androidbootstrap:2.0.1' compile 'com.mcxiaoke.volley:library:1.0.+' + compile 'com.google.code.gson:gson:2.4' compile('com.twitter.sdk.android:twitter-core:1.4.1@aar') { transitive = true; } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b89fdd0..cdfd656 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,7 +18,7 @@ android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" - android:theme="@style/CustomActionBarTheme"> + android:theme="@style/MyRiskAheadTheme"> , ClusterManager.OnClusterItemInfoWindowClickListener, ClusterManager.OnClusterClickListener, ClusterManager.OnClusterItemClickListener{ +public class MapsActivity extends BaseActivity implements LoaderManager.LoaderCallbacks, + ClusterManager.OnClusterItemInfoWindowClickListener, ClusterManager.OnClusterClickListener, ClusterManager.OnClusterItemClickListener{ private final static String mActivityTitle = "Risk Map"; private static final String TAG = MapsActivity.class.getSimpleName(); private static GoogleMap mMap; - Marker mMarker; - ArrayList myMarkers = new ArrayList(); - private float previousZoomLevel = -1.0f; - private boolean isZooming = false; + private Marker mMarker; + + private AppClusterItem clickedClusterItem; + private ArrayList myMarkers = new ArrayList(); + private HashMap visibleMarkers = new HashMap(); + + private List mHeatMapPositionList = new ArrayList<>(); + private ClusterManager mClusterManager; + + private boolean isMarkerShown = false; private LatLng myLocation; private LatLng markedLocation; - private AppClusterItem clickedClusterItem; - - private List mPositionList = new ArrayList<>(); - - ClusterManager mClusterManager; - private static final int DEFAULT_ZOOM_LEVEL = 14; private static final int THRESHOLD_ZOOM_LEVEL = 7; @@ -122,24 +124,61 @@ public class MapsActivity extends BaseActivity implements LoaderManager.LoaderCa mClusterManager.onCameraChange(position); Log.d("Zoom", "Zoom: " + position.zoom); - if(previousZoomLevel != position.zoom) + if(position.zoom >= THRESHOLD_ZOOM_LEVEL) { - if(previousZoomLevel < THRESHOLD_ZOOM_LEVEL && position.zoom >= THRESHOLD_ZOOM_LEVEL){ - mClusterManager.addItems(myMarkers); - }else if(previousZoomLevel > THRESHOLD_ZOOM_LEVEL && position.zoom <= THRESHOLD_ZOOM_LEVEL){ - mClusterManager.clearItems(); - } + //mClusterManager.addItems(myMarkers); + addMarkersToMap(); + isMarkerShown = true; + } else if (position.zoom < THRESHOLD_ZOOM_LEVEL && (isMarkerShown == true)){ + mClusterManager.clearItems(); + visibleMarkers.clear(); + isMarkerShown = false; } - previousZoomLevel = position.zoom; + } }; } + private void addMarkersToMap(){ + LatLngBounds bounds = mMap.getProjection().getVisibleRegion().latLngBounds; + + //Loop through all the items that are available to be placed on the map + for(AppClusterItem item : myMarkers) + { + //If the item is within the the bounds of the screen + if(bounds.contains(item.getPosition())) + { + //If the item isn't already being displayed + if(!visibleMarkers.containsKey(item.getID())) + { + Log.d(TAG,"Should add now marker!"); + + mClusterManager.addItem(item); + mClusterManager.cluster(); + + visibleMarkers.put(item.getID(),item); + } + } else { + /* + //If the course was previously on screen + if(courseMarkers.containsKey(item.getId())) + { + //1. Remove the Marker from the GoogleMap + courseMarkers.get(item.getId()).remove(); + + //2. Remove the reference to the Marker from the HashMap + courseMarkers.remove(item.getId()); + } + */ + } + } + } + + + private void setUpClustering() { - mClusterManager = new ClusterManager(this, mMap); - mMap.setOnCameraChangeListener(getCameraChangeListener()); mClusterManager.setRenderer(new OwnIconRendered(MapsActivity.this,mMap,mClusterManager)); @@ -230,7 +269,7 @@ public class MapsActivity extends BaseActivity implements LoaderManager.LoaderCa private void addHeatMap() { HeatmapTileProvider mProvider = new HeatmapTileProvider.Builder() - .data(mPositionList) + .data(mHeatMapPositionList) .radius(50) .build(); @@ -380,10 +419,8 @@ public class MapsActivity extends BaseActivity implements LoaderManager.LoaderCa LatLng pos = new LatLng(Double.parseDouble(incident.getString("latitude")),Double.parseDouble(incident.getString("longitude"))); Log.d(TAG, "Adding marker with position: " + pos.latitude + " : " + pos.longitude); - AppClusterItem offsetItem = new AppClusterItem(incident,pos); - myMarkers.add(offsetItem); - mPositionList.add(pos); - + myMarkers.add(new AppClusterItem(incident,pos)); + mHeatMapPositionList.add(pos); } addHeatMap(); diff --git a/app/src/main/java/org/deke/risk/riskahead/ReportWFActivity.java b/app/src/main/java/org/deke/risk/riskahead/ReportWFActivity.java index 533a871..d85901e 100644 --- a/app/src/main/java/org/deke/risk/riskahead/ReportWFActivity.java +++ b/app/src/main/java/org/deke/risk/riskahead/ReportWFActivity.java @@ -2,38 +2,48 @@ package org.deke.risk.riskahead; import android.app.Fragment; import android.app.FragmentTransaction; +import android.content.Intent; +import android.content.SharedPreferences; +import android.location.Address; +import android.location.Geocoder; import android.os.Bundle; import android.view.Menu; import android.view.View; import com.beardedhen.androidbootstrap.BootstrapButton; +import com.google.android.gms.maps.model.LatLng; +import com.google.gson.Gson; import org.deke.risk.riskahead.fragments.ReportWF_1_Fragment; import org.deke.risk.riskahead.fragments.ReportWF_2_Fragment; +import org.deke.risk.riskahead.helper.AppClusterItem; import org.deke.risk.riskahead.helper.BaseActivity; +import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Locale; -public class ReportWFActivity extends BaseActivity implements ReportWF_1_Fragment.OnInputFinishedListener, ReportWF_2_Fragment.OnInputFinishedListener { +public class ReportWFActivity extends BaseActivity implements ReportWF_1_Fragment.OnInputFinishedListener, ReportWF_1_Fragment.OnCallMapListener, ReportWF_2_Fragment.OnInputFinishedListener { private final static String mActivityTitle = "Report NEW"; private final static String TAG = ReportWFActivity.class.getSimpleName(); - List fragList = new ArrayList(); + private List fragList = new ArrayList(); - Fragment frag_report_1 = new ReportWF_1_Fragment(); - Fragment frag_report_2 = new ReportWF_2_Fragment(); + private Fragment frag_report_1 = new ReportWF_1_Fragment(); + private Fragment frag_report_2 = new ReportWF_2_Fragment(); - BootstrapButton btnContinue; - BootstrapButton btnReportNow; + private BootstrapButton btnContinue; + private BootstrapButton btnReportNow; + + private AppClusterItem incident = new AppClusterItem(); private int currentState = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - //setContentView(R.layout.activity_report_wf); fragList.add(frag_report_1); fragList.add(frag_report_2); @@ -49,17 +59,48 @@ public class ReportWFActivity extends BaseActivity implements ReportWF_1_Fragmen } }); - btnReportNow = (BootstrapButton) findViewById(R.id.btn_reportwf_reportnow); btnReportNow.setVisibility(View.INVISIBLE); } + private void modifiyPos(String pos){ + String[] position = pos.split(":"); + Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault()); + LatLng latlngpos = new LatLng(Double.parseDouble(position[0]), Double.parseDouble(position[1])); + + try { + List
addressList = geocoder.getFromLocation(latlngpos.latitude,latlngpos.longitude,1); + + if (addressList != null && addressList.size() > 0) { + Address address = addressList.get(0); + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < address.getMaxAddressLineIndex(); i++) { + if(address.getAddressLine(i) != null) sb.append(address.getAddressLine(i)).append("\n"); + } + + if(address.getCountryName() != null) sb.append(address.getCountryName()); + incident.setmPosDescription(sb.toString()); + } + incident.setPosition(latlngpos); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public AppClusterItem getIncident(){ + return incident; + } + + public void setIncident(AppClusterItem newIncident){ + incident = newIncident; + } + private void initFragment(int state) { FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.replace(R.id.fragment_reportwf, fragList.get(state)); transaction.addToBackStack(null); - transaction.commit(); if(state > 1) btnReportNow.setVisibility(View.VISIBLE); @@ -99,4 +140,38 @@ public class ReportWFActivity extends BaseActivity implements ReportWF_1_Fragmen btnReportNow.setVisibility(View.INVISIBLE); } } + + @Override + public void onStop(){ + super.onStop(); + + SharedPreferences mPrefs = getPreferences(MODE_PRIVATE); + Gson gson = new Gson(); + + SharedPreferences.Editor prefsEditor = mPrefs.edit(); + + prefsEditor.putString("incident",gson.toJson(incident)); + prefsEditor.commit(); + } + + @Override + public void onResume(){ + super.onResume(); + + SharedPreferences mPrefs = getPreferences(MODE_PRIVATE); + Gson gson = new Gson(); + + if(!mPrefs.getString("incident", "").equals("")) incident = gson.fromJson(mPrefs.getString("incident", ""), AppClusterItem.class); + + Intent intent = getIntent(); + String pos = intent.getStringExtra(EXTRA_MESSAGE); + if(pos != null) modifiyPos(pos); + } + + + + @Override + public void onCallMap() { + gotoMapActivity(); + } } diff --git a/app/src/main/java/org/deke/risk/riskahead/ReportlistActivity.java b/app/src/main/java/org/deke/risk/riskahead/ReportlistActivity.java index 8ccbbf4..d9db797 100644 --- a/app/src/main/java/org/deke/risk/riskahead/ReportlistActivity.java +++ b/app/src/main/java/org/deke/risk/riskahead/ReportlistActivity.java @@ -52,7 +52,7 @@ public class ReportlistActivity extends BaseActivity { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { try { - gotoViewReportActivity(resultList.get(position).getString("uid")); + gotoViewReportActivity(resultList.get(position).getInt("uid")); } catch (JSONException e) { e.printStackTrace(); } diff --git a/app/src/main/java/org/deke/risk/riskahead/ViewReportActivity.java b/app/src/main/java/org/deke/risk/riskahead/ViewReportActivity.java index ce003f0..333b6a4 100644 --- a/app/src/main/java/org/deke/risk/riskahead/ViewReportActivity.java +++ b/app/src/main/java/org/deke/risk/riskahead/ViewReportActivity.java @@ -49,7 +49,7 @@ public class ViewReportActivity extends BaseActivity { userHasToBeLoggedIn(); Intent intent = getIntent(); - final String uid = intent.getStringExtra(BaseActivity.EXTRA_MESSAGE); + final Integer uid = intent.getIntExtra(BaseActivity.EXTRA_MESSAGE, 0); txtTitle = (EditText) findViewById(R.id.input_viewreport_short); txtDescription = (EditText) findViewById(R.id.input_viewreport_long); @@ -99,7 +99,7 @@ public class ViewReportActivity extends BaseActivity { }); } - private void deleteReport(String uid) { + private void deleteReport(Integer uid) { deleteIncident(uid); } @@ -113,19 +113,19 @@ public class ViewReportActivity extends BaseActivity { return mActivityTitle; } - public void getIncident(String uid) { + public void getIncident(Integer uid) { String tag_string_req = "getincidentwithpositionfromid"; StringRequest strReq = getStringRequestGetIncidentWithPositionFromID(uid); AppController.getInstance().addToRequestQueue(strReq, tag_string_req); } - public void deleteIncident(String uid) { + public void deleteIncident(Integer uid) { String tag_string_req = "deactivateIncident"; StringRequest strReq = getStringRequestDeleteIncident(uid); AppController.getInstance().addToRequestQueue(strReq, tag_string_req); } - private StringRequest getStringRequestDeleteIncident(final String incidentid) { + private StringRequest getStringRequestDeleteIncident(final Integer incidentid) { showDialog(); return new StringRequest(Request.Method.POST, AppConfig.URL_REGISTER, new Response.Listener() { @@ -167,7 +167,7 @@ public class ViewReportActivity extends BaseActivity { params.put("tag", "deactivateincident"); params.put("uid", user.get("uid")); params.put("token", user.get("token")); - params.put("incidentid", incidentid); + params.put("incidentid", incidentid.toString()); return params; @@ -176,7 +176,7 @@ public class ViewReportActivity extends BaseActivity { } - private StringRequest getStringRequestGetIncidentWithPositionFromID(final String incidentid) { + private StringRequest getStringRequestGetIncidentWithPositionFromID(final Integer incidentid) { showDialog(); return new StringRequest(Request.Method.POST, AppConfig.URL_REGISTER, new Response.Listener() { @@ -263,7 +263,7 @@ public class ViewReportActivity extends BaseActivity { params.put("tag", "getincidentfromid"); params.put("uid", user.get("uid")); params.put("token", user.get("token")); - params.put("incidentid", incidentid); + params.put("incidentid", incidentid.toString()); return params; @@ -272,13 +272,13 @@ public class ViewReportActivity extends BaseActivity { }; } - public void getIncidentVoteScore(String uid) { + public void getIncidentVoteScore(Integer uid) { String tag_string_req = "getincidentvotescore"; StringRequest strReq = getStringRequestGetIncidentVoteScore(uid); AppController.getInstance().addToRequestQueue(strReq, tag_string_req); } - private StringRequest getStringRequestGetIncidentVoteScore(final String incidentid) { + private StringRequest getStringRequestGetIncidentVoteScore(final Integer incidentid) { return new StringRequest(Request.Method.POST, AppConfig.URL_REGISTER, new Response.Listener() { @Override @@ -318,26 +318,26 @@ public class ViewReportActivity extends BaseActivity { params.put("tag", "getincidentvotescore"); params.put("uid", user.get("uid")); params.put("token", user.get("token")); - params.put("incidentid", incidentid); + params.put("incidentid", incidentid.toString()); return params; } }; } - public void makeUpvote(String uid) { + public void makeUpvote(Integer uid) { String tag_string_req = "addvote"; StringRequest strReq = getStringRequestAddVote(uid, "1"); AppController.getInstance().addToRequestQueue(strReq, tag_string_req); } - public void makeDownvote(String uid) { + public void makeDownvote(Integer uid) { String tag_string_req = "addvote"; StringRequest strReq = getStringRequestAddVote(uid, "2"); AppController.getInstance().addToRequestQueue(strReq, tag_string_req); } - private StringRequest getStringRequestAddVote(final String incidentid, final String votetype) { + private StringRequest getStringRequestAddVote(final Integer incidentid, final String votetype) { return new StringRequest(Request.Method.POST, AppConfig.URL_REGISTER, new Response.Listener() { @Override @@ -380,7 +380,7 @@ public class ViewReportActivity extends BaseActivity { params.put("tag", "addvote"); params.put("uid", user.get("uid")); params.put("token", user.get("token")); - params.put("incidentid", incidentid); + params.put("incidentid", incidentid.toString()); params.put("votetype", votetype); return params; diff --git a/app/src/main/java/org/deke/risk/riskahead/fragments/ReportWF_1_Fragment.java b/app/src/main/java/org/deke/risk/riskahead/fragments/ReportWF_1_Fragment.java index 0e37993..d9f19e2 100644 --- a/app/src/main/java/org/deke/risk/riskahead/fragments/ReportWF_1_Fragment.java +++ b/app/src/main/java/org/deke/risk/riskahead/fragments/ReportWF_1_Fragment.java @@ -9,11 +9,17 @@ import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.EditText; +import android.widget.RelativeLayout; import android.widget.Spinner; +import android.widget.TextView; -import com.beardedhen.androidbootstrap.AwesomeTextView; +import com.beardedhen.androidbootstrap.BootstrapButton; +import com.google.android.gms.maps.model.LatLng; import org.deke.risk.riskahead.R; +import org.deke.risk.riskahead.ReportWFActivity; +import org.deke.risk.riskahead.helper.AppClusterItem; +import org.deke.risk.riskahead.helper.BaseActivity; import org.deke.risk.riskahead.helper.HintAdapter; /** @@ -23,16 +29,27 @@ public class ReportWF_1_Fragment extends Fragment{ private View mainview; - Spinner spinner_main_1; - Spinner spinner_sub_1; + private Spinner spinner_main_1; + private Spinner spinner_sub_1; + private EditText sub_1_etc; + private RelativeLayout rl_pos; + private BootstrapButton btnPos; + private TextView txtPosDetail; - OnInputFinishedListener mCallback; + private boolean isCatFinished; + AppClusterItem tmpIncident = new AppClusterItem(); + + OnInputFinishedListener mCallbackFinished; + OnCallMapListener mCallbackMapListener; + + public interface OnCallMapListener { + void onCallMap(); + } public interface OnInputFinishedListener { void onInputFinished(boolean finished); } - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -44,18 +61,23 @@ public class ReportWF_1_Fragment extends Fragment{ initSpinnerOneMain(); initSpinnerOneSub(); + initLayerPosition(); return mainview; } - private void isFinished(boolean isFinished){ - if(isFinished){ + private void checkIfFinished(){ + boolean isFinished = isCatFinished && (tmpIncident != null) && (tmpIncident.getPosition() != null); + + if(isCatFinished) mainview.findViewById(R.id.ll_pos).setVisibility(View.VISIBLE); + + if(isFinished ){ mainview.findViewById(R.id.atv_reportwf_1_finish).setVisibility(View.VISIBLE); }else{ mainview.findViewById(R.id.atv_reportwf_1_finish).setVisibility(View.INVISIBLE); } - mCallback.onInputFinished(isFinished); + mCallbackFinished.onInputFinished(isFinished); } private void initSpinnerOneMain() { @@ -101,13 +123,14 @@ public class ReportWF_1_Fragment extends Fragment{ adapter_sub_1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner_sub_1.setAdapter(new HintAdapter(adapter_sub_1, R.layout.contact_spinner_row_nothing_selected, getActivity())); - if (((HintAdapter) spinner_main_1.getAdapter()).isInInitialState()){ + if (((HintAdapter) spinner_main_1.getAdapter()).isInInitialState()) { spinner_sub_1.setVisibility(View.INVISIBLE); - }else{ + } else { spinner_sub_1.setVisibility(View.VISIBLE); } - isFinished(false); + isCatFinished = false; + checkIfFinished(); } @Override @@ -118,6 +141,7 @@ public class ReportWF_1_Fragment extends Fragment{ } private void initSpinnerOneSub() { + sub_1_etc = (EditText) mainview.findViewById(R.id.txt_reportwf_1_cat_etc); spinner_sub_1 = (Spinner) mainview.findViewById(R.id.dd_reportwf_1_cat_sub); spinner_sub_1.setVisibility(View.INVISIBLE); spinner_sub_1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @@ -153,11 +177,15 @@ public class ReportWF_1_Fragment extends Fragment{ mainview.findViewById(R.id.txt_reportwf_1_cat_etc).setVisibility(View.INVISIBLE); } - if (((HintAdapter) spinner_sub_1.getAdapter()).isInInitialState()){ - isFinished(false); - }else{ - isFinished(true); + if (((HintAdapter) spinner_sub_1.getAdapter()).isInInitialState()) { + isCatFinished = false; + checkIfFinished(); + } else { + isCatFinished = true; + checkIfFinished(); } + + if((position == 0) && (tmpIncident.getmFidCat1_Sub() != 0)) spinner_sub_1.setSelection(tmpIncident.getmFidCat1_Sub()); } @Override @@ -166,15 +194,71 @@ public class ReportWF_1_Fragment extends Fragment{ }); } + private void initLayerPosition(){ + rl_pos = (RelativeLayout) mainview.findViewById(R.id.ll_pos); + rl_pos.setVisibility(View.INVISIBLE); + + btnPos = (BootstrapButton) mainview.findViewById(R.id.btn_reportwf_position); + txtPosDetail = (TextView) mainview.findViewById(R.id.lbl_reportwf_position_detail); + + btnPos.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + mCallbackMapListener.onCallMap(); + } + }); + } + + @Override + public void onResume() { + super.onResume(); + + tmpIncident = ((ReportWFActivity)getActivity()).getIncident(); + + if(tmpIncident != null){ + if(tmpIncident.getPosition() != null){ + rl_pos.setVisibility(View.VISIBLE); + txtPosDetail.setText(tmpIncident.getmPosDescription()); + } + + if(tmpIncident.getmFidCat1_Main() != 0){ + spinner_main_1.setSelection(tmpIncident.getmFidCat1_Main()); + } + + if(tmpIncident.getmFidCat1_Sub() != 0){ + spinner_sub_1.setSelection(tmpIncident.getmFidCat1_Sub()); + } + + if(tmpIncident.getmCat1_Sub_etc() != null){ + sub_1_etc.setText(tmpIncident.getmCat1_Sub_etc()); + } + } + + checkIfFinished(); + } + + @Override + public void onPause() { + super.onPause(); + + tmpIncident.setmFidCat1_Main(spinner_main_1.getSelectedItemPosition()); + tmpIncident.setmFidCat1_Sub(spinner_sub_1.getSelectedItemPosition()); + tmpIncident.setmCat1_Sub_etc(sub_1_etc.getText().toString()); + + ((ReportWFActivity)getActivity()).setIncident(tmpIncident); + } + + @Override public void onAttach(Activity activity) { super.onAttach(activity); try { - mCallback = (OnInputFinishedListener) activity; + mCallbackFinished = (OnInputFinishedListener) activity; + mCallbackMapListener = (OnCallMapListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() - + " must implement OnInputFinishedListener"); + + " must implement all Listeners"); } } diff --git a/app/src/main/java/org/deke/risk/riskahead/fragments/ReportWF_2_Fragment.java b/app/src/main/java/org/deke/risk/riskahead/fragments/ReportWF_2_Fragment.java index de1f1d2..9bcd329 100644 --- a/app/src/main/java/org/deke/risk/riskahead/fragments/ReportWF_2_Fragment.java +++ b/app/src/main/java/org/deke/risk/riskahead/fragments/ReportWF_2_Fragment.java @@ -1,33 +1,46 @@ package org.deke.risk.riskahead.fragments; import android.app.Activity; +import android.app.DatePickerDialog; +import android.app.Dialog; +import android.app.DialogFragment; import android.app.Fragment; +import android.app.TimePickerDialog; import android.os.Bundle; +import android.text.format.DateFormat; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; +import android.widget.DatePicker; import android.widget.EditText; import android.widget.RelativeLayout; import android.widget.Spinner; -import android.widget.TextView; - -import com.beardedhen.androidbootstrap.AwesomeTextView; +import android.widget.TimePicker; import org.deke.risk.riskahead.R; import org.deke.risk.riskahead.helper.HintAdapter; +import java.util.Calendar; + /** * Created by Dennis on 08.12.2015. */ -public class ReportWF_2_Fragment extends Fragment{ +public class ReportWF_2_Fragment extends Fragment { View mainview; Spinner spinner_main_1; Spinner spinner_sub_1; + EditText input_time_from; + EditText input_date_from; + EditText input_time_to; + EditText input_date_to; + + EditText tmpInput; + OnInputFinishedListener mCallback; public interface OnInputFinishedListener { @@ -60,6 +73,43 @@ public class ReportWF_2_Fragment extends Fragment{ initLayoutFromTime(); initLayoutToTime(); + input_time_from = ((EditText) mainview.findViewById(R.id.input_report_from_time)); + input_time_to = ((EditText) mainview.findViewById(R.id.input_report_to_time)); + input_date_from = ((EditText) mainview.findViewById(R.id.input_report_from_date)); + input_date_to = ((EditText) mainview.findViewById(R.id.input_report_to_date)); + + input_time_from.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + tmpInput = input_time_from; + showTimePickerDialog(v); + } + }); + + input_time_to.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + tmpInput = input_time_to; + showTimePickerDialog(v); + } + }); + + input_date_to.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + tmpInput = input_date_to; + showDatePickerDialog(v); + } + }); + + input_date_from.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + tmpInput = input_date_from; + showDatePickerDialog(v); + } + }); + return mainview; } @@ -122,11 +172,13 @@ public class ReportWF_2_Fragment extends Fragment{ mainview.findViewById(R.id.ll_report_from_time).setVisibility(View.VISIBLE); mainview.findViewById(R.id.ll_report_to_time).setVisibility(View.INVISIBLE); mainview.findViewById(R.id.dd_reportwf_2_time_sub).setVisibility(View.INVISIBLE); + checkIfDateTimeFinished(); break; case 4: mainview.findViewById(R.id.ll_report_from_time).setVisibility(View.VISIBLE); mainview.findViewById(R.id.ll_report_to_time).setVisibility(View.VISIBLE); mainview.findViewById(R.id.dd_reportwf_2_time_sub).setVisibility(View.INVISIBLE); + checkIfDateTimeFinished(); break; case 5: mainview.findViewById(R.id.ll_report_from_time).setVisibility(View.INVISIBLE); @@ -177,9 +229,73 @@ public class ReportWF_2_Fragment extends Fragment{ } } + public class TimePickerFragment extends DialogFragment + implements TimePickerDialog.OnTimeSetListener { + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + // Use the current time as the default values for the picker + final Calendar c = Calendar.getInstance(); + int hour = c.get(Calendar.HOUR_OF_DAY); + int minute = c.get(Calendar.MINUTE); + + // Create a new instance of TimePickerDialog and return it + return new TimePickerDialog(getActivity(), this, hour, minute, + DateFormat.is24HourFormat(getActivity())); + } + + public void onTimeSet(TimePicker view, int hourOfDay, int minute) { + tmpInput.setText(new StringBuilder().append(hourOfDay) + .append(":").append(minute).append(" ")); + + checkIfDateTimeFinished(); + } + } + + public void showTimePickerDialog(View v) { + DialogFragment newFragment = new TimePickerFragment(); + newFragment.show(getFragmentManager(),"Pick Time"); + } + + public class DatePickerFragment extends DialogFragment + implements DatePickerDialog.OnDateSetListener { + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + final Calendar c = Calendar.getInstance(); + int year = c.get(Calendar.YEAR); + int month = c.get(Calendar.MONTH); + int day = c.get(Calendar.DAY_OF_MONTH); + + return new DatePickerDialog(getActivity(), this, year, month, day); + } + + public void onDateSet(DatePicker view, int year, int month, int day) { + tmpInput.setText(new StringBuilder() + .append(year).append("-").append(month + 1).append("-") + .append(day).append(" ")); + + checkIfDateTimeFinished(); + } + } + + public void showDatePickerDialog(View v) { + DialogFragment newFragment = new DatePickerFragment(); + newFragment.show(getFragmentManager(), "Pick Date"); + } + + private void checkIfDateTimeFinished(){ + if( mainview.findViewById(R.id.ll_report_from_time).getVisibility() == View.VISIBLE) { + isFinished(!input_date_from.getText().toString().matches("")); + } + + if (mainview.findViewById(R.id.ll_report_to_time).getVisibility() == View.VISIBLE){ + isFinished(!input_date_to.getText().toString().matches("")); + } + } + @Override public void onDetach() { super.onDetach(); } - } diff --git a/app/src/main/java/org/deke/risk/riskahead/helper/AppClusterItem.java b/app/src/main/java/org/deke/risk/riskahead/helper/AppClusterItem.java index 62a8bbf..b1f9816 100644 --- a/app/src/main/java/org/deke/risk/riskahead/helper/AppClusterItem.java +++ b/app/src/main/java/org/deke/risk/riskahead/helper/AppClusterItem.java @@ -5,6 +5,7 @@ import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.LatLng; import com.google.maps.android.clustering.ClusterItem; +import org.deke.risk.riskahead.R; import org.json.JSONException; import org.json.JSONObject; @@ -14,7 +15,7 @@ import org.json.JSONObject; public class AppClusterItem implements ClusterItem { private LatLng mPosition; - private String mID; + private Integer mID; private String mTitle; private String mDescription; private String mFidUser; @@ -28,13 +29,21 @@ public class AppClusterItem implements ClusterItem { private String mColor; private String mUsername; private int mScore; + + + private int mFidCat1_Main; + private int mFidCat1_Sub; + private String mCat1_Sub_etc; + private String mPosDescription; + + private BitmapDescriptor icon; public AppClusterItem(JSONObject mIncident, LatLng pos) { try { - this.mID = mIncident.getString("uid"); + this.mID = mIncident.getInt("uid"); this.mTitle = mIncident.getString("text_short"); this.mDescription = mIncident.getString("text_long"); this.mFidUser = mIncident.getString("fid_user"); @@ -54,26 +63,43 @@ public class AppClusterItem implements ClusterItem { } } + public AppClusterItem(){ + + } + @Override public LatLng getPosition() { return mPosition; } + public void setPosition(LatLng pos) { + mPosition = pos; + } + public BitmapDescriptor getIcon() { BitmapDescriptor mIcon; switch (Integer.valueOf(this.mFidCategory)) { case 1: - mIcon = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED); + mIcon = BitmapDescriptorFactory.fromResource(R.drawable.icon_general); break; case 2: - mIcon = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN); + mIcon = BitmapDescriptorFactory.fromResource(R.drawable.icon_verbal); break; case 3: - mIcon = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE); + mIcon = BitmapDescriptorFactory.fromResource(R.drawable.icon_middle_violance); + break; + case 4: + mIcon = BitmapDescriptorFactory.fromResource(R.drawable.icon_high_violance); + break; + case 5: + mIcon = BitmapDescriptorFactory.fromResource(R.drawable.icon_nature); + break; + case 6: + mIcon = BitmapDescriptorFactory.fromResource(R.drawable.icon_infra_v2); break; default: - mIcon = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW); + mIcon = BitmapDescriptorFactory.fromResource(R.drawable.icon_general); break; } @@ -126,7 +152,41 @@ public class AppClusterItem implements ClusterItem { return this.mColor; } - public String getID() { + public Integer getID() { return mID; } + + + + public String getmPosDescription() { + return mPosDescription; + } + + public void setmPosDescription(String mLocDetail) { + this.mPosDescription = mLocDetail; + } + + public int getmFidCat1_Main() { + return mFidCat1_Main; + } + + public void setmFidCat1_Main(int mFidCat1_Main) { + this.mFidCat1_Main = mFidCat1_Main; + } + + public int getmFidCat1_Sub() { + return mFidCat1_Sub; + } + + public void setmFidCat1_Sub(int mFidCat1_Sub) { + this.mFidCat1_Sub = mFidCat1_Sub; + } + + public String getmCat1_Sub_etc() { + return mCat1_Sub_etc; + } + + public void setmCat1_Sub_etc(String mCat1_Sub_etc) { + this.mCat1_Sub_etc = mCat1_Sub_etc; + } } 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 191f96c..26a8b8d 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 @@ -260,7 +260,7 @@ public abstract class BaseActivity extends AppCompatActivity { public void gotoReportActivity(String position){ Intent intent; - intent = new Intent(getApplicationContext(), ReportActivity.class); + intent = new Intent(getApplicationContext(), ReportWFActivity.class); intent.putExtra(EXTRA_MESSAGE, position); startActivity(intent); } @@ -302,7 +302,7 @@ public abstract class BaseActivity extends AppCompatActivity { startActivity(intent); } - public void gotoViewReportActivity(String uid){ + public void gotoViewReportActivity(Integer uid){ Intent intent; intent = new Intent(getApplicationContext(), ViewReportActivity.class); intent.putExtra(EXTRA_MESSAGE, uid); diff --git a/app/src/main/res/drawable/layout_bg.xml b/app/src/main/res/drawable/layout_bg.xml index 129a06b..38176e7 100644 --- a/app/src/main/res/drawable/layout_bg.xml +++ b/app/src/main/res/drawable/layout_bg.xml @@ -3,5 +3,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/drawable/layout_bg_gradient.xml b/app/src/main/res/drawable/layout_bg_gradient.xml index da03918..bc755ad 100644 --- a/app/src/main/res/drawable/layout_bg_gradient.xml +++ b/app/src/main/res/drawable/layout_bg_gradient.xml @@ -3,9 +3,9 @@ diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 111df75..a3abdc5 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -2,7 +2,6 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:bootstrap="http://schemas.android.com/apk/res-auto" - style="@style/CustomActionBarTheme" android:id="@+id/drawer_layout" android:background="@drawable/layout_bg_gradient" android:layout_width="match_parent" diff --git a/app/src/main/res/layout/activity_report.xml b/app/src/main/res/layout/activity_report.xml index a82d04e..929136b 100644 --- a/app/src/main/res/layout/activity_report.xml +++ b/app/src/main/res/layout/activity_report.xml @@ -3,7 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" xmlns:bootstrap="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" - android:background="@color/bg_common_2" + android:background="@drawable/layout_bg_gradient" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ReportActivity"> @@ -24,8 +24,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:padding="15dp" - android:layout_weight="1" - android:orientation="vertical"> + android:layout_weight="1"> diff --git a/app/src/main/res/layout/contact_spinner_row_nothing_selected.xml b/app/src/main/res/layout/contact_spinner_row_nothing_selected.xml index 8c4eaa4..8a4f7a5 100644 --- a/app/src/main/res/layout/contact_spinner_row_nothing_selected.xml +++ b/app/src/main/res/layout/contact_spinner_row_nothing_selected.xml @@ -2,12 +2,11 @@ diff --git a/app/src/main/res/layout/fragment_reportwf_1.xml b/app/src/main/res/layout/fragment_reportwf_1.xml index bdc0147..ce52670 100644 --- a/app/src/main/res/layout/fragment_reportwf_1.xml +++ b/app/src/main/res/layout/fragment_reportwf_1.xml @@ -1,57 +1,120 @@ - + - + - + - + - + + + + + + + + + + + + + + + + + - + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_reportwf_2.xml b/app/src/main/res/layout/fragment_reportwf_2.xml index fdf23f8..7a804f3 100644 --- a/app/src/main/res/layout/fragment_reportwf_2.xml +++ b/app/src/main/res/layout/fragment_reportwf_2.xml @@ -1,148 +1,172 @@ - + android:gravity="center" + android:orientation="vertical" > - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:animateLayoutChanges="true" + android:gravity="center" + android:layout_marginBottom="0dp"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + \ No newline at end of file diff --git a/app/src/main/res/layout/map_info_window.xml b/app/src/main/res/layout/map_info_window.xml index 5d64b23..472b87f 100644 --- a/app/src/main/res/layout/map_info_window.xml +++ b/app/src/main/res/layout/map_info_window.xml @@ -3,8 +3,11 @@ android:layout_width="150dp" android:layout_height="wrap_content" android:orientation="horizontal" - android:padding="1dp" - android:background="#CCc9c9c9"> + android:paddingLeft="7dp" + android:paddingRight="5dp" + android:paddingTop="3dp" + android:paddingBottom="13dp" + android:background="@drawable/infowindow"> - + android:singleLine="true" + android:ellipsize="marquee" + android:marqueeRepeatLimit="marquee_forever"/> + > #26ae90 #2e3237 - #ececec - #0461A8 + + + #1175b7 + #0461a8 + #333333 + #fdfdfd + + + #ffffff #ffffff #ff0000 diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 0f948e5..312d63e 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -5,24 +5,16 @@ @dimen/micro_padding - - - - -