From d084c567262e1fb9a43e79aa25d4a08f80a0dd8b Mon Sep 17 00:00:00 2001 From: Wolfgang Wiedmeyer Date: Fri, 8 May 2015 18:52:27 +0200 Subject: remove play services first round --- main/AndroidManifest.xml | 6 - main/project.properties | 2 - main/src/cgeo/geocaching/CgeoApplication.java | 3 - .../geocaching/playservices/LocationProvider.java | 160 --------------------- main/src/cgeo/geocaching/sensors/Sensors.java | 1 - main/src/cgeo/geocaching/settings/Settings.java | 118 ++++----------- 6 files changed, 30 insertions(+), 260 deletions(-) delete mode 100644 main/src/cgeo/geocaching/playservices/LocationProvider.java (limited to 'main') diff --git a/main/AndroidManifest.xml b/main/AndroidManifest.xml index 372e4b9..f0677b9 100644 --- a/main/AndroidManifest.xml +++ b/main/AndroidManifest.xml @@ -41,9 +41,6 @@ android:label="@string/app_name" android:theme="@style/cgeo" android:hardwareAccelerated="false"> - - subject = ReplaySubject.createWithSize(1); - private final GoogleApiClient locationClient; - - private static synchronized LocationProvider getInstance(final Context context) { - if (instance == null) { - instance = new LocationProvider(context); - } - return instance; - } - - private synchronized void updateRequest() { - if (locationClient.isConnected()) { - if (mostPreciseCount.get() > 0) { - Log.d("LocationProvider: requesting most precise locations"); - LocationServices.FusedLocationApi.requestLocationUpdates(locationClient, LOCATION_REQUEST, this, RxUtils.looperCallbacksLooper); - } else if (lowPowerCount.get() > 0) { - Log.d("LocationProvider: requesting low-power locations"); - LocationServices.FusedLocationApi.requestLocationUpdates(locationClient, LOCATION_REQUEST_LOW_POWER, this, RxUtils.looperCallbacksLooper); - } else { - Log.d("LocationProvider: stopping location requests"); - LocationServices.FusedLocationApi.removeLocationUpdates(locationClient, this); - } - } - } - - private static Observable get(final Context context, final AtomicInteger reference) { - final LocationProvider instance = getInstance(context); - return Observable.create(new OnSubscribe() { - @Override - public void call(final Subscriber subscriber) { - if (reference.incrementAndGet() == 1) { - instance.updateRequest(); - } - subscriber.add(Subscriptions.create(new Action0() { - @Override - public void call() { - RxUtils.looperCallbacksWorker.schedule(new Action0() { - @Override - public void call() { - if (reference.decrementAndGet() == 0) { - instance.updateRequest(); - } - } - }, 2500, TimeUnit.MILLISECONDS); - } - })); - subscriber.add(subject.subscribe(Subscribers.from(subscriber))); - } - }); - } - - public static Observable getMostPrecise(final Context context) { - return get(context, mostPreciseCount).onBackpressureDrop(); - } - - public static Observable getLowPower(final Context context) { - // Low-power location without the last stored location - final Observable lowPowerObservable = get(context, lowPowerCount).skip(1); - - // High-power location without the last stored location - final Observable highPowerObservable = get(context, mostPreciseCount).skip(1); - - // Use either low-power (with a 6 seconds head start) or high-power observables to obtain a location - // no less precise than 20 meters. - final Observable untilPreciseEnoughObservable = - lowPowerObservable.mergeWith(highPowerObservable.delaySubscription(6, TimeUnit.SECONDS)) - .takeUntil(new Func1() { - @Override - public Boolean call(final GeoData geoData) { - return geoData.getAccuracy() <= 20; - } - }); - - // After sending the last known location, try to get a precise location then use the low-power mode. If no - // location information is given for 25 seconds (if the network location is turned off for example), get - // back to the precise location and try again. - return subject.first().concatWith(untilPreciseEnoughObservable.concatWith(lowPowerObservable).timeout(25, TimeUnit.SECONDS).retry()).onBackpressureDrop(); - } - - /** - * Build a new geo data provider object. - *

- * There is no need to instantiate more than one such object in an application, as observers can be added - * at will. - * - * @param context the context used to retrieve the system services - */ - private LocationProvider(final Context context) { - final GeoData initialLocation = GeoData.getInitialLocation(context); - subject.onNext(initialLocation != null ? initialLocation : GeoData.DUMMY_LOCATION); - locationClient = new GoogleApiClient.Builder(context) - .addApi(LocationServices.API) - .addConnectionCallbacks(this) - .addOnConnectionFailedListener(this) - .build(); - locationClient.connect(); - } - - @Override - public void onConnected(final Bundle bundle) { - updateRequest(); - } - - @Override - public void onConnectionFailed(final ConnectionResult connectionResult) { - Log.e("cannot connect to Google Play location service: " + connectionResult); - subject.onError(new RuntimeException("Connection failed: " + connectionResult)); - } - - @Override - public void onLocationChanged(final Location location) { - if (Settings.useLowPowerMode()) { - location.setProvider(GeoData.LOW_POWER_PROVIDER); - } - subject.onNext(new GeoData(location)); - } - - @Override - public void onConnectionSuspended(final int arg0) { - // empty - } -} diff --git a/main/src/cgeo/geocaching/sensors/Sensors.java b/main/src/cgeo/geocaching/sensors/Sensors.java index c3f6ce7..6dc0ec2 100644 --- a/main/src/cgeo/geocaching/sensors/Sensors.java +++ b/main/src/cgeo/geocaching/sensors/Sensors.java @@ -1,7 +1,6 @@ package cgeo.geocaching.sensors; import cgeo.geocaching.CgeoApplication; -import cgeo.geocaching.playservices.LocationProvider; import cgeo.geocaching.sensors.GpsStatusProvider.Status; import cgeo.geocaching.settings.Settings; import cgeo.geocaching.utils.AngleUtils; diff --git a/main/src/cgeo/geocaching/settings/Settings.java b/main/src/cgeo/geocaching/settings/Settings.java index c15bc1b..3e05efa 100644 --- a/main/src/cgeo/geocaching/settings/Settings.java +++ b/main/src/cgeo/geocaching/settings/Settings.java @@ -12,7 +12,7 @@ import cgeo.geocaching.list.StoredList; import cgeo.geocaching.location.Geopoint; import cgeo.geocaching.maps.CGeoMap.MapMode; import cgeo.geocaching.maps.MapProviderFactory; -//import cgeo.geocaching.maps.google.v1.GoogleMapProvider; +import cgeo.geocaching.maps.LivemapStrategy; import cgeo.geocaching.maps.interfaces.GeoPointImpl; import cgeo.geocaching.maps.interfaces.MapProvider; import cgeo.geocaching.maps.interfaces.MapSource; @@ -57,7 +57,7 @@ public class Settings { private static final char HISTORY_SEPARATOR = ','; public static final int SHOW_WP_THRESHOLD_DEFAULT = 10; public static final int SHOW_WP_THRESHOLD_MAX = 50; -// private static final int MAP_SOURCE_DEFAULT = GoogleMapProvider.GOOGLE_MAP_ID.hashCode(); + private static final int MAP_SOURCE_DEFAULT = GoogleMapProvider.GOOGLE_MAP_ID.hashCode(); public static final boolean HW_ACCEL_DISABLED_BY_DEFAULT = Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1 || @@ -136,63 +136,6 @@ public class Settings { // migrate from non standard file location and integer based boolean types final Editor e = sharedPrefs.edit(); -<<<<<<< HEAD - e.putString(getKey(R.string.pref_temp_twitter_token_secret), old.getString(getKey(R.string.pref_temp_twitter_token_secret), null)); - e.putString(getKey(R.string.pref_temp_twitter_token_public), old.getString(getKey(R.string.pref_temp_twitter_token_public), null)); - e.putBoolean(getKey(R.string.pref_help_shown), old.getInt(getKey(R.string.pref_help_shown), 0) != 0); - e.putFloat(getKey(R.string.pref_anylongitude), old.getFloat(getKey(R.string.pref_anylongitude), 0)); - e.putFloat(getKey(R.string.pref_anylatitude), old.getFloat(getKey(R.string.pref_anylatitude), 0)); - e.putBoolean(getKey(R.string.pref_offlinemaps), 0 != old.getInt(getKey(R.string.pref_offlinemaps), 1)); - e.putBoolean(getKey(R.string.pref_offlinewpmaps), 0 != old.getInt(getKey(R.string.pref_offlinewpmaps), 0)); - e.putString(getKey(R.string.pref_webDeviceCode), old.getString(getKey(R.string.pref_webDeviceCode), null)); - e.putString(getKey(R.string.pref_webDeviceName), old.getString(getKey(R.string.pref_webDeviceName), null)); - e.putBoolean(getKey(R.string.pref_maplive), old.getInt(getKey(R.string.pref_maplive), 1) != 0); -// e.putInt(getKey(R.string.pref_mapsource), old.getInt(getKey(R.string.pref_mapsource), MAP_SOURCE_DEFAULT)); - e.putBoolean(getKey(R.string.pref_twitter), 0 != old.getInt(getKey(R.string.pref_twitter), 0)); - e.putBoolean(getKey(R.string.pref_showaddress), 0 != old.getInt(getKey(R.string.pref_showaddress), 1)); - e.putBoolean(getKey(R.string.pref_showcaptcha), old.getBoolean(getKey(R.string.pref_showcaptcha), false)); - e.putBoolean(getKey(R.string.pref_maptrail), old.getInt(getKey(R.string.pref_maptrail), 1) != 0); - e.putInt(getKey(R.string.pref_lastmapzoom), old.getInt(getKey(R.string.pref_lastmapzoom), 14)); - e.putBoolean(getKey(R.string.pref_livelist), 0 != old.getInt(getKey(R.string.pref_livelist), 1)); - e.putBoolean(getKey(R.string.pref_units), old.getInt(getKey(R.string.pref_units), unitsMetric) == unitsMetric); - e.putBoolean(getKey(R.string.pref_skin), old.getInt(getKey(R.string.pref_skin), 0) != 0); - e.putInt(getKey(R.string.pref_lastusedlist), old.getInt(getKey(R.string.pref_lastusedlist), StoredList.STANDARD_LIST_ID)); - e.putString(getKey(R.string.pref_cachetype), old.getString(getKey(R.string.pref_cachetype), CacheType.ALL.id)); - e.putString(getKey(R.string.pref_twitter_token_secret), old.getString(getKey(R.string.pref_twitter_token_secret), null)); - e.putString(getKey(R.string.pref_twitter_token_public), old.getString(getKey(R.string.pref_twitter_token_public), null)); - e.putInt(getKey(R.string.pref_version), old.getInt(getKey(R.string.pref_version), 0)); - e.putBoolean(getKey(R.string.pref_autoloaddesc), 0 != old.getInt(getKey(R.string.pref_autoloaddesc), 1)); - e.putBoolean(getKey(R.string.pref_ratingwanted), old.getBoolean(getKey(R.string.pref_ratingwanted), true)); - e.putBoolean(getKey(R.string.pref_friendlogswanted), old.getBoolean(getKey(R.string.pref_friendlogswanted), true)); - e.putBoolean(getKey(R.string.pref_useenglish), old.getBoolean(getKey(R.string.pref_useenglish), false)); - e.putBoolean(getKey(R.string.pref_usecompass), 0 != old.getInt(getKey(R.string.pref_usecompass), 1)); - e.putBoolean(getKey(R.string.pref_trackautovisit), old.getBoolean(getKey(R.string.pref_trackautovisit), false)); - e.putBoolean(getKey(R.string.pref_sigautoinsert), old.getBoolean(getKey(R.string.pref_sigautoinsert), false)); - e.putBoolean(getKey(R.string.pref_logimages), old.getBoolean(getKey(R.string.pref_logimages), false)); - e.putBoolean(getKey(R.string.pref_excludedisabled), 0 != old.getInt(getKey(R.string.pref_excludedisabled), 0)); - e.putBoolean(getKey(R.string.pref_excludemine), 0 != old.getInt(getKey(R.string.pref_excludemine), 0)); - e.putString(getKey(R.string.pref_mapfile), old.getString(getKey(R.string.pref_mapfile), null)); - e.putString(getKey(R.string.pref_signature), old.getString(getKey(R.string.pref_signature), null)); - e.putString(getKey(R.string.pref_pass_vote), old.getString(getKey(R.string.pref_pass_vote), null)); - e.putString(getKey(R.string.pref_password), old.getString(getKey(R.string.pref_password), null)); - e.putString(getKey(R.string.pref_username), old.getString(getKey(R.string.pref_username), null)); - e.putString(getKey(R.string.pref_memberstatus), old.getString(getKey(R.string.pref_memberstatus), "")); - e.putInt(getKey(R.string.pref_coordinputformat), old.getInt(getKey(R.string.pref_coordinputformat), CoordInputFormatEnum.DEFAULT_INT_VALUE)); - e.putBoolean(getKey(R.string.pref_log_offline), old.getBoolean(getKey(R.string.pref_log_offline), false)); - e.putBoolean(getKey(R.string.pref_choose_list), old.getBoolean(getKey(R.string.pref_choose_list), true)); - e.putBoolean(getKey(R.string.pref_loaddirectionimg), old.getBoolean(getKey(R.string.pref_loaddirectionimg), true)); - e.putString(getKey(R.string.pref_gccustomdate), old.getString(getKey(R.string.pref_gccustomdate), null)); - e.putInt(getKey(R.string.pref_showwaypointsthreshold), old.getInt(getKey(R.string.pref_showwaypointsthreshold), SHOW_WP_THRESHOLD_DEFAULT)); - e.putString(getKey(R.string.pref_cookiestore), old.getString(getKey(R.string.pref_cookiestore), null)); - e.putBoolean(getKey(R.string.pref_opendetailslastpage), old.getBoolean(getKey(R.string.pref_opendetailslastpage), false)); - e.putInt(getKey(R.string.pref_lastdetailspage), old.getInt(getKey(R.string.pref_lastdetailspage), 1)); - e.putInt(getKey(R.string.pref_defaultNavigationTool), old.getInt(getKey(R.string.pref_defaultNavigationTool), NavigationAppsEnum.COMPASS.id)); - e.putInt(getKey(R.string.pref_defaultNavigationTool2), old.getInt(getKey(R.string.pref_defaultNavigationTool2), NavigationAppsEnum.INTERNAL_MAP.id)); - e.putInt(getKey(R.string.pref_livemapstrategy), old.getInt(getKey(R.string.pref_livemapstrategy), Strategy.AUTO.id)); - e.putBoolean(getKey(R.string.pref_debug), old.getBoolean(getKey(R.string.pref_debug), false)); - e.putBoolean(getKey(R.string.pref_hidelivemaphint), old.getInt(getKey(R.string.pref_hidelivemaphint), 0) != 0); - e.putInt(getKey(R.string.pref_livemaphintshowcount), old.getInt(getKey(R.string.pref_livemaphintshowcount), 0)); -======= e.putString(getKey(R.string.pref_temp_twitter_token_secret), prefsV0.getString(getKey(R.string.pref_temp_twitter_token_secret), null)); e.putString(getKey(R.string.pref_temp_twitter_token_public), prefsV0.getString(getKey(R.string.pref_temp_twitter_token_public), null)); e.putBoolean(getKey(R.string.pref_help_shown), prefsV0.getInt(getKey(R.string.pref_help_shown), 0) != 0); @@ -247,7 +190,6 @@ public class Settings { e.putInt(getKey(R.string.pref_livemapstrategy), prefsV0.getInt(getKey(R.string.pref_livemapstrategy), LivemapStrategy.AUTO.id)); e.putBoolean(getKey(R.string.pref_debug), prefsV0.getBoolean(getKey(R.string.pref_debug), false)); e.putInt(getKey(R.string.pref_livemaphintshowcount), prefsV0.getInt(getKey(R.string.pref_livemaphintshowcount), 0)); ->>>>>>> 59b8b2e26a7fff6072c4d5d96f51035dc900e0bc e.putInt(getKey(R.string.pref_settingsversion), 1); // mark migrated e.apply(); @@ -269,9 +211,9 @@ public class Settings { e.putInt(getKey(R.string.pref_showwaypointsthreshold), wpThreshold); // KEY_MAP_SOURCE must be string, because it is the key for a ListPreference now -// final int ms = sharedPrefs.getInt(getKey(R.string.pref_mapsource), MAP_SOURCE_DEFAULT); + final int ms = sharedPrefs.getInt(getKey(R.string.pref_mapsource), MAP_SOURCE_DEFAULT); e.remove(getKey(R.string.pref_mapsource)); -// e.putString(getKey(R.string.pref_mapsource), String.valueOf(ms)); + e.putString(getKey(R.string.pref_mapsource), String.valueOf(ms)); // navigation tool ids must be string, because ListPreference uses strings as keys final int dnt1 = sharedPrefs.getInt(getKey(R.string.pref_defaultNavigationTool), NavigationAppsEnum.COMPASS.id); @@ -749,8 +691,8 @@ public class Settings { if (mapSource != null) { return mapSource; } -// final int id = getConvertedMapId(); -// mapSource = MapProviderFactory.getMapSource(id); + final int id = getConvertedMapId(); + mapSource = MapProviderFactory.getMapSource(id); if (mapSource != null) { // don't use offline maps if the map file is not valid if (!(mapSource instanceof OfflineMapSource) || isValidMapFile()) { @@ -774,30 +716,30 @@ public class Settings { /** * Convert old preference ids for maps (based on constant values) into new hash based ids. */ -// private static int getConvertedMapId() { -// final int id = Integer.parseInt(getString(R.string.pref_mapsource, -// String.valueOf(MAP_SOURCE_DEFAULT))); -// switch (id) { -// case GOOGLEMAP_BASEID + MAP: -// return GoogleMapProvider.GOOGLE_MAP_ID.hashCode(); -// case GOOGLEMAP_BASEID + SATELLITE: -// return GoogleMapProvider.GOOGLE_SATELLITE_ID.hashCode(); -// case MFMAP_BASEID + MAPNIK: -// return MapsforgeMapProvider.MAPSFORGE_MAPNIK_ID.hashCode(); -// case MFMAP_BASEID + CYCLEMAP: -// return MapsforgeMapProvider.MAPSFORGE_CYCLEMAP_ID.hashCode(); -// case MFMAP_BASEID + OFFLINE: { -// final String mapFile = Settings.getMapFile(); -// if (StringUtils.isNotEmpty(mapFile)) { -// return mapFile.hashCode(); -// } -// break; -// } -// default: -// break; -// } -// return id; -// } + private static int getConvertedMapId() { + final int id = Integer.parseInt(getString(R.string.pref_mapsource, + String.valueOf(MAP_SOURCE_DEFAULT))); + switch (id) { + case GOOGLEMAP_BASEID + MAP: + return GoogleMapProvider.GOOGLE_MAP_ID.hashCode(); + case GOOGLEMAP_BASEID + SATELLITE: + return GoogleMapProvider.GOOGLE_SATELLITE_ID.hashCode(); + case MFMAP_BASEID + MAPNIK: + return MapsforgeMapProvider.MAPSFORGE_MAPNIK_ID.hashCode(); + case MFMAP_BASEID + CYCLEMAP: + return MapsforgeMapProvider.MAPSFORGE_CYCLEMAP_ID.hashCode(); + case MFMAP_BASEID + OFFLINE: { + final String mapFile = Settings.getMapFile(); + if (StringUtils.isNotEmpty(mapFile)) { + return mapFile.hashCode(); + } + break; + } + default: + break; + } + return id; + } public static synchronized void setMapSource(final MapSource newMapSource) { putString(R.string.pref_mapsource, String.valueOf(newMapSource.getNumericalId())); -- cgit v1.1