aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/MainActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/MainActivity.java')
-rw-r--r--main/src/cgeo/geocaching/MainActivity.java73
1 files changed, 31 insertions, 42 deletions
diff --git a/main/src/cgeo/geocaching/MainActivity.java b/main/src/cgeo/geocaching/MainActivity.java
index c0c6712..40504fb 100644
--- a/main/src/cgeo/geocaching/MainActivity.java
+++ b/main/src/cgeo/geocaching/MainActivity.java
@@ -7,8 +7,6 @@ import cgeo.geocaching.activity.AbstractActionBarActivity;
import cgeo.geocaching.activity.ShowcaseViewBuilder;
import cgeo.geocaching.connector.ConnectorFactory;
import cgeo.geocaching.connector.capability.ILogin;
-import cgeo.geocaching.connector.gc.GCConnector;
-import cgeo.geocaching.connector.gc.GCLogin;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.geopoint.Geopoint;
@@ -17,6 +15,8 @@ import cgeo.geocaching.list.PseudoList;
import cgeo.geocaching.list.StoredList;
import cgeo.geocaching.maps.CGeoMap;
import cgeo.geocaching.sensors.GeoDirHandler;
+import cgeo.geocaching.sensors.GpsStatusProvider;
+import cgeo.geocaching.sensors.GpsStatusProvider.Status;
import cgeo.geocaching.sensors.IGeoData;
import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.settings.SettingsActivity;
@@ -38,8 +38,8 @@ import rx.Observable;
import rx.Observable.OnSubscribe;
import rx.Subscriber;
import rx.android.observables.AndroidObservable;
+import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
-import rx.subscriptions.Subscriptions;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
@@ -147,37 +147,16 @@ public class MainActivity extends AbstractActionBarActivity {
return StringUtils.join(addressParts, ", ");
}
- private class SatellitesHandler extends GeoDirHandler {
-
- private boolean gpsEnabled = false;
- private int satellitesFixed = 0;
- private int satellitesVisible = 0;
-
+ private final Action1<GpsStatusProvider.Status> satellitesHandler = new Action1<Status>() {
@Override
- public void updateGeoData(final IGeoData data) {
- if (data.getGpsEnabled() == gpsEnabled &&
- data.getSatellitesFixed() == satellitesFixed &&
- data.getSatellitesVisible() == satellitesVisible) {
- return;
- }
- gpsEnabled = data.getGpsEnabled();
- satellitesFixed = data.getSatellitesFixed();
- satellitesVisible = data.getSatellitesVisible();
-
- if (gpsEnabled) {
- if (satellitesFixed > 0) {
- navSatellites.setText(res.getString(R.string.loc_sat) + ": " + satellitesFixed + '/' + satellitesVisible);
- } else if (satellitesVisible >= 0) {
- navSatellites.setText(res.getString(R.string.loc_sat) + ": 0/" + satellitesVisible);
- }
+ public void call(final Status gpsStatus) {
+ if (gpsStatus.gpsEnabled) {
+ navSatellites.setText(res.getString(R.string.loc_sat) + ": " + gpsStatus.satellitesFixed + '/' + gpsStatus.satellitesVisible);
} else {
navSatellites.setText(res.getString(R.string.loc_gps_disabled));
}
}
-
- }
-
- private final SatellitesHandler satellitesHandler = new SatellitesHandler();
+ };
private final Handler firstLoginHandler = new Handler() {
@@ -231,8 +210,12 @@ public class MainActivity extends AbstractActionBarActivity {
@Override
public void onResume() {
- super.onResume(Subscriptions.from(locationUpdater.start(GeoDirHandler.UPDATE_GEODATA), satellitesHandler.start(GeoDirHandler.UPDATE_GEODATA)));
+ super.onResume(locationUpdater.start(GeoDirHandler.UPDATE_GEODATA | GeoDirHandler.LOW_POWER),
+ app.gpsStatusObservable().observeOn(AndroidSchedulers.mainThread()).subscribe(satellitesHandler));
updateUserInfoHandler.sendEmptyMessage(-1);
+ if (app.hasValidLocation()) {
+ locationUpdater.updateGeoData(app.currentGeo());
+ }
startBackgroundLogin();
init();
}
@@ -247,9 +230,9 @@ public class MainActivity extends AbstractActionBarActivity {
new Thread() {
@Override
public void run() {
- if (mustLogin && conn == GCConnector.getInstance()) {
+ if (mustLogin) {
// Properly log out from geocaching.com
- GCLogin.getInstance().logout();
+ conn.logout();
}
conn.login(firstLoginHandler, MainActivity.this);
updateUserInfoHandler.sendEmptyMessage(-1);
@@ -315,7 +298,7 @@ public class MainActivity extends AbstractActionBarActivity {
startActivity(new Intent(this, SettingsActivity.class));
return true;
case R.id.menu_history:
- CacheListActivity.startActivityHistory(this);
+ startActivity(CacheListActivity.getHistoryIntent(this));
return true;
case R.id.menu_scan:
startScannerApplication();
@@ -578,7 +561,7 @@ public class MainActivity extends AbstractActionBarActivity {
}
}
});
- AndroidObservable.bindActivity(MainActivity.this, address.onErrorResumeNext(Observable.from(geo.getCoords().toString())))
+ AndroidObservable.bindActivity(MainActivity.this, address.onErrorResumeNext(Observable.just(geo.getCoords().toString())))
.subscribeOn(RxUtils.networkScheduler)
.subscribe(new Action1<String>() {
@Override
@@ -599,7 +582,7 @@ public class MainActivity extends AbstractActionBarActivity {
*/
public void cgeoFindOnMap(final View v) {
findOnMap.setPressed(true);
- CGeoMap.startActivityLiveMap(this);
+ startActivity(CGeoMap.getLiveMapIntent(this));
}
/**
@@ -612,7 +595,7 @@ public class MainActivity extends AbstractActionBarActivity {
}
nearestView.setPressed(true);
- CacheListActivity.startActivityNearest(this, app.currentGeo().getCoords());
+ startActivity(CacheListActivity.getNearestIntent(this));
}
/**
@@ -733,12 +716,18 @@ public class MainActivity extends AbstractActionBarActivity {
}
private void checkShowChangelog() {
- final long lastChecksum = Settings.getLastChangelogChecksum();
- final long checksum = TextUtils.checksum(getString(R.string.changelog_master) + getString(R.string.changelog_release));
- Settings.setLastChangelogChecksum(checksum);
- // don't show change log after new install...
- if (lastChecksum > 0 && lastChecksum != checksum) {
- AboutActivity.showChangeLog(this);
+ // temporary workaround for #4143
+ //TODO: understand and avoid if possible
+ try {
+ final long lastChecksum = Settings.getLastChangelogChecksum();
+ final long checksum = TextUtils.checksum(getString(R.string.changelog_master) + getString(R.string.changelog_release));
+ Settings.setLastChangelogChecksum(checksum);
+ // don't show change log after new install...
+ if (lastChecksum > 0 && lastChecksum != checksum) {
+ AboutActivity.showChangeLog(this);
+ }
+ } catch (final Exception ex) {
+ Log.e("Error checking/showing changelog!", ex);
}
}