aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/res/values/preference_keys.xml1
-rw-r--r--main/res/values/strings.xml3
-rw-r--r--main/res/xml/preferences.xml5
-rw-r--r--main/src/cgeo/geocaching/CgeoApplication.java22
-rw-r--r--main/src/cgeo/geocaching/settings/Settings.java6
-rw-r--r--main/src/cgeo/geocaching/settings/SettingsActivity.java25
6 files changed, 38 insertions, 24 deletions
diff --git a/main/res/values/preference_keys.xml b/main/res/values/preference_keys.xml
index 47eae46..e8840f5 100644
--- a/main/res/values/preference_keys.xml
+++ b/main/res/values/preference_keys.xml
@@ -107,6 +107,7 @@
<string name="pref_gccustomdate">gccustomdate</string>
<string name="pref_cookiestore">cookiestore</string>
<string name="pref_googleplayservices">googleplayservices</string>
+ <string name="pref_lowpowermode">lowpowerlocation</string>
<string name="pref_lastdetailspage">lastdetailspage</string>
<string name="pref_livemapstrategy">livemapstrategy</string>
<string name="pref_livemaphintshowcount">livemaphintshowcount</string>
diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml
index ec01a10..e3f7825 100644
--- a/main/res/values/strings.xml
+++ b/main/res/values/strings.xml
@@ -529,8 +529,9 @@
<string name="init_maintenance_directories_note">c:geo stores images, log images and other files related to a cache in a separate directory. In some cases (like importing/exporting the database) this directory may contain outdated files, which can be deleted here.</string>
<string name="init_maintenance_directories">Delete orphaned files</string>
<string name="init_location">Geolocation</string>
- <string name="init_location_note">On devices equipped with Google Play Services, c:geo can automatically use a better geolocation provider. However, this prevents the use of an external BlueTooth GPS receiver.</string>
+ <string name="init_location_note">On devices equipped with Google Play Services, c:geo can automatically use a better geolocation provider. However, this prevents the use of an external BlueTooth GPS receiver. Also, a low-power mode can prevent the use of the GPS when a highly accurate location is not strictly necessary.</string>
<string name="init_location_googleplayservices">Use Google Play Services</string>
+ <string name="init_location_lowpower">Low-power mode</string>
<string name="init_create_memory_dump">Create memory dump</string>
<string name="init_memory_dump">Memory dump</string>
<string name="init_memory_dumped">Memory dumped to %s</string>
diff --git a/main/res/xml/preferences.xml b/main/res/xml/preferences.xml
index 6d7f546..54b3353 100644
--- a/main/res/xml/preferences.xml
+++ b/main/res/xml/preferences.xml
@@ -749,10 +749,15 @@
<cgeo.geocaching.settings.TextPreference
android:layout="@layout/text_preference"
android:text="@string/init_location_note" />
+
<CheckBoxPreference
android:defaultValue="true"
android:key="@string/pref_googleplayservices"
android:title="@string/init_location_googleplayservices" />
+ <CheckBoxPreference
+ android:defaultValue="false"
+ android:key="@string/pref_lowpowermode"
+ android:title="@string/init_location_lowpower" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/init_debug_title" >
<cgeo.geocaching.settings.TextPreference
diff --git a/main/src/cgeo/geocaching/CgeoApplication.java b/main/src/cgeo/geocaching/CgeoApplication.java
index b461ec8..4688266 100644
--- a/main/src/cgeo/geocaching/CgeoApplication.java
+++ b/main/src/cgeo/geocaching/CgeoApplication.java
@@ -85,7 +85,7 @@ public class CgeoApplication extends Application {
isGooglePlayServicesAvailable = true;
}
Log.i("Google Play services are " + (isGooglePlayServicesAvailable ? "" : "not ") + "available");
- setupGeoDataObservables(Settings.useGooglePlayServices());
+ setupGeoDataObservables(Settings.useGooglePlayServices(), Settings.useLowPowerMode());
geoDataObservableLowPower.subscribeOn(RxUtils.looperCallbacksScheduler).first().subscribe(REMEMBER_GEODATA);
directionObservable = DirectionProvider.create(this).replay(1).refCount().doOnNext(new Action1<Float>() {
@Override
@@ -96,21 +96,17 @@ public class CgeoApplication extends Application {
gpsStatusObservable = GpsStatusProvider.create(this).share();
}
- public void setupGeoDataObservables(final boolean useGooglePlayServices) {
- final Action1<IGeoData> rememberGeoData = new Action1<IGeoData>() {
- @Override
- public void call(final IGeoData geoData) {
- currentGeo = geoData;
+ public void setupGeoDataObservables(final boolean useGooglePlayServices, final boolean useLowPowerLocation) {
+ if (useGooglePlayServices) {
+ geoDataObservable = LocationProvider.getMostPrecise(this, true).replay(1).refCount().doOnNext(REMEMBER_GEODATA);
+ if (useLowPowerLocation) {
+ geoDataObservableLowPower = LocationProvider.getLowPower(this, true).replay(1).refCount().doOnNext(REMEMBER_GEODATA);
+ } else {
+ geoDataObservableLowPower = geoDataObservable;
}
- };
- if (isGooglePlayServicesAvailable) {
- geoDataObservable = LocationProvider.getMostPrecise(this, true).replay(1).refCount().doOnNext(rememberGeoData);
- geoDataObservableLowPower = LocationProvider.getLowPower(this, true).replay(1).refCount().doOnNext(rememberGeoData);
- LocationProvider.getInitialLocation(this, false).subscribeOn(RxUtils.looperCallbacksScheduler).subscribe(rememberGeoData);
} else {
- geoDataObservable = GeoDataProvider.create(this).replay(1).refCount().doOnNext(rememberGeoData);
+ geoDataObservable = GeoDataProvider.create(this).replay(1).refCount().doOnNext(REMEMBER_GEODATA);
geoDataObservableLowPower = geoDataObservable;
- geoDataObservable.first().subscribeOn(RxUtils.looperCallbacksScheduler).subscribe(rememberGeoData);
}
}
diff --git a/main/src/cgeo/geocaching/settings/Settings.java b/main/src/cgeo/geocaching/settings/Settings.java
index c434d9f..6b9cbd5 100644
--- a/main/src/cgeo/geocaching/settings/Settings.java
+++ b/main/src/cgeo/geocaching/settings/Settings.java
@@ -394,11 +394,11 @@ public class Settings {
}
public static boolean useGooglePlayServices() {
- return getBoolean(R.string.pref_googleplayservices, true);
+ return CgeoApplication.getInstance().isGooglePlayServicesAvailable() && getBoolean(R.string.pref_googleplayservices, true);
}
- public static boolean setUseGooglePlayServices(final boolean useGooglePlayServices) {
- return putBoolean(R.string.pref_googleplayservices, useGooglePlayServices);
+ public static boolean useLowPowerMode() {
+ return useGooglePlayServices() && getBoolean(R.string.pref_lowpowermode, false);
}
/**
diff --git a/main/src/cgeo/geocaching/settings/SettingsActivity.java b/main/src/cgeo/geocaching/settings/SettingsActivity.java
index 9001aeb..5297857 100644
--- a/main/src/cgeo/geocaching/settings/SettingsActivity.java
+++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java
@@ -365,12 +365,13 @@ public class SettingsActivity extends PreferenceActivity {
final Preference memoryDumpPref = getPreference(R.string.pref_memory_dump);
memoryDumpPref
.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override public boolean onPreferenceClick(
- final Preference preference) {
- DebugUtils.createMemoryDump(SettingsActivity.this);
- return true;
- }
- });
+ @Override
+ public boolean onPreferenceClick(
+ final Preference preference) {
+ DebugUtils.createMemoryDump(SettingsActivity.this);
+ return true;
+ }
+ });
}
private void initDbLocationPreference() {
@@ -401,15 +402,25 @@ public class SettingsActivity extends PreferenceActivity {
private void initGeolocationPreference() {
final Preference p = getPreference(R.string.pref_googleplayservices);
+ final Preference p2 = getPreference(R.string.pref_lowpowermode);
p.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(final Preference preference, final Object newValue) {
final boolean useGooglePlayServices = (Boolean) newValue;
- CgeoApplication.getInstance().setupGeoDataObservables(useGooglePlayServices);
+ p2.setEnabled(useGooglePlayServices);
+ CgeoApplication.getInstance().setupGeoDataObservables(useGooglePlayServices, Settings.useLowPowerMode());
+ return true;
+ }
+ });
+ p2.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(final Preference preference, final Object newValue) {
+ CgeoApplication.getInstance().setupGeoDataObservables(Settings.useGooglePlayServices(), (Boolean) newValue);
return true;
}
});
p.setEnabled(CgeoApplication.getInstance().isGooglePlayServicesAvailable());
+ p2.setEnabled(Settings.useGooglePlayServices());
}
void initBasicMemberPreferences() {