diff --git a/app/src/main/java/org/eyeseetea/malariacare/strategies/ADashboardActivityStrategy.java b/app/src/main/java/org/eyeseetea/malariacare/strategies/ADashboardActivityStrategy.java index 3250e9e3e5..4e4c37ecd2 100644 --- a/app/src/main/java/org/eyeseetea/malariacare/strategies/ADashboardActivityStrategy.java +++ b/app/src/main/java/org/eyeseetea/malariacare/strategies/ADashboardActivityStrategy.java @@ -5,12 +5,14 @@ import android.content.pm.PackageManager; import android.location.Location; import android.location.LocationManager; +import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.util.Log; import org.eyeseetea.malariacare.R; import org.eyeseetea.malariacare.data.database.model.Survey; import org.eyeseetea.malariacare.data.database.utils.LocationMemory; +import org.eyeseetea.malariacare.domain.exception.EmptyLocationException; import org.eyeseetea.malariacare.layout.listeners.SurveyLocationListener; public abstract class ADashboardActivityStrategy { @@ -32,12 +34,24 @@ public abstract class ADashboardActivityStrategy { public void prepareLocationListener(Activity activity, Survey survey) { + SurveyLocationListener locationListener = new SurveyLocationListener(survey.getId_survey()); - LocationManager locationManager = - (LocationManager) LocationMemory.getContext().getSystemService( - Context.LOCATION_SERVICE); + LocationManager locationManager = null; + try { + locationManager = + (LocationManager) LocationMemory.getContext().getSystemService( + Context.LOCATION_SERVICE); + } + catch (NullPointerException e){ + new EmptyLocationException(e); + } + if (locationManager == null) + { + saveDefaultLocationIfIsNotAvailable(activity, locationListener); + return; + } if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { Log.d(TAG, "requestLocationUpdates via NETWORK"); if (ActivityCompat.checkSelfPermission(activity, @@ -46,6 +60,7 @@ public void prepareLocationListener(Activity activity, Survey survey) { activity, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + saveDefaultLocationIfIsNotAvailable(activity, locationListener); return; } locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, @@ -62,17 +77,28 @@ public void prepareLocationListener(Activity activity, Survey survey) { Log.d(TAG, "location not available via GPS|NETWORK, last know: " + lastLocation); locationListener.saveLocation(lastLocation); } else { - String defaultLatitude = activity.getString( - R.string.GPS_LATITUDE_DEFAULT); - String defaultLongitude = activity.getString( - R.string.GPS_LONGITUDE_DEFAULT); - Location defaultLocation = new Location( - activity.getString(R.string.GPS_PROVIDER_DEFAULT)); - defaultLocation.setLatitude(Double.parseDouble(defaultLatitude)); - defaultLocation.setLongitude(Double.parseDouble(defaultLongitude)); - Log.d(TAG, "location not available via GPS|NETWORK, default: " + defaultLocation); - locationListener.saveLocation(defaultLocation); + saveDefaultLocationIfIsNotAvailable(activity, locationListener); } } } + + private void saveDefaultLocationIfIsNotAvailable(Activity activity, + SurveyLocationListener locationListener) { + Location defaultLocation = createDefaultLocation(activity); + locationListener.saveLocation(defaultLocation); + } + + @NonNull + private Location createDefaultLocation(Activity activity) { + String defaultLatitude = activity.getString( + R.string.GPS_LATITUDE_DEFAULT); + String defaultLongitude = activity.getString( + R.string.GPS_LONGITUDE_DEFAULT); + Location defaultLocation = new Location( + activity.getString(R.string.GPS_PROVIDER_DEFAULT)); + defaultLocation.setLatitude(Double.parseDouble(defaultLatitude)); + defaultLocation.setLongitude(Double.parseDouble(defaultLongitude)); + Log.d(TAG, "location not available via GPS|NETWORK, default: " + defaultLocation); + return defaultLocation; + } }