diff options
| author | Samuel Tardieu <sam@rfc1149.net> | 2014-08-18 21:53:58 +0200 |
|---|---|---|
| committer | Samuel Tardieu <sam@rfc1149.net> | 2014-08-18 21:54:36 +0200 |
| commit | 62b3d30884dc5ad32b59afe915d34f6ae4d89b53 (patch) | |
| tree | 2a4719f2d8af9b87ae067f9708dbe1f16c361717 /main | |
| parent | 948b267b83683f9af6905e6eb5492217924f873d (diff) | |
| download | cgeo-62b3d30884dc5ad32b59afe915d34f6ae4d89b53.zip cgeo-62b3d30884dc5ad32b59afe915d34f6ae4d89b53.tar.gz cgeo-62b3d30884dc5ad32b59afe915d34f6ae4d89b53.tar.bz2 | |
fix #4183: new fused provider breaks BT-GPS
Diffstat (limited to 'main')
| -rw-r--r-- | main/res/values/preference_keys.xml | 1 | ||||
| -rw-r--r-- | main/res/values/strings.xml | 13 | ||||
| -rw-r--r-- | main/res/xml/preferences.xml | 9 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/CgeoApplication.java | 23 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/settings/Settings.java | 8 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/settings/SettingsActivity.java | 14 |
6 files changed, 53 insertions, 15 deletions
diff --git a/main/res/values/preference_keys.xml b/main/res/values/preference_keys.xml index 5189cc5..47eae46 100644 --- a/main/res/values/preference_keys.xml +++ b/main/res/values/preference_keys.xml @@ -106,6 +106,7 @@ <string name="pref_coordinputformat">coordinputformat</string> <string name="pref_gccustomdate">gccustomdate</string> <string name="pref_cookiestore">cookiestore</string> + <string name="pref_googleplayservices">googleplayservices</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 e4759f0..ec01a10 100644 --- a/main/res/values/strings.xml +++ b/main/res/values/strings.xml @@ -528,6 +528,9 @@ <string name="init_maintenance">Maintenance</string> <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_googleplayservices">Use Google Play Services</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> @@ -936,11 +939,11 @@ <string name="license_dismiss">Dismiss</string> <!-- helpers --> - <string name="helper_calendar_title">c:geo calendar plugin</string> - <string name="helper_calendar_missing">c:geo calendar plugin not installed.</string> + <string name="helper_calendar_title">c:geo calendar add-on</string> + <string name="helper_calendar_missing">c:geo calendar add-on not installed.</string> <string name="helper_calendar_description">Enables you to export event caches to the calendar on your device.</string> <string name="helper_sendtocgeo_title">Send to c:geo</string> - <string name="helper_contacts_title">c:geo contacts plugin</string> + <string name="helper_contacts_title">c:geo contacts add-on</string> <string name="helper_contacts_description">Enables you to open a contact card (of your address book) directly from a log entry, so you can more easily ask friends for help.</string> <string name="helper_sendtocgeo_description">Send to c:geo is a browser extension <strong>for your PC</strong>. When browsing geocaching.com, you can send caches to your smartphone with the click of a button directly inside the browser.</string> <string name="helper_locus_title">Locus</string> @@ -957,7 +960,7 @@ <string name="helper_google_translate_description">If you download translation packages in the Google Translate app, then you can easily translate cache descriptions in c:geo by a long tap on the cache description text (without an Internet connection).</string> <!-- add-ons --> - <string name="addon_missing_title">Missing plugin</string> + <string name="addon_missing_title">Missing Add-On</string> <string name="addon_download_prompt">Get it now from Google Play.</string> <!-- export --> @@ -1226,8 +1229,6 @@ <string name="tts_service">Talking compass</string> <string name="tts_start">Start talking</string> <string name="tts_stop">Stop talking</string> - <string name="tts_started">Started speech</string> - <string name="tts_stopped">Stopped speech</string> <string name="err_tts_lang_not_supported">The current language is not supported by text-to-speech.</string> <string name="tts_one_kilometer">one kilometer</string> <plurals name="tts_kilometers"> diff --git a/main/res/xml/preferences.xml b/main/res/xml/preferences.xml index 6226ebf..6d7f546 100644 --- a/main/res/xml/preferences.xml +++ b/main/res/xml/preferences.xml @@ -745,6 +745,15 @@ android:key="@string/pref_fakekey_preference_maintenance_directories" android:title="@string/init_maintenance_directories" /> </PreferenceCategory> + <PreferenceCategory android:title="@string/init_location"> + <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" /> + </PreferenceCategory> <PreferenceCategory android:title="@string/init_debug_title" > <cgeo.geocaching.settings.TextPreference android:layout="@layout/text_preference" diff --git a/main/src/cgeo/geocaching/CgeoApplication.java b/main/src/cgeo/geocaching/CgeoApplication.java index 0a3c0ad..df36d6e 100644 --- a/main/src/cgeo/geocaching/CgeoApplication.java +++ b/main/src/cgeo/geocaching/CgeoApplication.java @@ -7,6 +7,7 @@ import cgeo.geocaching.sensors.GeoDataProvider; import cgeo.geocaching.sensors.GpsStatusProvider; import cgeo.geocaching.sensors.GpsStatusProvider.Status; import cgeo.geocaching.sensors.IGeoData; +import cgeo.geocaching.settings.Settings; import cgeo.geocaching.utils.Log; import cgeo.geocaching.utils.OOMDumpingUncaughtExceptionHandler; import cgeo.geocaching.utils.RxUtils; @@ -34,6 +35,12 @@ public class CgeoApplication extends Application { private volatile IGeoData currentGeo = GeoData.dummyLocation(); private volatile float currentDirection = 0.0f; private boolean isGooglePlayServicesAvailable = false; + private final Action1<IGeoData> REMEMBER_GEODATA = new Action1<IGeoData>() { + @Override + public void call(final IGeoData geoData) { + currentGeo = geoData; + } + }; public static void dumpOnOutOfMemory(final boolean enable) { @@ -77,15 +84,8 @@ public class CgeoApplication extends Application { isGooglePlayServicesAvailable = true; } Log.i("Google Play services are " + (isGooglePlayServicesAvailable ? "" : "not ") + "available"); - final Action1<IGeoData> rememberGeoData = new Action1<IGeoData>() { - @Override - public void call(final IGeoData geoData) { - currentGeo = geoData; - } - }; - geoDataObservable = (isGooglePlayServicesAvailable() ? LocationProvider.create(this) : GeoDataProvider.create(this)) - .replay(1).refCount().doOnNext(rememberGeoData); - geoDataObservable.subscribeOn(RxUtils.looperCallbacksScheduler).first().subscribe(rememberGeoData); + setupGeoDataObservables(Settings.useGooglePlayServices()); + geoDataObservable.subscribeOn(RxUtils.looperCallbacksScheduler).first().subscribe(REMEMBER_GEODATA); directionObservable = DirectionProvider.create(this).replay(1).refCount().doOnNext(new Action1<Float>() { @Override public void call(final Float direction) { @@ -95,6 +95,11 @@ public class CgeoApplication extends Application { gpsStatusObservable = GpsStatusProvider.create(this).share(); } + public void setupGeoDataObservables(final boolean useGooglePlayServices) { + geoDataObservable = (isGooglePlayServicesAvailable() && useGooglePlayServices ? LocationProvider.create(this) : GeoDataProvider.create(this)) + .replay(1).refCount().doOnNext(REMEMBER_GEODATA); + } + @Override public void onLowMemory() { Log.i("Cleaning applications cache."); diff --git a/main/src/cgeo/geocaching/settings/Settings.java b/main/src/cgeo/geocaching/settings/Settings.java index b1c5c31..c434d9f 100644 --- a/main/src/cgeo/geocaching/settings/Settings.java +++ b/main/src/cgeo/geocaching/settings/Settings.java @@ -393,6 +393,14 @@ public class Settings { return getString(R.string.pref_cookiestore, null); } + public static boolean useGooglePlayServices() { + return getBoolean(R.string.pref_googleplayservices, true); + } + + public static boolean setUseGooglePlayServices(final boolean useGooglePlayServices) { + return putBoolean(R.string.pref_googleplayservices, useGooglePlayServices); + } + /** * @param cacheType * The cache type used for future filtering diff --git a/main/src/cgeo/geocaching/settings/SettingsActivity.java b/main/src/cgeo/geocaching/settings/SettingsActivity.java index bf73370..9001aeb 100644 --- a/main/src/cgeo/geocaching/settings/SettingsActivity.java +++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java @@ -122,6 +122,7 @@ public class SettingsActivity extends PreferenceActivity { initDefaultNavigationPreferences(); initBackupButtons(); initDbLocationPreference(); + initGeolocationPreference(); initDebugPreference(); initBasicMemberPreferences(); initSend2CgeoPreferences(); @@ -398,6 +399,19 @@ public class SettingsActivity extends PreferenceActivity { }); } + private void initGeolocationPreference() { + final Preference p = getPreference(R.string.pref_googleplayservices); + p.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(final Preference preference, final Object newValue) { + final boolean useGooglePlayServices = (Boolean) newValue; + CgeoApplication.getInstance().setupGeoDataObservables(useGooglePlayServices); + return true; + } + }); + p.setEnabled(CgeoApplication.getInstance().isGooglePlayServicesAvailable()); + } + void initBasicMemberPreferences() { getPreference(R.string.preference_screen_basicmembers) .setEnabled(!Settings.isGCPremiumMember()); |
