diff options
| -rw-r--r-- | main/res/values/strings.xml | 6 | ||||
| -rw-r--r-- | main/res/xml/preferences.xml | 7 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/CgeoApplication.java | 6 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/sensors/RotationProvider.java | 11 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/settings/Settings.java | 2 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/settings/SettingsActivity.java | 23 |
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() { |
