aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBananeweizen <Bananeweizen@gmx.de>2013-06-13 09:54:43 -0700
committerBananeweizen <Bananeweizen@gmx.de>2013-06-13 09:54:43 -0700
commitb51add0731ca57a07596358a23191fc7dda602f9 (patch)
treee81376b3eae626dfca2ca3daf41e7c087a935139
parentfe44f6b4610da1ded17258d2383786c293bc57e6 (diff)
parent238952b58afbd2411ed91f09b58c4f934c1866ba (diff)
downloadcgeo-b51add0731ca57a07596358a23191fc7dda602f9.zip
cgeo-b51add0731ca57a07596358a23191fc7dda602f9.tar.gz
cgeo-b51add0731ca57a07596358a23191fc7dda602f9.tar.bz2
Merge pull request #2868 from rsudev/issue2811
Implements #2811, Login status after enabled cache sources
-rw-r--r--main/res/layout/main_activity.xml11
-rw-r--r--main/src/cgeo/geocaching/MainActivity.java78
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java19
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OkapiClient.java65
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OkapiService.java3
5 files changed, 152 insertions, 24 deletions
diff --git a/main/res/layout/main_activity.xml b/main/res/layout/main_activity.xml
index 40e3d6a..11827a4 100644
--- a/main/res/layout/main_activity.xml
+++ b/main/res/layout/main_activity.xml
@@ -176,9 +176,16 @@
android:orientation="vertical" >
<TextView
- android:id="@+id/user_info"
+ android:id="@+id/user_info_gc"
style="@style/location_current"
- android:text="@string/init_login_popup_working" />
+ android:text="@string/init_login_popup_working"
+ android:visibility="gone" />
+
+ <TextView
+ android:id="@+id/user_info_ocde"
+ style="@style/location_current"
+ android:text="@string/init_login_popup_working"
+ android:visibility="gone" />
<TextView
android:id="@+id/nav_location"
diff --git a/main/src/cgeo/geocaching/MainActivity.java b/main/src/cgeo/geocaching/MainActivity.java
index 9c3e89f..ff24322 100644
--- a/main/src/cgeo/geocaching/MainActivity.java
+++ b/main/src/cgeo/geocaching/MainActivity.java
@@ -4,7 +4,10 @@ import butterknife.InjectView;
import butterknife.Views;
import cgeo.geocaching.activity.AbstractActivity;
+import cgeo.geocaching.connector.ConnectorFactory;
+import cgeo.geocaching.connector.IConnector;
import cgeo.geocaching.connector.gc.Login;
+import cgeo.geocaching.connector.oc.OCApiLiveConnector;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.geopoint.Geopoint;
@@ -50,7 +53,8 @@ import java.util.List;
import java.util.Locale;
public class MainActivity extends AbstractActivity {
- @InjectView(R.id.user_info) protected TextView userInfoView;
+ @InjectView(R.id.user_info_gc) protected TextView userInfoViewGc;
+ @InjectView(R.id.user_info_ocde) protected TextView userInfoViewOcDe;
@InjectView(R.id.nav_satellites) protected TextView navSatellites;
@InjectView(R.id.filter_button_title)protected TextView filterTitle;
@InjectView(R.id.map) protected ImageView findOnMap;
@@ -82,8 +86,8 @@ public class MainActivity extends AbstractActivity {
@Override
public void handleMessage(Message msg) {
- StringBuilder userInfo = new StringBuilder("geocaching.com").append(Formatter.SEPARATOR);
if (Settings.isGCConnectorActive()) {
+ StringBuilder userInfo = new StringBuilder("geocaching.com").append(Formatter.SEPARATOR);
if (Login.isActualLoginStatus()) {
userInfo.append(Login.getActualUserName());
if (Login.getActualCachesFound() >= 0) {
@@ -92,12 +96,36 @@ public class MainActivity extends AbstractActivity {
userInfo.append(Formatter.SEPARATOR);
}
userInfo.append(Login.getActualStatus());
+
+ userInfoViewGc.setText(userInfo.toString());
+ userInfoViewGc.setVisibility(View.VISIBLE);
+ }
+ else {
+ userInfoViewGc.setVisibility(View.GONE);
+ }
+
+ if (Settings.isOCConnectorActive()) {
+ StringBuilder userInfo = new StringBuilder("opencaching.de").append(Formatter.SEPARATOR);
+ IConnector conn = ConnectorFactory.getConnector("OCXXXX");
+ if (conn instanceof OCApiLiveConnector) {
+ OCApiLiveConnector ocapiConn = (OCApiLiveConnector) conn;
+ if (ocapiConn.supportsPersonalization()) {
+ userInfo.append(ocapiConn.getUserName());
+ int count = ocapiConn.getCachesFound();
+ if (count >= 0) {
+ userInfo.append(" (").append(String.valueOf(count)).append(')');
+ }
+ } else {
+ userInfo.append("Anonymous");
+ }
+ }
+ userInfoViewOcDe.setText(userInfo.toString());
+ userInfoViewOcDe.setVisibility(View.VISIBLE);
}
else {
- userInfo.append("<disabled>"); // TODO this is just a quick fix. We need some better status implementation showing multiple connectors.
+ userInfoViewOcDe.setVisibility(View.GONE);
}
- userInfoView.setText(userInfo.toString());
}
};
@@ -699,26 +727,34 @@ public class MainActivity extends AbstractActivity {
return;
}
- if (!Settings.isGCConnectorActive()) {
- return;
- }
-
- // login
- final StatusCode status = Login.login();
+ if (Settings.isGCConnectorActive()) {
+ // login
+ final StatusCode status = Login.login();
- if (status == StatusCode.NO_ERROR) {
- app.firstRun = false;
- Login.detectGcCustomDate();
- updateUserInfoHandler.sendEmptyMessage(-1);
- }
+ if (status == StatusCode.NO_ERROR) {
+ app.firstRun = false;
+ Login.detectGcCustomDate();
+ updateUserInfoHandler.sendEmptyMessage(-1);
+ }
- if (app.showLoginToast) {
- firstLoginHandler.sendMessage(firstLoginHandler.obtainMessage(0, status));
- app.showLoginToast = false;
+ if (app.showLoginToast) {
+ firstLoginHandler.sendMessage(firstLoginHandler.obtainMessage(0, status));
+ app.showLoginToast = false;
- // invoke settings activity to insert login details
- if (status == StatusCode.NO_LOGIN_INFO_STORED) {
- SettingsActivity.startActivity(MainActivity.this);
+ // invoke settings activity to insert login details
+ if (status == StatusCode.NO_LOGIN_INFO_STORED) {
+ SettingsActivity.startActivity(MainActivity.this);
+ }
+ }
+ }
+ if (Settings.isOCConnectorActive()) {
+ IConnector conn = ConnectorFactory.getConnector("OCXXXX");
+ if (conn instanceof OCApiLiveConnector) {
+ OCApiLiveConnector ocapiConn = (OCApiLiveConnector) conn;
+ if (ocapiConn.supportsPersonalization()) {
+ ocapiConn.retrieveUserInfo();
+ }
+ updateUserInfoHandler.sendEmptyMessage(-1);
}
}
}
diff --git a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
index 59d0f56..4c6db97 100644
--- a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
+++ b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
@@ -8,6 +8,7 @@ import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.connector.ILoggingManager;
import cgeo.geocaching.connector.capability.ISearchByCenter;
import cgeo.geocaching.connector.capability.ISearchByViewPort;
+import cgeo.geocaching.connector.oc.OkapiClient.UserInfo;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Viewport;
import cgeo.geocaching.utils.CryptUtils;
@@ -19,6 +20,7 @@ import android.app.Activity;
public class OCApiLiveConnector extends OCApiConnector implements ISearchByCenter, ISearchByViewPort {
private String cS;
+ private UserInfo userInfo = new UserInfo(StringUtils.EMPTY, 0, false);
public OCApiLiveConnector(String name, String host, String prefix, int cKResId, int cSResId, ApiSupport apiSupport) {
super(name, host, prefix, CryptUtils.rot13(cgeoapplication.getInstance().getResources().getString(cKResId)), apiSupport);
@@ -97,4 +99,21 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente
public boolean canLog(Geocache cache) {
return true;
}
+
+ public boolean supportsPersonalization() {
+ return getSupportedAuthLevel() == OAuthLevel.Level3;
+ }
+
+ public boolean retrieveUserInfo() {
+ userInfo = OkapiClient.getUserInfo(this);
+ return userInfo.isRetrieveSuccessful();
+ }
+
+ public Object getUserName() {
+ return userInfo.getName();
+ }
+
+ public int getCachesFound() {
+ return userInfo.getFinds();
+ }
}
diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
index 39f9ddf..9920e6f 100644
--- a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
+++ b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
@@ -100,6 +100,8 @@ final public class OkapiClient {
private static final String LOG_USER = "user";
private static final String USER_USERNAME = "username";
+ private static final String USER_CACHES_FOUND = "caches_found";
+ private static final String USER_INFO_FIELDS = "username|caches_found";
// the several realms of possible fields for cache retrieval:
// Core: for livemap requests (L3 - only with level 3 auth)
@@ -678,4 +680,67 @@ final public class OkapiClient {
}
}
+ public static UserInfo getUserInfo(OCApiLiveConnector connector) {
+ final Parameters params = new Parameters("fields", USER_INFO_FIELDS);
+
+ final JSONObject data = request(connector, OkapiService.SERVICE_USER, params);
+
+ if (data == null) {
+ return new UserInfo(StringUtils.EMPTY, 0, false);
+ }
+
+ String name = StringUtils.EMPTY;
+ int finds = 0;
+ boolean success = true;
+
+ if (!data.isNull(USER_USERNAME)) {
+ try {
+ name = data.getString(USER_USERNAME);
+ } catch (JSONException e) {
+ Log.e("OkapiClient.getUserInfo - name", e);
+ success = false;
+ }
+ } else {
+ success = false;
+ }
+
+ if (!data.isNull(USER_CACHES_FOUND)) {
+ try {
+ finds = data.getInt(USER_CACHES_FOUND);
+ } catch (JSONException e) {
+ Log.e("OkapiClient.getUserInfo - finds", e);
+ success = false;
+ }
+ } else {
+ success = false;
+ }
+
+ return new UserInfo(name, finds, success);
+ }
+
+ public static class UserInfo {
+
+ private final String name;
+ private final int finds;
+ private final boolean retrieveSuccessful;
+
+ UserInfo(String name, int finds, boolean retrieveSuccessful) {
+ this.name = name;
+ this.finds = finds;
+ this.retrieveSuccessful = retrieveSuccessful;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public int getFinds() {
+ return finds;
+ }
+
+ public boolean isRetrieveSuccessful() {
+ return retrieveSuccessful;
+ }
+ }
+
}
diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiService.java b/main/src/cgeo/geocaching/connector/oc/OkapiService.java
index 9b47596..ec09527 100644
--- a/main/src/cgeo/geocaching/connector/oc/OkapiService.java
+++ b/main/src/cgeo/geocaching/connector/oc/OkapiService.java
@@ -7,7 +7,8 @@ enum OkapiService {
SERVICE_CACHE("/okapi/services/caches/geocache", OAuthLevel.Level1),
SERVICE_SEARCH_AND_RETRIEVE("/okapi/services/caches/shortcuts/search_and_retrieve", OAuthLevel.Level1),
SERVICE_MARK_CACHE("/okapi/services/caches/mark", OAuthLevel.Level3),
- SERVICE_SUBMIT_LOG("/okapi/services/logs/submit", OAuthLevel.Level3);
+ SERVICE_SUBMIT_LOG("/okapi/services/logs/submit", OAuthLevel.Level3),
+ SERVICE_USER("/okapi/services/users/user", OAuthLevel.Level1);
final String methodName;
final OAuthLevel level;