diff --git a/app/app.iml b/app/app.iml index fa129e9..a3e52ba 100644 --- a/app/app.iml +++ b/app/app.iml @@ -71,40 +71,42 @@ - - - + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - @@ -114,39 +116,43 @@ - - - - - + + + + + - - - - + + + + + - - + - + + - - - - + + + + + + - - - + + - - + + + + + - - + + - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index e37c2c8..626752a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -37,15 +37,15 @@ repositories { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.android.support:appcompat-v7:22.2.0' - compile 'com.google.android.gms:play-services:7.5.0' + compile('com.twitter.sdk.android:twitter-core:1.4.1@aar') { + transitive = true; + } + compile 'com.android.support:appcompat-v7:22.2.1' + compile 'com.google.android.gms:play-services:8.3.0' 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; - } - compile 'com.beardedhen:androidbootstrap:2.0.0' - compile 'com.google.maps.android:android-maps-utils:0.3+' + compile 'com.google.maps.android:android-maps-utils:0.3.+' + compile 'com.android.support:support-v4:22.2.1' } 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 82f3f9a..bc44366 100644 --- a/app/src/main/java/org/deke/risk/riskahead/MapsActivity.java +++ b/app/src/main/java/org/deke/risk/riskahead/MapsActivity.java @@ -66,10 +66,13 @@ public class MapsActivity extends BaseActivity implements LoaderManager.LoaderCa private AppClusterItem clickedClusterItem; private ArrayList myMarkers = new ArrayList(); private HashMap visibleMarkers = new HashMap(); - private List mHeatMapPositionList = new ArrayList<>(); + private ClusterManager mClusterManager; + TileOverlay mOverlay; + HeatmapTileProvider mProvider; + private boolean isMarkerShown = false; private LatLng myLocation; @@ -126,8 +129,6 @@ public class MapsActivity extends BaseActivity implements LoaderManager.LoaderCa if(position.zoom >= THRESHOLD_ZOOM_LEVEL) { - //mClusterManager.addItems(myMarkers); - addMarkersToMap(); isMarkerShown = true; } else if (position.zoom < THRESHOLD_ZOOM_LEVEL && (isMarkerShown == true)){ mClusterManager.clearItems(); @@ -135,6 +136,7 @@ public class MapsActivity extends BaseActivity implements LoaderManager.LoaderCa isMarkerShown = false; } + addMarkersToMap(); } }; @@ -142,18 +144,17 @@ public class MapsActivity extends BaseActivity implements LoaderManager.LoaderCa private void addMarkersToMap(){ LatLngBounds bounds = mMap.getProjection().getVisibleRegion().latLngBounds; - + mHeatMapPositionList.clear(); //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())) { + mHeatMapPositionList.add(item.getPosition()); //If the item isn't already being displayed - if(!visibleMarkers.containsKey(item.getID())) + if(isMarkerShown && !visibleMarkers.containsKey(item.getID())) { - Log.d(TAG,"Should add now marker!"); - mClusterManager.addItem(item); mClusterManager.cluster(); @@ -173,6 +174,11 @@ public class MapsActivity extends BaseActivity implements LoaderManager.LoaderCa */ } } + if(!mHeatMapPositionList.isEmpty()) + { + mProvider.setData(mHeatMapPositionList); + mOverlay.clearTileCache(); + } } @@ -268,12 +274,18 @@ public class MapsActivity extends BaseActivity implements LoaderManager.LoaderCa } private void addHeatMap() { - HeatmapTileProvider mProvider = new HeatmapTileProvider.Builder() + mHeatMapPositionList.add(new LatLng(53.252151,10.422109)); + + mProvider = new HeatmapTileProvider.Builder() + .radius(40) .data(mHeatMapPositionList) - .radius(50) + .opacity(0.7) .build(); - TileOverlay mOverlay = mMap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider)); + + mOverlay = mMap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider)); + + addMarkersToMap(); } private void handleIntent(Intent intent){ @@ -415,15 +427,12 @@ public class MapsActivity extends BaseActivity implements LoaderManager.LoaderCa JSONArray incidents = jObj.getJSONArray("message"); for(int i=0;i() { + + @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().commit(); + + + + showAd(); + gotoMapActivity(incident.getPosition().latitude+":"+incident.getPosition().longitude); + } else { + String errorMsg = jObj.getString("error_msg"); + Log.e(TAG, "Error adding incident (Server returned error): " + errorMsg); + showMessage(errorMsg); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Log.e(TAG, "Error adding incident: " + error.getMessage()); + showMessage(getString(R.string.errormsg_couldnotretrieve)); + hideDialog(); + } + }) { + + @Override + protected Map getParams() { + Map params = new HashMap<>(); + params.put("tag", "addincidentwithposition"); + params.put("uid", user.get("uid")); + + return params; + } + }; + } + } 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 333b6a4..cd93127 100644 --- a/app/src/main/java/org/deke/risk/riskahead/ViewReportActivity.java +++ b/app/src/main/java/org/deke/risk/riskahead/ViewReportActivity.java @@ -10,7 +10,6 @@ import android.util.Log; import android.view.View; import android.widget.EditText; import android.widget.TextView; -import android.widget.Toast; import com.android.volley.Request; import com.android.volley.Response; @@ -234,7 +233,7 @@ public class ViewReportActivity extends BaseActivity { }); if(!incident.getString("fid_user").equals(user.get("uid"))){ - findViewById(R.id.ll_01).setVisibility(View.GONE); + findViewById(R.id.layoutFooter).setVisibility(View.GONE); } } else { 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 d9f19e2..d2ead08 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 @@ -14,12 +14,10 @@ import android.widget.Spinner; import android.widget.TextView; 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; /** @@ -27,17 +25,26 @@ import org.deke.risk.riskahead.helper.HintAdapter; */ public class ReportWF_1_Fragment extends Fragment{ - private View mainview; + private final static int VIOLANCE_GENERAL = 1; + private final static int VIOLANCE_VERBAL = 2; + private final static int VIOLANCE_LIGHT = 3; + private final static int VIOLANCE_HARD = 4; + private final static int VIOLANCE_NATURE = 5; + private final static int VIOLANCE_INFRASTRUCTURE = 6; - 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; + private View viewFragment; - private boolean isCatFinished; - AppClusterItem tmpIncident = new AppClusterItem(); + private Spinner crimeCategory; + private Spinner crimeSubCategory; + private EditText crimeSubOther; + + private RelativeLayout timeLayout; + private BootstrapButton btnPositionSearch; + private TextView txtPositionInformation; + + private boolean isMandatoryCategoryFilled; + + AppClusterItem incident; OnInputFinishedListener mCallbackFinished; OnCallMapListener mCallbackMapListener; @@ -57,38 +64,34 @@ public class ReportWF_1_Fragment extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { - mainview = inflater.inflate(R.layout.fragment_reportwf_1, container, false); + viewFragment = inflater.inflate(R.layout.fragment_reportwf_1, container, false); initSpinnerOneMain(); initSpinnerOneSub(); initLayerPosition(); - return mainview; + crimeSubOther = (EditText) viewFragment.findViewById(R.id.txt_reportwf_1_cat_etc); + + return viewFragment; } private void checkIfFinished(){ - boolean isFinished = isCatFinished && (tmpIncident != null) && (tmpIncident.getPosition() != null); + boolean isFinished = isMandatoryCategoryFilled && (incident != null) && (incident.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); - } + if(isMandatoryCategoryFilled) viewFragment.findViewById(R.id.ll_pos).setVisibility(View.VISIBLE); mCallbackFinished.onInputFinished(isFinished); } private void initSpinnerOneMain() { - spinner_main_1 = (Spinner) mainview.findViewById(R.id.dd_reportwf_1_cat_main); + crimeCategory = (Spinner) viewFragment.findViewById(R.id.dd_reportwf_1_cat_main); ArrayAdapter adapter_main_1 = ArrayAdapter.createFromResource(getActivity(), R.array.cat_situation_main, android.R.layout.simple_spinner_dropdown_item); adapter_main_1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - spinner_main_1.setAdapter(new HintAdapter(adapter_main_1, R.layout.contact_spinner_row_nothing_selected, getActivity())); + crimeCategory.setAdapter(new HintAdapter(adapter_main_1, R.layout.contact_spinner_row_nothing_selected, getActivity())); - spinner_main_1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + crimeCategory.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { int stringid = 0; @@ -117,19 +120,20 @@ public class ReportWF_1_Fragment extends Fragment{ break; } - Spinner spinner_sub_1 = (Spinner) mainview.findViewById(R.id.dd_reportwf_1_cat_sub); - ArrayAdapter adapter_sub_1 = ArrayAdapter.createFromResource(mainview.getContext(), + Spinner spinner_sub_1 = (Spinner) viewFragment.findViewById(R.id.dd_reportwf_1_cat_sub); + ArrayAdapter adapter_sub_1 = ArrayAdapter.createFromResource(viewFragment.getContext(), stringid, android.R.layout.simple_spinner_dropdown_item); 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) crimeCategory.getAdapter()).isInInitialState()) { spinner_sub_1.setVisibility(View.INVISIBLE); } else { spinner_sub_1.setVisibility(View.VISIBLE); } - isCatFinished = false; + incident.setmFidCat1_Main(position); + isMandatoryCategoryFilled = false; checkIfFinished(); } @@ -141,51 +145,53 @@ 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() { + crimeSubCategory = (Spinner) viewFragment.findViewById(R.id.dd_reportwf_1_cat_sub); + crimeSubCategory.setVisibility(View.INVISIBLE); + crimeSubCategory.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { - int i = 99; + int i = 0; - switch (((Spinner) mainview.findViewById(R.id.dd_reportwf_1_cat_main)).getSelectedItemPosition()) { - case 1: + switch (((Spinner) viewFragment.findViewById(R.id.dd_reportwf_1_cat_main)).getSelectedItemPosition()) { + case VIOLANCE_GENERAL: i = 7; break; - case 2: + case VIOLANCE_VERBAL: i = 5; break; - case 3: + case VIOLANCE_LIGHT: i = 6; break; - case 4: + case VIOLANCE_HARD: i = 7; break; - case 5: + case VIOLANCE_NATURE: i = 7; break; - case 6: + case VIOLANCE_INFRASTRUCTURE: i = 8; break; } if (position == i) { - mainview.findViewById(R.id.txt_reportwf_1_cat_etc).setVisibility(View.VISIBLE); + viewFragment.findViewById(R.id.txt_reportwf_1_cat_etc).setVisibility(View.VISIBLE); } else { - mainview.findViewById(R.id.txt_reportwf_1_cat_etc).setVisibility(View.INVISIBLE); + viewFragment.findViewById(R.id.txt_reportwf_1_cat_etc).setVisibility(View.INVISIBLE); } - if (((HintAdapter) spinner_sub_1.getAdapter()).isInInitialState()) { - isCatFinished = false; + if (((HintAdapter) crimeSubCategory.getAdapter()).isInInitialState()) { + isMandatoryCategoryFilled = false; checkIfFinished(); } else { - isCatFinished = true; + isMandatoryCategoryFilled = true; checkIfFinished(); } - if((position == 0) && (tmpIncident.getmFidCat1_Sub() != 0)) spinner_sub_1.setSelection(tmpIncident.getmFidCat1_Sub()); + if ((position == 0) && (incident.getmFidCat1_Sub() != 0)) + crimeSubCategory.setSelection(incident.getmFidCat1_Sub()); + + incident.setmFidCat1_Sub(position); } @Override @@ -195,13 +201,13 @@ public class ReportWF_1_Fragment extends Fragment{ } private void initLayerPosition(){ - rl_pos = (RelativeLayout) mainview.findViewById(R.id.ll_pos); - rl_pos.setVisibility(View.INVISIBLE); + timeLayout = (RelativeLayout) viewFragment.findViewById(R.id.ll_pos); + timeLayout.setVisibility(View.INVISIBLE); - btnPos = (BootstrapButton) mainview.findViewById(R.id.btn_reportwf_position); - txtPosDetail = (TextView) mainview.findViewById(R.id.lbl_reportwf_position_detail); + btnPositionSearch = (BootstrapButton) viewFragment.findViewById(R.id.btn_reportwf_position); + txtPositionInformation = (TextView) viewFragment.findViewById(R.id.lbl_reportwf_position_detail); - btnPos.setOnClickListener(new View.OnClickListener() { + btnPositionSearch.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mCallbackMapListener.onCallMap(); @@ -213,24 +219,24 @@ public class ReportWF_1_Fragment extends Fragment{ public void onResume() { super.onResume(); - tmpIncident = ((ReportWFActivity)getActivity()).getIncident(); + incident = ((ReportWFActivity)getActivity()).getIncident(); - if(tmpIncident != null){ - if(tmpIncident.getPosition() != null){ - rl_pos.setVisibility(View.VISIBLE); - txtPosDetail.setText(tmpIncident.getmPosDescription()); + if(incident != null){ + if(incident.getPosition() != null){ + timeLayout.setVisibility(View.VISIBLE); + txtPositionInformation.setText(incident.getmPosDescription()); } - if(tmpIncident.getmFidCat1_Main() != 0){ - spinner_main_1.setSelection(tmpIncident.getmFidCat1_Main()); + if(incident.getmFidCat1_Main() != 0){ + crimeCategory.setSelection(incident.getmFidCat1_Main()); } - if(tmpIncident.getmFidCat1_Sub() != 0){ - spinner_sub_1.setSelection(tmpIncident.getmFidCat1_Sub()); + if(incident.getmFidCat1_Sub() != 0){ + crimeSubCategory.setSelection(incident.getmFidCat1_Sub()); } - if(tmpIncident.getmCat1_Sub_etc() != null){ - sub_1_etc.setText(tmpIncident.getmCat1_Sub_etc()); + if(incident.getmCat1_Sub_etc() != null){ + crimeSubOther.setText(incident.getmCat1_Sub_etc()); } } @@ -241,11 +247,11 @@ public class ReportWF_1_Fragment extends Fragment{ 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()); + incident.setmFidCat1_Main(crimeCategory.getSelectedItemPosition()); + incident.setmFidCat1_Sub(crimeSubCategory.getSelectedItemPosition()); + incident.setmCat1_Sub_etc(crimeSubOther.getText().toString()); - ((ReportWFActivity)getActivity()).setIncident(tmpIncident); + ((ReportWFActivity)getActivity()).setIncident(incident); } 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 9bcd329..ec827aa 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 @@ -20,8 +20,11 @@ import android.widget.Spinner; import android.widget.TimePicker; 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.HintAdapter; +import java.text.SimpleDateFormat; import java.util.Calendar; /** @@ -29,17 +32,26 @@ import java.util.Calendar; */ public class ReportWF_2_Fragment extends Fragment { - View mainview; + private final static int NOW = 1; + private final static int PERIODIC = 2; + private final static int DATETIME = 3; + private final static int DATETIMEAREA = 4; + private final static int DONTKNOW = 5; - Spinner spinner_main_1; - Spinner spinner_sub_1; + private View viewFragment; - EditText input_time_from; - EditText input_date_from; - EditText input_time_to; - EditText input_date_to; + private Spinner timeCategory; + private Spinner timeSubCategory; - EditText tmpInput; + private EditText inputTimeFrom; + private EditText inputDateFrom; + private EditText inputTimeTo; + private EditText inputDateTo; + + private EditText tmpInput; + + private AppClusterItem incident; + private boolean isMandatoryCategoryFilled; OnInputFinishedListener mCallback; @@ -47,15 +59,6 @@ public class ReportWF_2_Fragment extends Fragment { void onInputFinished(boolean finished); } - private void isFinished(boolean isFinished){ - if(isFinished){ - mainview.findViewById(R.id.atv_reportwf_2_finish).setVisibility(View.VISIBLE); - }else{ - mainview.findViewById(R.id.atv_reportwf_2_finish).setVisibility(View.INVISIBLE); - } - - mCallback.onInputFinished(isFinished); - } @Override public void onCreate(Bundle savedInstanceState) { @@ -65,7 +68,7 @@ public class ReportWF_2_Fragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { - mainview = inflater.inflate(R.layout.fragment_reportwf_2, container, false); + viewFragment = inflater.inflate(R.layout.fragment_reportwf_2, container, false); initSpinnerOneMain(); initSpinnerOneSub(); @@ -73,140 +76,128 @@ 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)); + inputTimeFrom = ((EditText) viewFragment.findViewById(R.id.input_report_from_time)); + inputTimeTo = ((EditText) viewFragment.findViewById(R.id.input_report_to_time)); + inputDateFrom = ((EditText) viewFragment.findViewById(R.id.input_report_from_date)); + inputDateTo = ((EditText) viewFragment.findViewById(R.id.input_report_to_date)); - input_time_from.setOnClickListener(new View.OnClickListener() { + inputTimeFrom.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - tmpInput = input_time_from; + tmpInput = inputTimeFrom; showTimePickerDialog(v); } }); - input_time_to.setOnClickListener(new View.OnClickListener() { + inputTimeTo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - tmpInput = input_time_to; + tmpInput = inputTimeTo; showTimePickerDialog(v); } }); - input_date_to.setOnClickListener(new View.OnClickListener() { + inputDateTo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - tmpInput = input_date_to; + tmpInput = inputDateTo; showDatePickerDialog(v); } }); - input_date_from.setOnClickListener(new View.OnClickListener() { + inputDateFrom.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - tmpInput = input_date_from; + tmpInput = inputDateFrom; showDatePickerDialog(v); } }); - return mainview; + return viewFragment; } private void initLayoutToTime() { - RelativeLayout rlFromTime = (RelativeLayout) mainview.findViewById(R.id.ll_report_to_time); + RelativeLayout rlFromTime = (RelativeLayout) viewFragment.findViewById(R.id.ll_report_to_time); rlFromTime.setVisibility(View.INVISIBLE); } private void initLayoutFromTime() { - RelativeLayout rlFromTime = (RelativeLayout) mainview.findViewById(R.id.ll_report_from_time); + RelativeLayout rlFromTime = (RelativeLayout) viewFragment.findViewById(R.id.ll_report_from_time); rlFromTime.setVisibility(View.INVISIBLE); } - private void initSpinnerOneSub() { - spinner_sub_1 = (Spinner) mainview.findViewById(R.id.dd_reportwf_2_time_sub); - spinner_sub_1.setVisibility(View.INVISIBLE); - spinner_sub_1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView parent, View view, int position, long id) { - if(((HintAdapter) spinner_sub_1.getAdapter()).isInInitialState()){ - isFinished(false); - } else { - isFinished(true); - } - } - - @Override - public void onNothingSelected(AdapterView parent) { - - } - }); - } - private void initSpinnerOneMain() { - spinner_main_1 = (Spinner) mainview.findViewById(R.id.dd_reportwf_2_time_main); + timeCategory = (Spinner) viewFragment.findViewById(R.id.dd_reportwf_2_time_main); ArrayAdapter adapter_main_1 = ArrayAdapter.createFromResource(getActivity(), R.array.cat_time_main, android.R.layout.simple_spinner_dropdown_item); adapter_main_1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - spinner_main_1.setAdapter(new HintAdapter(adapter_main_1, R.layout.contact_spinner_row_nothing_selected, getActivity())); + timeCategory.setAdapter(new HintAdapter(adapter_main_1, R.layout.contact_spinner_row_nothing_selected, getActivity())); - spinner_main_1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + timeCategory.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { int stringid = 0; switch (position) { - case 1: - mainview.findViewById(R.id.ll_report_from_time).setVisibility(View.INVISIBLE); - mainview.findViewById(R.id.ll_report_to_time).setVisibility(View.INVISIBLE); - mainview.findViewById(R.id.dd_reportwf_2_time_sub).setVisibility(View.INVISIBLE); - isFinished(true); + case NOW: + viewFragment.findViewById(R.id.ll_report_from_time).setVisibility(View.INVISIBLE); + viewFragment.findViewById(R.id.ll_report_to_time).setVisibility(View.INVISIBLE); + viewFragment.findViewById(R.id.dd_reportwf_2_time_sub).setVisibility(View.INVISIBLE); + + incident.setFromDate(new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime())); + incident.setFromTime(new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime())); + + isMandatoryCategoryFilled = true; break; - case 2: - mainview.findViewById(R.id.ll_report_from_time).setVisibility(View.INVISIBLE); - mainview.findViewById(R.id.ll_report_to_time).setVisibility(View.INVISIBLE); + case PERIODIC: + viewFragment.findViewById(R.id.ll_report_from_time).setVisibility(View.INVISIBLE); + viewFragment.findViewById(R.id.ll_report_to_time).setVisibility(View.INVISIBLE); + + incident.resetDatetime(); + stringid = R.array.cat_time_sub_periodical; + isMandatoryCategoryFilled = false; break; - case 3: - 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(); + case DATETIME: + viewFragment.findViewById(R.id.ll_report_from_time).setVisibility(View.VISIBLE); + viewFragment.findViewById(R.id.ll_report_to_time).setVisibility(View.INVISIBLE); + viewFragment.findViewById(R.id.dd_reportwf_2_time_sub).setVisibility(View.INVISIBLE); + isMandatoryCategoryFilled = false; 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(); + case DATETIMEAREA: + viewFragment.findViewById(R.id.ll_report_from_time).setVisibility(View.VISIBLE); + viewFragment.findViewById(R.id.ll_report_to_time).setVisibility(View.VISIBLE); + viewFragment.findViewById(R.id.dd_reportwf_2_time_sub).setVisibility(View.INVISIBLE); + isMandatoryCategoryFilled = false; break; - case 5: - mainview.findViewById(R.id.ll_report_from_time).setVisibility(View.INVISIBLE); - mainview.findViewById(R.id.ll_report_to_time).setVisibility(View.INVISIBLE); - mainview.findViewById(R.id.dd_reportwf_2_time_sub).setVisibility(View.INVISIBLE); - isFinished(true); - break; - default: - mainview.findViewById(R.id.ll_report_from_time).setVisibility(View.INVISIBLE); - mainview.findViewById(R.id.ll_report_to_time).setVisibility(View.INVISIBLE); - mainview.findViewById(R.id.dd_reportwf_2_time_sub).setVisibility(View.INVISIBLE); - isFinished(false); + case DONTKNOW: + viewFragment.findViewById(R.id.ll_report_from_time).setVisibility(View.INVISIBLE); + viewFragment.findViewById(R.id.ll_report_to_time).setVisibility(View.INVISIBLE); + viewFragment.findViewById(R.id.dd_reportwf_2_time_sub).setVisibility(View.INVISIBLE); + isMandatoryCategoryFilled = true; break; } - if(!((HintAdapter) spinner_main_1.getAdapter()).isInInitialState() && stringid != 0) { - ArrayAdapter adapter_sub_1 = ArrayAdapter.createFromResource(mainview.getContext(), - stringid, android.R.layout.simple_spinner_dropdown_item); + checkIfFinished(); + + if (!((HintAdapter) timeCategory.getAdapter()).isInInitialState() && stringid != 0) { + ArrayAdapter adapter_sub_1 = ArrayAdapter.createFromResource(viewFragment.getContext(),stringid, android.R.layout.simple_spinner_dropdown_item); 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())); - spinner_sub_1.setVisibility(View.VISIBLE); - } else if(stringid == 0) { - spinner_sub_1.setVisibility(View.INVISIBLE); + timeSubCategory.setAdapter(new HintAdapter(adapter_sub_1, R.layout.contact_spinner_row_nothing_selected, getActivity())); + timeSubCategory.setVisibility(View.VISIBLE); + } else if (stringid == 0) { + timeSubCategory.setVisibility(View.INVISIBLE); } - if(((HintAdapter) spinner_main_1.getAdapter()).isInInitialState()){ - isFinished(false); + if (((HintAdapter) timeCategory.getAdapter()).isInInitialState()) { + isMandatoryCategoryFilled = false; + checkIfFinished(); } + + + + incident.setmFidTimeMainCat(position); } @Override @@ -216,6 +207,27 @@ public class ReportWF_2_Fragment extends Fragment { }); } + private void initSpinnerOneSub() { + timeSubCategory = (Spinner) viewFragment.findViewById(R.id.dd_reportwf_2_time_sub); + timeSubCategory.setVisibility(View.INVISIBLE); + timeSubCategory.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + isMandatoryCategoryFilled = !((HintAdapter) timeSubCategory.getAdapter()).isInInitialState(); + + if ((position == 0) && (incident.getmFidTimeSubCat() != 0)) + timeSubCategory.setSelection(incident.getmFidTimeSubCat()); + + checkIfFinished(); + incident.setmFidTimeSubCat(position); + } + + @Override + public void onNothingSelected(AdapterView parent) { + + } + }); + } @Override public void onAttach(Activity activity) { @@ -229,26 +241,71 @@ public class ReportWF_2_Fragment extends Fragment { } } - public class TimePickerFragment extends DialogFragment - implements TimePickerDialog.OnTimeSetListener { + @Override + public void onResume() { + super.onResume(); + + incident = ((ReportWFActivity)getActivity()).getIncident(); + + if(incident != null){ + if(incident.getmFidTimeMainCat() != 0){ + timeCategory.setSelection(incident.getmFidTimeMainCat()); + } + + if(incident.getmFidTimeSubCat() != 0){ + timeSubCategory.setSelection(incident.getmFidTimeSubCat()); + } + + if(incident.getFromDate() != null && !incident.getFromDate().equals("")){ + inputDateFrom.setText(incident.getFromDate()); + } + + if(incident.getFromTime() != null && !incident.getFromTime().equals("")){ + inputTimeFrom.setText(incident.getFromTime()); + } + + if(incident.getToDate() != null && !incident.getToDate().equals("")){ + inputDateTo.setText(incident.getToDate()); + } + + if(incident.getToTime() != null && !incident.getToTime().equals("")){ + inputDateTo.setText(incident.getToDate()); + } + } + + checkIfFinished(); + } + + @Override + public void onPause() { + super.onPause(); + + incident.setmFidTimeMainCat(timeCategory.getSelectedItemPosition()); + incident.setmFidTimeSubCat(timeSubCategory.getSelectedItemPosition()); + incident.setFromDate(inputDateFrom.getText().toString()); + incident.setFromTime(inputTimeFrom.getText().toString()); + incident.setToDate(inputDateTo.getText().toString()); + incident.setToTime(inputTimeTo.getText().toString()); + + ((ReportWFActivity)getActivity()).setIncident(incident); + } + + 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())); + 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(); + checkIfFinished(); } } @@ -257,8 +314,7 @@ public class ReportWF_2_Fragment extends Fragment { newFragment.show(getFragmentManager(),"Pick Time"); } - public class DatePickerFragment extends DialogFragment - implements DatePickerDialog.OnDateSetListener { + public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -275,7 +331,7 @@ public class ReportWF_2_Fragment extends Fragment { .append(year).append("-").append(month + 1).append("-") .append(day).append(" ")); - checkIfDateTimeFinished(); + checkIfFinished(); } } @@ -284,16 +340,19 @@ public class ReportWF_2_Fragment extends Fragment { 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("")); + private void checkIfFinished(){ + if( viewFragment.findViewById(R.id.ll_report_from_time).getVisibility() == View.VISIBLE) { + isMandatoryCategoryFilled = !inputDateFrom.getText().toString().matches(""); } - if (mainview.findViewById(R.id.ll_report_to_time).getVisibility() == View.VISIBLE){ - isFinished(!input_date_to.getText().toString().matches("")); + if (isMandatoryCategoryFilled && viewFragment.findViewById(R.id.ll_report_to_time).getVisibility() == View.VISIBLE){ + isMandatoryCategoryFilled = !inputDateTo.getText().toString().matches(""); } + + mCallback.onInputFinished(isMandatoryCategoryFilled); } + @Override public void onDetach() { super.onDetach(); diff --git a/app/src/main/java/org/deke/risk/riskahead/fragments/ReportWF_3_Fragment.java b/app/src/main/java/org/deke/risk/riskahead/fragments/ReportWF_3_Fragment.java new file mode 100644 index 0000000..567f3ad --- /dev/null +++ b/app/src/main/java/org/deke/risk/riskahead/fragments/ReportWF_3_Fragment.java @@ -0,0 +1,214 @@ +package org.deke.risk.riskahead.fragments; + +import android.app.Activity; +import android.app.Fragment; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.EditText; +import android.widget.Spinner; + +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.HintAdapter; + +/** + * Created by Dennis on 08.12.2015. + */ +public class ReportWF_3_Fragment extends Fragment { + + private final static int GANGS = 1; + private final static int POLICE = 2; + private final static int MOB = 3; + private final static int PARAMILITARY = 4; + private final static int MILITARY = 5; + private final static int TERRORIST = 6; + private final static int ETC = 7; + private final static int DONTKNOW = 8; + + private View viewFragment; + + private Spinner suspectCategory; + private Spinner suspectOriginCategory; + private EditText suspectEtcInput; + + private AppClusterItem incident; + private boolean isMandatoryCategoryFilled; + + OnInputFinishedListener mCallback; + + public interface OnInputFinishedListener { + void onInputFinished(boolean finished); + } + + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { + viewFragment = inflater.inflate(R.layout.fragment_reportwf_3, container, false); + + initSpinnerOneMain(); + initSpinnerOneSub(); + + suspectEtcInput = (EditText) viewFragment.findViewById(R.id.txt_reportwf_3_suspect_etc); + + return viewFragment; + } + + + private void initSpinnerOneMain() { + suspectCategory = (Spinner) viewFragment.findViewById(R.id.dd_reportwf_3_suspect); + + ArrayAdapter adapter_main_1 = ArrayAdapter.createFromResource(getActivity(), + R.array.cat_suspect_main, android.R.layout.simple_spinner_dropdown_item); + adapter_main_1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + suspectCategory.setAdapter(new HintAdapter(adapter_main_1, R.layout.contact_spinner_row_nothing_selected, getActivity())); + + suspectCategory.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + int stringid = 0; + + switch (position) { + case GANGS: + isMandatoryCategoryFilled = true; + break; + case POLICE: + isMandatoryCategoryFilled = true; + break; + case MOB: + isMandatoryCategoryFilled = true; + break; + case PARAMILITARY: + stringid = R.array.cat_suspect_sub_location; + isMandatoryCategoryFilled = false; + break; + case MILITARY: + stringid = R.array.cat_suspect_sub_location; + isMandatoryCategoryFilled = false; + break; + case TERRORIST: + stringid = R.array.cat_suspect_sub_location; + isMandatoryCategoryFilled = false; + break; + case ETC: + suspectEtcInput.setVisibility(View.VISIBLE); + isMandatoryCategoryFilled = false; + break; + case DONTKNOW: + isMandatoryCategoryFilled = true; + break; + } + + if (position != ETC) { + suspectEtcInput.setVisibility(View.INVISIBLE); + } + + + if (!((HintAdapter) suspectCategory.getAdapter()).isInInitialState() && stringid != 0) { + ArrayAdapter adapter_sub_1 = ArrayAdapter.createFromResource(viewFragment.getContext(), stringid, android.R.layout.simple_spinner_dropdown_item); + adapter_sub_1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + suspectOriginCategory.setAdapter(new HintAdapter(adapter_sub_1, R.layout.contact_spinner_row_nothing_selected, getActivity())); + suspectOriginCategory.setVisibility(View.VISIBLE); + } else if (stringid == 0) { + suspectOriginCategory.setVisibility(View.INVISIBLE); + } + + if (((HintAdapter) suspectCategory.getAdapter()).isInInitialState()) { + isMandatoryCategoryFilled = false; + } + + checkIfFinished(); + incident.setmFidSuspectMainCat(position); + } + + @Override + public void onNothingSelected(AdapterView parentView) { + // your code here + } + }); + } + + private void initSpinnerOneSub() { + suspectOriginCategory = (Spinner) viewFragment.findViewById(R.id.dd_reportwf_3_suspect_sub); + suspectOriginCategory.setVisibility(View.INVISIBLE); + suspectOriginCategory.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + + isMandatoryCategoryFilled = !((HintAdapter) suspectOriginCategory.getAdapter()).isInInitialState(); + + if ((position == 0) && (incident.getmFidTimeSubCat() != 0)) + suspectOriginCategory.setSelection(incident.getmFidSuspectOrigin()); + + checkIfFinished(); + incident.setmFidTimeSubCat(position); + } + + @Override + public void onNothingSelected(AdapterView parent) { + + } + }); + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + + try { + mCallback = (OnInputFinishedListener) activity; + } catch (ClassCastException e) { + throw new ClassCastException(activity.toString() + + " must implement OnInputFinishedListener"); + } + } + + @Override + public void onResume() { + super.onResume(); + + incident = ((ReportWFActivity)getActivity()).getIncident(); + + if(incident != null){ + if(incident.getmFidSuspectMainCat() != 0) suspectCategory.setSelection(incident.getmFidSuspectMainCat()); + if(incident.getmFidSuspectOrigin() != 0) suspectOriginCategory.setSelection(incident.getmFidSuspectOrigin()); + if(incident.getmSuspectEtc() != null && !incident.getmSuspectEtc().equals("")) suspectEtcInput.setText(incident.getmSuspectEtc()); + } + + checkIfFinished(); + } + + @Override + public void onPause() { + super.onPause(); + + incident.setmFidSuspectMainCat(suspectCategory.getSelectedItemPosition()); + incident.setmFidSuspectOrigin(suspectOriginCategory.getSelectedItemPosition()); + incident.setmSuspectEtc(suspectEtcInput.getText().toString()); + + ((ReportWFActivity)getActivity()).setIncident(incident); + } + + + + private void checkIfFinished(){ + mCallback.onInputFinished(isMandatoryCategoryFilled); + } + + + @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 b1f9816..fbe8cda 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 @@ -36,6 +36,18 @@ public class AppClusterItem implements ClusterItem { private String mCat1_Sub_etc; private String mPosDescription; + private int mFidTimeMainCat; + private int mFidTimeSubCat; + private String fromTime; + private String fromDate; + private String toTime; + private String toDate; + + private int mFidSuspectMainCat; + private int mFidSuspectOrigin; + private String mSuspectEtc; + + private BitmapDescriptor icon; @@ -189,4 +201,83 @@ public class AppClusterItem implements ClusterItem { public void setmCat1_Sub_etc(String mCat1_Sub_etc) { this.mCat1_Sub_etc = mCat1_Sub_etc; } + + public int getmFidTimeMainCat() { + return mFidTimeMainCat; + } + + public void setmFidTimeMainCat(int mFidTimeMainCat) { + this.mFidTimeMainCat = mFidTimeMainCat; + } + + public int getmFidTimeSubCat() { + return mFidTimeSubCat; + } + + public void setmFidTimeSubCat(int mFidTimeSubCat) { + this.mFidTimeSubCat = mFidTimeSubCat; + } + + public String getFromTime() { + return fromTime; + } + + public void setFromTime(String fromTime) { + this.fromTime = fromTime; + } + + public String getFromDate() { + return fromDate; + } + + public void setFromDate(String fromDate) { + this.fromDate = fromDate; + } + + public String getToTime() { + return toTime; + } + + public void setToTime(String toTime) { + this.toTime = toTime; + } + + public String getToDate() { + return toDate; + } + + public void setToDate(String toDate) { + toDate = toDate; + } + + public void resetDatetime() { + toTime = ""; + toDate = ""; + fromTime = ""; + fromDate = ""; + } + + public int getmFidSuspectMainCat() { + return mFidSuspectMainCat; + } + + public void setmFidSuspectMainCat(int mFidSuspectMainCat) { + this.mFidSuspectMainCat = mFidSuspectMainCat; + } + + public int getmFidSuspectOrigin() { + return mFidSuspectOrigin; + } + + public void setmFidSuspectOrigin(int mFidSuspectOrigin) { + this.mFidSuspectOrigin = mFidSuspectOrigin; + } + + public String getmSuspectEtc() { + return mSuspectEtc; + } + + public void setmSuspectEtc(String mSuspectEtc) { + this.mSuspectEtc = mSuspectEtc; + } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a3abdc5..f931fca 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -9,7 +9,7 @@ tools:context=".MainActivity"> @@ -53,7 +53,7 @@ diff --git a/app/src/main/res/layout/activity_profile.xml b/app/src/main/res/layout/activity_profile.xml index b5315f3..0c26345 100644 --- a/app/src/main/res/layout/activity_profile.xml +++ b/app/src/main/res/layout/activity_profile.xml @@ -9,13 +9,13 @@ tools:context=".ProfileActivity"> - - - + + + + + + + + android:layout_width="match_parent" + android:gravity="center_horizontal" + android:animateLayoutChanges="true" + android:layout_weight="0"> + + + + + + + + + + + - - - - - - - - - diff --git a/app/src/main/res/layout/activity_subscriptions.xml b/app/src/main/res/layout/activity_subscriptions.xml index dcfc2b0..c79513b 100644 --- a/app/src/main/res/layout/activity_subscriptions.xml +++ b/app/src/main/res/layout/activity_subscriptions.xml @@ -8,13 +8,13 @@ tools:context=".SubscriptionsActivity"> @@ -21,7 +21,7 @@ android:orientation="horizontal"> - - - - - \ 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 7a804f3..ce894af 100644 --- a/app/src/main/res/layout/fragment_reportwf_2.xml +++ b/app/src/main/res/layout/fragment_reportwf_2.xml @@ -9,7 +9,7 @@ android:orientation="vertical"> - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_reportwf_3.xml b/app/src/main/res/layout/fragment_reportwf_3.xml new file mode 100644 index 0000000..7df48e0 --- /dev/null +++ b/app/src/main/res/layout/fragment_reportwf_3.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + \ 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 472b87f..c087ad7 100644 --- a/app/src/main/res/layout/map_info_window.xml +++ b/app/src/main/res/layout/map_info_window.xml @@ -1,14 +1,31 @@ + + + + - + android:padding="3dp"> + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_reportwf.xml b/app/src/main/res/menu/menu_reportwf.xml index 3749dc4..db31bd3 100644 --- a/app/src/main/res/menu/menu_reportwf.xml +++ b/app/src/main/res/menu/menu_reportwf.xml @@ -2,12 +2,12 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> - - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7c235d2..3779032 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -207,7 +207,21 @@ Nachts + + Straßenkriminelle/Gangs + Polizei + Volksmenge + Miliz, Kartell, Guerilla (Paramilitär) + Soldaten (Militär) + Terroristen (religiöse oder politische) + Sonstige:… + Weiß ich nicht + + + Lokale aus dem Land (National) + Ausländische +