aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/res/values/strings.xml6
-rw-r--r--main/res/xml/preferences.xml7
-rw-r--r--main/src/cgeo/geocaching/CgeoApplication.java6
-rw-r--r--main/src/cgeo/geocaching/sensors/RotationProvider.java11
-rw-r--r--main/src/cgeo/geocaching/settings/Settings.java2
-rw-r--r--main/src/cgeo/geocaching/settings/SettingsActivity.java23
6 files changed, 30 insertions, 25 deletions
diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml
index e2e4ea9..32249dd 100644
--- a/main/res/values/strings.xml
+++ b/main/res/values/strings.xml
@@ -530,9 +530,11 @@
<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. 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_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_googleplayservices">Use Google Play Services</string>
- <string name="init_location_lowpower">Low-power mode</string>
+ <string name="init_low_power">Low-power mode</string>
+ <string name="init_low_power_note">The low-power mode avoids using the GPS and the gyroscope when a highly accurate location is not strictly necessary, at the cost of longer fixing times.</string>
+ <string name="init_low_power_mode">Activate 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 54b3353..82c8f13 100644
--- a/main/res/xml/preferences.xml
+++ b/main/res/xml/preferences.xml
@@ -754,10 +754,15 @@
android:defaultValue="true"
android:key="@string/pref_googleplayservices"
android:title="@string/init_location_googleplayservices" />
+ </PreferenceCategory>
+ <PreferenceCategory android:title="@string/init_low_power">
+ <cgeo.geocaching.settings.TextPreference
+ android:layout="@layout/text_preference"
+ android:text="@string/init_low_power_note" />
<CheckBoxPreference
android:defaultValue="false"
android:key="@string/pref_lowpowermode"
- android:title="@string/init_location_lowpower" />
+ android:title="@string/init_low_power_mode" />
</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 8b53b5e..556acb8 100644
--- a/main/src/cgeo/geocaching/CgeoApplication.java
+++ b/main/src/cgeo/geocaching/CgeoApplication.java
@@ -88,7 +88,7 @@ public class CgeoApplication extends Application {
}
Log.i("Google Play services are " + (isGooglePlayServicesAvailable ? "" : "not ") + "available");
setupGeoDataObservables(Settings.useGooglePlayServices(), Settings.useLowPowerMode());
- setupDirectionObservable();
+ setupDirectionObservable(Settings.useLowPowerMode());
gpsStatusObservable = GpsStatusProvider.create(this).replay(1).refCount();
// Attempt to acquire an initial location before any real activity happens.
@@ -109,8 +109,8 @@ public class CgeoApplication extends Application {
}
}
- private void setupDirectionObservable() {
- directionObservable = RotationProvider.create(this).onErrorResumeNext(new Func1<Throwable, Observable<? extends Float>>() {
+ public void setupDirectionObservable(final boolean useLowPower) {
+ directionObservable = RotationProvider.create(this, useLowPower).onErrorResumeNext(new Func1<Throwable, Observable<? extends Float>>() {
@Override
public Observable<? extends Float> call(final Throwable throwable) {
return OrientationProvider.create(CgeoApplication.this);
diff --git a/main/src/cgeo/geocaching/sensors/RotationProvider.java b/main/src/cgeo/geocaching/sensors/RotationProvider.java
index fc434bf..a7c5cf0 100644
--- a/main/src/cgeo/geocaching/sensors/RotationProvider.java
+++ b/main/src/cgeo/geocaching/sensors/RotationProvider.java
@@ -1,6 +1,5 @@
package cgeo.geocaching.sensors;
-import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.utils.Log;
import cgeo.geocaching.utils.RxUtils.LooperCallbacks;
@@ -21,12 +20,12 @@ public class RotationProvider extends LooperCallbacks<Float> implements SensorEv
private final float[] orientation = new float[4];
@TargetApi(19)
- protected RotationProvider(final Context context) {
+ protected RotationProvider(final Context context, final boolean lowPower) {
sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
// The geomagnetic rotation vector introduced in Android 4.4 (API 19) requires less power. Favour it
// even if it is more sensible to noise in low-power settings.
- final Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR);
- if (sensor != null && Settings.useLowPowerMode()) {
+ final Sensor sensor = lowPower ? sensorManager.getDefaultSensor(Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR) : null;
+ if (sensor != null) {
rotationSensor = sensor;
Log.d("RotationProvider: geomagnetic (low-power) sensor found");
} else {
@@ -68,8 +67,8 @@ public class RotationProvider extends LooperCallbacks<Float> implements SensorEv
}
}
- public static Observable<Float> create(final Context context) {
- return Observable.create(new RotationProvider(context));
+ public static Observable<Float> create(final Context context, final boolean lowPower) {
+ return Observable.create(new RotationProvider(context, lowPower));
}
}
diff --git a/main/src/cgeo/geocaching/settings/Settings.java b/main/src/cgeo/geocaching/settings/Settings.java
index 6b9cbd5..fdcd94f 100644
--- a/main/src/cgeo/geocaching/settings/Settings.java
+++ b/main/src/cgeo/geocaching/settings/Settings.java
@@ -398,7 +398,7 @@ public class Settings {
}
public static boolean useLowPowerMode() {
- return useGooglePlayServices() && getBoolean(R.string.pref_lowpowermode, false);
+ return 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 5297857..6df83cb 100644
--- a/main/src/cgeo/geocaching/settings/SettingsActivity.java
+++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java
@@ -122,7 +122,7 @@ public class SettingsActivity extends PreferenceActivity {
initDefaultNavigationPreferences();
initBackupButtons();
initDbLocationPreference();
- initGeolocationPreference();
+ initGeoDirPreferences();
initDebugPreference();
initBasicMemberPreferences();
initSend2CgeoPreferences();
@@ -400,27 +400,26 @@ 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() {
+ private void initGeoDirPreferences() {
+ final Preference playServices = getPreference(R.string.pref_googleplayservices);
+ playServices.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(final Preference preference, final Object newValue) {
- final boolean useGooglePlayServices = (Boolean) newValue;
- p2.setEnabled(useGooglePlayServices);
- CgeoApplication.getInstance().setupGeoDataObservables(useGooglePlayServices, Settings.useLowPowerMode());
+ CgeoApplication.getInstance().setupGeoDataObservables((Boolean) newValue, Settings.useLowPowerMode());
return true;
}
});
- p2.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ playServices.setEnabled(CgeoApplication.getInstance().isGooglePlayServicesAvailable());
+ getPreference(R.string.pref_lowpowermode).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(final Preference preference, final Object newValue) {
- CgeoApplication.getInstance().setupGeoDataObservables(Settings.useGooglePlayServices(), (Boolean) newValue);
+ final CgeoApplication app = CgeoApplication.getInstance();
+ final Boolean useLowPower = (Boolean) newValue;
+ app.setupGeoDataObservables(Settings.useGooglePlayServices(), useLowPower);
+ app.setupDirectionObservable(useLowPower);
return true;
}
});
- p.setEnabled(CgeoApplication.getInstance().isGooglePlayServicesAvailable());
- p2.setEnabled(Settings.useGooglePlayServices());
}
void initBasicMemberPreferences() {