diff --git a/app/src/main/java/com/jens/automation2/ActivityManagePoi.java b/app/src/main/java/com/jens/automation2/ActivityManagePoi.java index 06d2143e..2e7c38f1 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManagePoi.java +++ b/app/src/main/java/com/jens/automation2/ActivityManagePoi.java @@ -13,6 +13,7 @@ import android.location.LocationListener; import android.location.LocationManager; import android.net.Uri; import android.os.Bundle; +import android.os.Looper; import android.view.View; import android.view.View.OnClickListener; import android.view.inputmethod.InputMethodManager; @@ -113,7 +114,7 @@ public class ActivityManagePoi extends Activity myLocationManager.removeUpdates(myLocationListenerGps); ActivityMainPoi.poiToEdit = new PointOfInterest(); ActivityMainPoi.poiToEdit.setLocation(new Location("POINT_LOCATION")); - if(loadFormValuesToVariable()) + if(loadFormValuesToVariable(false)) if(ActivityMainPoi.poiToEdit.create(this)) { this.setResult(RESULT_OK); @@ -123,7 +124,7 @@ public class ActivityManagePoi extends Activity private void changePoi() { myLocationManager.removeUpdates(myLocationListenerGps); - if(loadFormValuesToVariable()) + if(loadFormValuesToVariable(false)) if(ActivityMainPoi.poiToEdit.change(this)) { this.setResult(RESULT_OK); @@ -162,9 +163,14 @@ public class ActivityManagePoi extends Activity locationSearchStart = Calendar.getInstance(); startTimeout(); - Miscellaneous.logEvent("i", "POI Manager", getResources().getString(R.string.logGettingPositionWithProvider) + " " + provider1, 3); - myLocationManager.requestLocationUpdates(provider1, 500, Settings.satisfactoryAccuracyNetwork, myLocationListenerNetwork); - + if(!Settings.privacyLocationing) + { + Miscellaneous.logEvent("i", "POI Manager", getResources().getString(R.string.logGettingPositionWithProvider) + " " + provider1, 3); + myLocationManager.requestLocationUpdates(provider1, 500, Settings.satisfactoryAccuracyNetwork, myLocationListenerNetwork); + } + else + Miscellaneous.logEvent("i", "POI Manager", "Skipping network location query because private locationing is active.", 4); + Miscellaneous.logEvent("i", "POI Manager", getResources().getString(R.string.logGettingPositionWithProvider) + " " + provider2, 3); myLocationManager.requestLocationUpdates(provider2, 500, Settings.satisfactoryAccuracyGps, myLocationListenerGps); } @@ -181,7 +187,7 @@ public class ActivityManagePoi extends Activity { public void run() { - //calculate the new position of myBall + evaluateLocationResults(); } } @@ -202,9 +208,16 @@ public class ActivityManagePoi extends Activity } } - private void compareLocations() + private void evaluateLocationResults() { - Miscellaneous.logEvent("i", "POI Manager", getResources().getString(R.string.comparing), 4); + /* + Procedure: + If we get a GPS result we take it and suggest a default minimum radius. + If private locationing is active that's the only possible outcome other than a timeout. + + If private locationing is not active + If we get a network + */ // We have GPS if(locationGps != null) @@ -217,18 +230,18 @@ public class ActivityManagePoi extends Activity String text; if(locationNetwork != null) { + Miscellaneous.logEvent("i", "POI Manager", getResources().getString(R.string.comparing), 4); double variance = locationGps.distanceTo(locationNetwork); - text = String.format(getResources().getString(R.string.distanceBetween), Math.round(variance)); - getDialog(text, Math.round(variance) + 1).show(); + getRadiusConfirmationDialog(text, Math.round(variance) + 1).show(); } else { text = String.format(getResources().getString(R.string.locationFound), defaultRadius); - getDialog(text, defaultRadius).show(); + getRadiusConfirmationDialog(text, defaultRadius).show(); } Miscellaneous.logEvent("i", "POI Manager", text, 4); - } // we have a great network signal + } // we have a great network signal: else if(locationNetwork != null && locationNetwork.getAccuracy() <= Settings.satisfactoryAccuracyGps && locationNetwork.getAccuracy() <= defaultRadius) { /* @@ -242,9 +255,9 @@ public class ActivityManagePoi extends Activity String text = String.format(getResources().getString(R.string.locationFound), defaultRadius); Miscellaneous.logEvent("i", "POI Manager", text, 4); - getDialog(text, defaultRadius).show(); - } // we have a bad network signal - else if( + getRadiusConfirmationDialog(text, defaultRadius).show(); + } + else if( // we have a bad network signal locationNetwork != null && Calendar.getInstance().getTimeInMillis() @@ -258,11 +271,20 @@ public class ActivityManagePoi extends Activity guiPoiLongitude.setText(String.valueOf(locationNetwork.getLongitude())); String text = String.format(getResources().getString(R.string.locationFoundInaccurate), defaultRadius); - getDialog(text, defaultRadius).show(); + getRadiusConfirmationDialog(text, defaultRadius).show(); Miscellaneous.logEvent("i", "POI Manager", text, 4); } else - Miscellaneous.logEvent("i", "POI Manager", getResources().getString(R.string.logNotAllMeasurings), 4); + { + String text = String.format(getResources().getString(R.string.noLocationCouldBeFound), searchTimeout); + Miscellaneous.logEvent("i", "POI Manager", text, 2); + + if(myLocationListenerNetwork != null) + myLocationManager.removeUpdates(myLocationListenerNetwork); + + myLocationManager.removeUpdates(myLocationListenerGps); + getErrorDialog(text).show(); + } } private AlertDialog getNotificationDialog(String text) @@ -284,8 +306,11 @@ public class ActivityManagePoi extends Activity return alertDialog; } - private AlertDialog getDialog(String text, final double value) + + private AlertDialog getRadiusConfirmationDialog(String text, final double value) { + stopTimeout(); + AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { @@ -310,6 +335,24 @@ public class ActivityManagePoi extends Activity return alertDialog; } + + private AlertDialog getErrorDialog(String text) + { + AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); + DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() + { + @Override + public void onClick(DialogInterface dialog, int which) + { + progressDialog.dismiss(); + } + }; + alertDialogBuilder.setMessage(text); + Looper.prepare(); + AlertDialog alertDialog = alertDialogBuilder.create(); + + return alertDialog; + } public class MyLocationListenerGps implements LocationListener { @@ -326,7 +369,7 @@ public class ActivityManagePoi extends Activity myLocationManager.removeUpdates(this); locationGps = location; - compareLocations(); + evaluateLocationResults(); // } } @@ -370,7 +413,7 @@ public class ActivityManagePoi extends Activity myLocationManager.removeUpdates(myLocationListenerGps); } - compareLocations(); + evaluateLocationResults(); } @Override @@ -403,19 +446,22 @@ public class ActivityManagePoi extends Activity guiPoiRadius.setText(String.valueOf(poi.getRadius())); } - public boolean loadFormValuesToVariable() + public boolean loadFormValuesToVariable(boolean checkOnlyCoordinates) { if(ActivityMainPoi.poiToEdit == null) ActivityMainPoi.poiToEdit = new PointOfInterest(); - - if(guiPoiName.getText().length() == 0) + + if(!checkOnlyCoordinates) { - Toast.makeText(this, getResources().getString(R.string.pleaseEnterValidName), Toast.LENGTH_LONG).show(); - return false; + if (guiPoiName.getText().length() == 0) + { + Toast.makeText(this, getResources().getString(R.string.pleaseEnterValidName), Toast.LENGTH_LONG).show(); + return false; + } + else + ActivityMainPoi.poiToEdit.setName(guiPoiName.getText().toString()); } - else - ActivityMainPoi.poiToEdit.setName(guiPoiName.getText().toString()); - + if(ActivityMainPoi.poiToEdit.getLocation() == null) ActivityMainPoi.poiToEdit.setLocation(new Location("POINT_LOCATION")); @@ -438,28 +484,31 @@ public class ActivityManagePoi extends Activity Toast.makeText(this, getResources().getString(R.string.pleaseEnterValidLongitude), Toast.LENGTH_LONG).show(); return false; } - - try + + if(!checkOnlyCoordinates) { - ActivityMainPoi.poiToEdit.setRadius(Double.parseDouble(guiPoiRadius.getText().toString()), this); + try + { + ActivityMainPoi.poiToEdit.setRadius(Double.parseDouble(guiPoiRadius.getText().toString()), this); + } + catch (NumberFormatException e) + { + Toast.makeText(this, getResources().getString(R.string.pleaseEnterValidRadius), Toast.LENGTH_LONG).show(); + return false; + } + catch (Exception e) + { + Toast.makeText(this, getResources().getString(R.string.unknownError), Toast.LENGTH_LONG).show(); + return false; + } } - catch(NumberFormatException e) - { - Toast.makeText(this, getResources().getString(R.string.pleaseEnterValidRadius), Toast.LENGTH_LONG).show(); - return false; - } - catch (Exception e) - { - Toast.makeText(this, getResources().getString(R.string.unknownError), Toast.LENGTH_LONG).show(); - return false; - } - + return true; } private void showOnMap() { - if(loadFormValuesToVariable()) + if(loadFormValuesToVariable(true)) { try { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7794a3ea..88291c60 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -681,4 +681,5 @@ Location found. The suggested minimum radius for locations is %1$d m. Only a location with a limited accuracy could be found. It might not work reliably. The suggested minimum radius for locations is %1$d." Clone + No position could be found after a timeout of %1$o seconds. \ No newline at end of file