From 493395d36a352cc1f4e42dcd37dcf0facfaf5e41 Mon Sep 17 00:00:00 2001 From: "marcin.jedynski" Date: Mon, 26 Nov 2018 20:54:54 +0100 Subject: [PATCH] moved manualLocation logic from MapActivity to ManualLocationUtils --- .../wmi/findmytutor/activity/MapActivity.java | 15 ++- .../utils/ManualLocationUtils.java | 114 ++++++++++++++++++ app/src/main/res/layout/location_modal.xml | 41 +++++++ 3 files changed, 168 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/uam/wmi/findmytutor/utils/ManualLocationUtils.java create mode 100644 app/src/main/res/layout/location_modal.xml diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java index b4c0b9c..c872839 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java @@ -37,10 +37,13 @@ import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.uam.wmi.findmytutor.R; import com.uam.wmi.findmytutor.model.Coordinate; +import com.uam.wmi.findmytutor.model.PredefinedCoordViewModel; import com.uam.wmi.findmytutor.model.User; import com.uam.wmi.findmytutor.network.ApiClient; import com.uam.wmi.findmytutor.service.CoordinateService; import com.uam.wmi.findmytutor.service.UserService; +import com.uam.wmi.findmytutor.utils.FeedbackUtils; +import com.uam.wmi.findmytutor.utils.ManualLocationUtils; import com.uam.wmi.findmytutor.utils.PrefUtils; import com.uam.wmi.findmytutor.utils.RestApiHelper; import com.uam.wmi.findmytutor.utils.mapUtils; @@ -84,7 +87,7 @@ public class MapActivity extends BaseActivity private HashMap coordsMap = new HashMap<>(); private HashMap markerHash = new HashMap<>(); private Set previousCoordsIds = new HashSet<>(); - + private ManualLocationUtils manualLocationUtils; // Camera Animation params private int zoomParam = 17; private int bearingParam = 180; @@ -109,6 +112,7 @@ public class MapActivity extends BaseActivity } finally { mHandler.postDelayed(mStatusChecker, mInterval); } + manualLocationUtils = new ManualLocationUtils(MapActivity.this); }; @@ -267,6 +271,7 @@ public class MapActivity extends BaseActivity PrefUtils.getUserId(getApplicationContext()), PrefUtils.getLocationLevel(getApplicationContext()) ); + PrefUtils.putManualLocation(this, latLng); handleBackgroundTaskLifeCycle(); @@ -318,7 +323,13 @@ public class MapActivity extends BaseActivity "Manual Locations selected!" + latLng, Toast.LENGTH_LONG ).show(); - +// LayoutInflater layoutInflaterAndroid = LayoutInflater.from(MapActivity.this); +// View dialogView = layoutInflaterAndroid.inflate(R.layout.feedback_modal, null); +// AlertDialog.Builder alertDialogBuilderUserInput = new AlertDialog.Builder(MapActivity.this ); +// alertDialogBuilderUserInput.setView(dialogView).setPositiveButton("dupa", null); +// final AlertDialog alertDialog = alertDialogBuilderUserInput.create(); + manualLocationUtils.showLocationDialog("Name the location",latLng); +// alertDialog.show(); selectLocationButton.setVisibility(View.GONE); mapboxMap.removeMarker(tmpLocalMarker); tmpLocalMarker = null; diff --git a/app/src/main/java/com/uam/wmi/findmytutor/utils/ManualLocationUtils.java b/app/src/main/java/com/uam/wmi/findmytutor/utils/ManualLocationUtils.java new file mode 100644 index 0000000..694ccf1 --- /dev/null +++ b/app/src/main/java/com/uam/wmi/findmytutor/utils/ManualLocationUtils.java @@ -0,0 +1,114 @@ +package com.uam.wmi.findmytutor.utils; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.pm.PackageManager; +import android.os.Build; +import android.support.v7.app.AlertDialog; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.jakewharton.retrofit2.adapter.rxjava2.HttpException; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.uam.wmi.findmytutor.R; +import com.uam.wmi.findmytutor.activity.BaseActivity; +import com.uam.wmi.findmytutor.model.Coordinate; +import com.uam.wmi.findmytutor.model.Feedback; +import com.uam.wmi.findmytutor.model.PredefinedCoordViewModel; +import com.uam.wmi.findmytutor.network.ApiClient; +import com.uam.wmi.findmytutor.service.FeedbackService; +import com.uam.wmi.findmytutor.service.PredefinedStatusesService; + +import java.util.List; + +import io.reactivex.Single; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.CompositeDisposable; +import io.reactivex.schedulers.Schedulers; +import okhttp3.ResponseBody; +import retrofit2.Response; + +public class ManualLocationUtils { + private Context activityContext; + + public ManualLocationUtils(Context context) { + activityContext = context; + } + + public void showLocationDialog(String subject, LatLng latLng) { + + LayoutInflater layoutInflaterAndroid = LayoutInflater.from(activityContext); + View view = layoutInflaterAndroid.inflate(R.layout.location_modal, null); + AlertDialog.Builder alertDialogBuilderUserInput = new AlertDialog.Builder(activityContext); + alertDialogBuilderUserInput.setView(view).setPositiveButton(activityContext.getString(R.string.modal_feedback_send), null); + final AlertDialog alertDialog = alertDialogBuilderUserInput.create(); + + EditText modalUserInput = view.findViewById(R.id.feedback_input); + TextView modalTitle = view.findViewById(R.id.feedback_modal_title); + modalTitle.setText(subject); + alertDialog.setOnShowListener(new DialogInterface.OnShowListener() { + @Override + public void onShow(DialogInterface dialogInterface) { + Button sendButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); + sendButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + String body = modalUserInput.getText().toString(); + if (TextUtils.isEmpty(body)) { + Toast.makeText(activityContext, activityContext.getString(R.string.modal_feedback_hint), Toast.LENGTH_SHORT).show(); + modalUserInput.requestFocus(); + } else { + sendLocation(body,latLng); + alertDialog.dismiss(); + } + } + }); + } + }); + alertDialog.show(); + } + + private void sendLocation(String body, LatLng latLng) { + PredefinedCoordViewModel droppedMarkercoordinate = new PredefinedCoordViewModel( + null, + latLng.getLatitude(), + latLng.getLongitude(), + latLng.getAltitude(), + PrefUtils.getUserId(activityContext), + "approx", + "nie wiem", + body + ); + PredefinedStatusesService predefinedStatusesService = ApiClient.getClient(activityContext).create(PredefinedStatusesService.class); + CompositeDisposable disposable = new CompositeDisposable(); + disposable.add(predefinedStatusesService.postUserPredefinedCoord(PrefUtils.getUserId(activityContext),droppedMarkercoordinate) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(this::handleResponse, this::handleError)); + } + + private void handleResponse(List resp) { + Toast.makeText(activityContext, "Location saved", Toast.LENGTH_SHORT).show(); + } + + private void handleError(Throwable error) { + if (error instanceof HttpException) { + + ResponseBody responseBody = ((HttpException) error).response().errorBody(); + Toast.makeText(activityContext, + RestApiHelper.getErrorMessage(responseBody), Toast.LENGTH_SHORT).show(); + + } else { + Toast.makeText(activityContext, + "Network error " + error.getMessage(), Toast.LENGTH_SHORT).show(); + Log.d("FEEDBACK", error.getMessage()); + } + } +} diff --git a/app/src/main/res/layout/location_modal.xml b/app/src/main/res/layout/location_modal.xml new file mode 100644 index 0000000..cd566f4 --- /dev/null +++ b/app/src/main/res/layout/location_modal.xml @@ -0,0 +1,41 @@ + + + + + + + + + \ No newline at end of file