diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2023361fc..80cb16a8f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,8 @@
###Changelog
+####Version next
+* Pebble: use the last known location for setting sunrise and sunset
+
####Version 0.13.8
* Mi Band2: attempt at fixing connection issues for users of Mi Fit (#408, #425)
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/AlarmReceiver.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/AlarmReceiver.java
index e9470d31a..9c4a581ac 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/AlarmReceiver.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/AlarmReceiver.java
@@ -1,11 +1,17 @@
package nodomain.freeyourgadget.gadgetbridge.externalevents;
+import android.Manifest;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.location.Criteria;
+import android.location.Location;
+import android.location.LocationManager;
+import android.support.v4.app.ActivityCompat;
import net.e175.klaus.solarpositioning.DeltaT;
import net.e175.klaus.solarpositioning.SPA;
@@ -64,6 +70,21 @@ public class AlarmReceiver extends BroadcastReceiver {
float latitude = prefs.getFloat("location_latitude", 0);
float longitude = prefs.getFloat("location_longitude", 0);
LOG.info("got longitude/latitude from preferences: " + latitude + "/" + longitude);
+
+ if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED &&
+ prefs.getBoolean("use_updated_location_if_available", false)) {
+ LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
+ Criteria criteria = new Criteria();
+ String provider = locationManager.getBestProvider(criteria, false);
+ if (provider != null) {
+ Location lastKnownLocation = locationManager.getLastKnownLocation(provider);
+ if (lastKnownLocation != null) {
+ latitude = (float) lastKnownLocation.getLatitude();
+ longitude = (float) lastKnownLocation.getLongitude();
+ LOG.info("got longitude/latitude from last known location: " + latitude + "/" + longitude);
+ }
+ }
+ }
GregorianCalendar[] sunriseTransitSetTomorrow = SPA.calculateSunriseTransitSet(dateTimeTomorrow, latitude, longitude, DeltaT.estimate(dateTimeTomorrow));
CalendarEventSpec calendarEventSpec = new CalendarEventSpec();
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 62a5c8b2c..00ece7d21 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -106,6 +106,8 @@
Acquire Location
Latitude
Longitude
+ Keep location updated
+ Try to get the current location at runtime, use the stored location as fallback
Please enable network location
location acquired
diff --git a/app/src/main/res/xml/changelog_master.xml b/app/src/main/res/xml/changelog_master.xml
index 28a8722f0..158ab7428 100644
--- a/app/src/main/res/xml/changelog_master.xml
+++ b/app/src/main/res/xml/changelog_master.xml
@@ -1,5 +1,8 @@
+
+ Pebble: use the last known location for setting sunrise and sunset
+
Mi Band 2: attempt at fixing connection issues for users of Mi Fit
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 663ca61f1..483f6deb6 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -206,6 +206,12 @@
android:defaultValue="0"
android:key="location_longitude"
android:title="@string/pref_title_location_longitude" />
+