aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBananeweizen <Bananeweizen@gmx.de>2013-06-26 23:09:41 -0700
committerBananeweizen <Bananeweizen@gmx.de>2013-06-26 23:09:41 -0700
commitb01b3c3514f1249b393907926784cd078f200d84 (patch)
tree3d8b34077bc24add1126155e1c7d9c3b1131637e
parent296d80ac6564a277dc382432fb1a90cff227b20a (diff)
parented1071c654b7ecac5466c91a405cb328bf075275 (diff)
downloadcgeo-b01b3c3514f1249b393907926784cd078f200d84.zip
cgeo-b01b3c3514f1249b393907926784cd078f200d84.tar.gz
cgeo-b01b3c3514f1249b393907926784cd078f200d84.tar.bz2
Merge pull request #2919 from rsudev/2811a
main activity layout refactoring and dynamic connection status
-rw-r--r--main/res/layout/main_activity.xml66
-rw-r--r--main/res/layout/main_activity_connectorstatus.xml4
-rw-r--r--main/res/values/strings.xml1
-rw-r--r--main/res/values/styles.xml15
-rw-r--r--main/src/cgeo/geocaching/MainActivity.java97
-rw-r--r--main/src/cgeo/geocaching/connector/ConnectorFactory.java13
-rw-r--r--main/src/cgeo/geocaching/connector/capability/ILogin.java57
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCConnector.java51
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java34
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OkapiClient.java30
-rw-r--r--main/src/cgeo/geocaching/connector/oc/UserInfo.java41
11 files changed, 253 insertions, 156 deletions
diff --git a/main/res/layout/main_activity.xml b/main/res/layout/main_activity.xml
index 11827a4..581dab4 100644
--- a/main/res/layout/main_activity.xml
+++ b/main/res/layout/main_activity.xml
@@ -36,18 +36,11 @@
android:orientation="vertical" >
<LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:layout_margin="4dip"
- android:gravity="center_horizontal"
- android:orientation="horizontal" >
+ style="@style/icon_mainscreen_row" >
<LinearLayout
- android:layout_width="74dip"
- android:layout_height="wrap_content"
- android:layout_margin="4dip"
- android:onClick="cgeoFindOnMap"
- android:orientation="vertical" >
+ style="@style/icon_mainscreen_cell"
+ android:onClick="cgeoFindOnMap" >
<ImageView
android:id="@+id/map"
@@ -60,10 +53,7 @@
</LinearLayout>
<LinearLayout
- android:layout_width="74dip"
- android:layout_height="wrap_content"
- android:layout_margin="4dip"
- android:orientation="vertical" >
+ style="@style/icon_mainscreen_cell" >
<ImageView
android:id="@+id/nearest"
@@ -87,10 +77,7 @@
android:textIsSelectable="false" />
<LinearLayout
- android:layout_width="74dip"
- android:layout_height="wrap_content"
- android:layout_alignParentTop="true"
- android:orientation="vertical" >
+ style="@style/icon_mainscreen_cell_counter" >
<ImageView
android:id="@+id/search_offline"
@@ -105,18 +92,11 @@
</LinearLayout>
<LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_margin="4dip"
- android:gravity="center_horizontal"
- android:orientation="horizontal" >
+ style="@style/icon_mainscreen_row" >
<LinearLayout
- android:layout_width="74dip"
- android:layout_height="wrap_content"
- android:layout_margin="4dip"
- android:onClick="cgeoSearch"
- android:orientation="vertical" >
+ style="@style/icon_mainscreen_cell"
+ android:onClick="cgeoSearch" >
<ImageView
android:id="@+id/advanced_button"
@@ -129,11 +109,8 @@
</LinearLayout>
<LinearLayout
- android:layout_width="74dip"
- android:layout_height="wrap_content"
- android:layout_margin="4dip"
- android:onClick="cgeoPoint"
- android:orientation="vertical" >
+ style="@style/icon_mainscreen_cell"
+ android:onClick="cgeoPoint" >
<ImageView
android:id="@+id/any_button"
@@ -146,11 +123,8 @@
</LinearLayout>
<LinearLayout
- android:layout_width="74dip"
- android:layout_height="wrap_content"
- android:layout_margin="4dip"
- android:onClick="cgeoFilter"
- android:orientation="vertical" >
+ style="@style/icon_mainscreen_cell"
+ android:onClick="cgeoFilter" >
<ImageView
android:id="@+id/filter_button"
@@ -175,17 +149,11 @@
android:onClick="cgeoNavSettings"
android:orientation="vertical" >
- <TextView
- android:id="@+id/user_info_gc"
- style="@style/location_current"
- 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" />
+ <LinearLayout
+ android:id="@+id/info_area"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical" />
<TextView
android:id="@+id/nav_location"
diff --git a/main/res/layout/main_activity_connectorstatus.xml b/main/res/layout/main_activity_connectorstatus.xml
new file mode 100644
index 0000000..33c4d79
--- /dev/null
+++ b/main/res/layout/main_activity_connectorstatus.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ style="@style/location_current"
+ android:text="@string/init_login_popup_working" />
diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml
index 19dbc60..319cbc7 100644
--- a/main/res/values/strings.xml
+++ b/main/res/values/strings.xml
@@ -378,6 +378,7 @@
<string name="init_login_popup_ok">Login OK</string>
<string name="init_login_popup_failed">Login failed</string>
<string name="init_login_popup_failed_reason">Login failed:</string>
+ <string name="init_login_popup_not_authorized">Not authorized</string>
<string name="init_twitter_authorize">Authorize c:geo</string>
<string name="init_twitter_publish">Publish status when a cache has been found</string>
<string name="init_signature">Signature</string>
diff --git a/main/res/values/styles.xml b/main/res/values/styles.xml
index da60d0c..fed8e1e 100644
--- a/main/res/values/styles.xml
+++ b/main/res/values/styles.xml
@@ -193,6 +193,21 @@
<item name="android:background">@drawable/count_bcg</item>
<item name="android:text"></item>
</style>
+ <style name="icon_mainscreen_cell_counter">
+ <item name="android:layout_width">74dip</item>
+ <item name="android:layout_height">wrap_content</item>
+ <item name="android:orientation">vertical</item>
+ </style>
+ <style name="icon_mainscreen_cell" parent="icon_mainscreen_cell_counter">
+ <item name="android:layout_margin">4dip</item>
+ </style>
+ <style name="icon_mainscreen_row">
+ <item name="android:layout_width">wrap_content</item>
+ <item name="android:layout_height">fill_parent</item>
+ <item name="android:layout_margin">4dip</item>
+ <item name="android:gravity">center_horizontal</item>
+ <item name="android:orientation">horizontal</item>
+ </style>
<!-- current location -->
<style name="location_current">
diff --git a/main/src/cgeo/geocaching/MainActivity.java b/main/src/cgeo/geocaching/MainActivity.java
index 03a1d0d..5898cba 100644
--- a/main/src/cgeo/geocaching/MainActivity.java
+++ b/main/src/cgeo/geocaching/MainActivity.java
@@ -5,9 +5,7 @@ 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.connector.capability.ILogin;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.geopoint.Geopoint;
@@ -38,11 +36,13 @@ import android.location.Geocoder;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
+import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
+import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.ArrayList;
@@ -53,8 +53,6 @@ import java.util.List;
import java.util.Locale;
public class MainActivity extends AbstractActivity {
- @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;
@@ -67,6 +65,7 @@ public class MainActivity extends AbstractActivity {
@InjectView(R.id.nav_accuracy) protected TextView navAccuracy ;
@InjectView(R.id.nav_location) protected TextView navLocation ;
@InjectView(R.id.offline_count) protected TextView countBubble ;
+ @InjectView(R.id.info_area) protected LinearLayout infoArea;
private static final String SCAN_INTENT = "com.google.zxing.client.android.SCAN";
public static final int SEARCH_REQUEST_CODE = 2;
@@ -86,47 +85,30 @@ public class MainActivity extends AbstractActivity {
@Override
public void handleMessage(Message msg) {
- //TODO: Rework to be fully dynamic
- if (Settings.isGCConnectorActive()) {
- StringBuilder userInfo = new StringBuilder("geocaching.com").append(Formatter.SEPARATOR);
- if (Login.isActualLoginStatus()) {
- userInfo.append(Login.getActualUserName());
- if (Login.getActualCachesFound() >= 0) {
- userInfo.append(" (").append(String.valueOf(Login.getActualCachesFound())).append(')');
- }
- userInfo.append(Formatter.SEPARATOR);
- }
- userInfo.append(Login.getActualStatus());
+ // Get active connectors with login status
+ ILogin[] loginConns = ConnectorFactory.getActiveLiveConnectors();
- userInfoViewGc.setText(userInfo.toString());
- userInfoViewGc.setVisibility(View.VISIBLE);
- }
- else {
- userInfoViewGc.setVisibility(View.GONE);
- }
+ // Update UI
+ infoArea.removeAllViews();
+ LayoutInflater inflater = getLayoutInflater();
- 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");
+ for (ILogin conn : loginConns) {
+
+ TextView connectorInfo = (TextView) inflater.inflate(R.layout.main_activity_connectorstatus, null);
+ infoArea.addView(connectorInfo);
+
+ StringBuilder userInfo = new StringBuilder(conn.getName()).append(Formatter.SEPARATOR);
+ if (conn.isLoggedIn()) {
+ userInfo.append(conn.getUserName());
+ if (conn.getCachesFound() >= 0) {
+ userInfo.append(" (").append(String.valueOf(conn.getCachesFound())).append(')');
}
+ userInfo.append(Formatter.SEPARATOR);
}
- userInfoViewOcDe.setText(userInfo.toString());
- userInfoViewOcDe.setVisibility(View.VISIBLE);
- }
- else {
- userInfoViewOcDe.setVisibility(View.GONE);
- }
+ userInfo.append(conn.getLoginStatusString());
+ connectorInfo.setText(userInfo);
+ }
}
};
@@ -728,36 +710,11 @@ public class MainActivity extends AbstractActivity {
return;
}
- //TODO: Rework to be fully dynamic
- if (Settings.isGCConnectorActive()) {
- // login
- final StatusCode status = Login.login();
-
- 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;
+ ILogin[] conns = ConnectorFactory.getActiveLiveConnectors();
- // 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);
- }
+ for (ILogin conn : conns) {
+ conn.login(firstLoginHandler, MainActivity.this);
+ updateUserInfoHandler.sendEmptyMessage(-1);
}
}
}
diff --git a/main/src/cgeo/geocaching/connector/ConnectorFactory.java b/main/src/cgeo/geocaching/connector/ConnectorFactory.java
index a2b0192..c5a083c 100644
--- a/main/src/cgeo/geocaching/connector/ConnectorFactory.java
+++ b/main/src/cgeo/geocaching/connector/ConnectorFactory.java
@@ -4,6 +4,7 @@ import cgeo.geocaching.ICache;
import cgeo.geocaching.R;
import cgeo.geocaching.SearchResult;
import cgeo.geocaching.Trackable;
+import cgeo.geocaching.connector.capability.ILogin;
import cgeo.geocaching.connector.capability.ISearchByCenter;
import cgeo.geocaching.connector.capability.ISearchByViewPort;
import cgeo.geocaching.connector.gc.GCConnector;
@@ -27,7 +28,7 @@ public final class ConnectorFactory {
private static final UnknownConnector UNKNOWN_CONNECTOR = new UnknownConnector();
private static final IConnector[] CONNECTORS = new IConnector[] {
GCConnector.getInstance(),
- new OCApiLiveConnector("Opencaching.de", "www.opencaching.de", "OC", R.string.oc_de_okapi_consumer_key, R.string.oc_de_okapi_consumer_secret, ApiSupport.current),
+ new OCApiLiveConnector("opencaching.de", "www.opencaching.de", "OC", R.string.oc_de_okapi_consumer_key, R.string.oc_de_okapi_consumer_secret, ApiSupport.current),
new OCConnector("OpenCaching.CZ", "www.opencaching.cz", "OZ"),
new OCApiConnector("OpenCaching.CO.UK", "www.opencaching.org.uk", "OK", "arU4okouc4GEjMniE2fq", ApiSupport.oldapi),
new OCConnector("OpenCaching.ES", "www.opencachingspain.es", "OC"),
@@ -82,6 +83,16 @@ public final class ConnectorFactory {
return searchByCenterConns;
}
+ public static ILogin[] getActiveLiveConnectors() {
+ final List<ILogin> liveConns = new ArrayList<ILogin>();
+ for (final IConnector conn : CONNECTORS) {
+ if (conn instanceof ILogin && conn.isActivated()) {
+ liveConns.add((ILogin) conn);
+ }
+ }
+ return liveConns.toArray(new ILogin[liveConns.size()]);
+ }
+
public static boolean canHandle(final String geocode) {
if (isInvalidGeocode(geocode)) {
return false;
diff --git a/main/src/cgeo/geocaching/connector/capability/ILogin.java b/main/src/cgeo/geocaching/connector/capability/ILogin.java
new file mode 100644
index 0000000..4a839c8
--- /dev/null
+++ b/main/src/cgeo/geocaching/connector/capability/ILogin.java
@@ -0,0 +1,57 @@
+package cgeo.geocaching.connector.capability;
+
+import cgeo.geocaching.connector.IConnector;
+
+import android.content.Context;
+import android.os.Handler;
+
+public interface ILogin extends IConnector {
+
+
+ /**
+ * Contacts the server the connector belongs to
+ * and verifies/establishes authentication and
+ * retrieves information about the current user
+ * (Name, found caches) if applicable.
+ *
+ * @param handler
+ * Handler to receive status feedback
+ * @param fromActivity
+ * Calling activity context
+ * @return true in case of success, false in case of failure
+ */
+ boolean login(Handler handler, Context fromActivity);
+
+ /**
+ * Returns the status of the last {@link}login() request
+ *
+ * @return
+ */
+ boolean isLoggedIn();
+
+ /**
+ * User-centered string describing the current login/connection status
+ *
+ * @return
+ */
+ String getLoginStatusString();
+
+ /**
+ * Name the user has in this connector or empty string if not applicable
+ * It might be necessary to execute login before this information is valid.
+ *
+ * @return
+ */
+ String getUserName();
+
+ /**
+ * Number of caches the user has found in this connector
+ * Normally retrieved/updated with (@see login).
+ * Might be out dated as changes on the connectors site
+ * are generally not notified.
+ *
+ * @return
+ */
+ int getCachesFound();
+
+}
diff --git a/main/src/cgeo/geocaching/connector/gc/GCConnector.java b/main/src/cgeo/geocaching/connector/gc/GCConnector.java
index fab4332..9e516e9 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCConnector.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCConnector.java
@@ -5,9 +5,12 @@ import cgeo.geocaching.ICache;
import cgeo.geocaching.R;
import cgeo.geocaching.SearchResult;
import cgeo.geocaching.Settings;
+import cgeo.geocaching.SettingsActivity;
import cgeo.geocaching.cgData;
+import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.connector.AbstractConnector;
import cgeo.geocaching.connector.ILoggingManager;
+import cgeo.geocaching.connector.capability.ILogin;
import cgeo.geocaching.connector.capability.ISearchByCenter;
import cgeo.geocaching.connector.capability.ISearchByGeocode;
import cgeo.geocaching.connector.capability.ISearchByViewPort;
@@ -21,10 +24,12 @@ import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import android.app.Activity;
+import android.content.Context;
+import android.os.Handler;
import java.util.regex.Pattern;
-public class GCConnector extends AbstractConnector implements ISearchByGeocode, ISearchByCenter, ISearchByViewPort {
+public class GCConnector extends AbstractConnector implements ISearchByGeocode, ISearchByCenter, ISearchByViewPort, ILogin {
private static final String CACHE_URL_SHORT = "http://coord.info/";
// Double slash is used to force open in browser
@@ -105,7 +110,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode,
@Override
public String getName() {
- return "GeoCaching.com";
+ return "geocaching.com";
}
@Override
@@ -282,4 +287,46 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode,
}
return R.drawable.marker;
}
+
+ @Override
+ public boolean login(Handler handler, Context fromActivity) {
+ // login
+ final StatusCode status = Login.login();
+
+ if (status == StatusCode.NO_ERROR) {
+ cgeoapplication.getInstance().firstRun = false;
+ Login.detectGcCustomDate();
+ }
+
+ if (cgeoapplication.getInstance().showLoginToast && handler != null) {
+ handler.sendMessage(handler.obtainMessage(0, status));
+ cgeoapplication.getInstance().showLoginToast = false;
+
+ // invoke settings activity to insert login details
+ if (status == StatusCode.NO_LOGIN_INFO_STORED && fromActivity != null) {
+ SettingsActivity.startActivity(fromActivity);
+ }
+ }
+ return status == StatusCode.NO_ERROR;
+ }
+
+ @Override
+ public String getUserName() {
+ return Login.getActualUserName();
+ }
+
+ @Override
+ public int getCachesFound() {
+ return Login.getActualCachesFound();
+ }
+
+ @Override
+ public String getLoginStatusString() {
+ return Login.getActualStatus();
+ }
+
+ @Override
+ public boolean isLoggedIn() {
+ return Login.isActualLoginStatus();
+ }
}
diff --git a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
index 4c6db97..5f30934 100644
--- a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
+++ b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
@@ -6,9 +6,10 @@ import cgeo.geocaching.Settings;
import cgeo.geocaching.cgData;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.connector.ILoggingManager;
+import cgeo.geocaching.connector.capability.ILogin;
import cgeo.geocaching.connector.capability.ISearchByCenter;
import cgeo.geocaching.connector.capability.ISearchByViewPort;
-import cgeo.geocaching.connector.oc.OkapiClient.UserInfo;
+import cgeo.geocaching.connector.oc.UserInfo.UserInfoStatus;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Viewport;
import cgeo.geocaching.utils.CryptUtils;
@@ -16,11 +17,13 @@ import cgeo.geocaching.utils.CryptUtils;
import org.apache.commons.lang3.StringUtils;
import android.app.Activity;
+import android.content.Context;
+import android.os.Handler;
-public class OCApiLiveConnector extends OCApiConnector implements ISearchByCenter, ISearchByViewPort {
+public class OCApiLiveConnector extends OCApiConnector implements ISearchByCenter, ISearchByViewPort, ILogin {
private String cS;
- private UserInfo userInfo = new UserInfo(StringUtils.EMPTY, 0, false);
+ private UserInfo userInfo = new UserInfo(StringUtils.EMPTY, 0, UserInfoStatus.NOT_RETRIEVED);
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);
@@ -104,16 +107,33 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente
return getSupportedAuthLevel() == OAuthLevel.Level3;
}
- public boolean retrieveUserInfo() {
- userInfo = OkapiClient.getUserInfo(this);
- return userInfo.isRetrieveSuccessful();
+ @Override
+ public boolean login(Handler handler, Context fromActivity) {
+ if (supportsPersonalization()) {
+ userInfo = OkapiClient.getUserInfo(this);
+ } else {
+ userInfo = new UserInfo(StringUtils.EMPTY, 0, UserInfoStatus.NOT_SUPPORTED);
+ }
+ return userInfo.getStatus() == UserInfoStatus.SUCCESSFUL;
}
- public Object getUserName() {
+ @Override
+ public String getUserName() {
return userInfo.getName();
}
+ @Override
public int getCachesFound() {
return userInfo.getFinds();
}
+
+ @Override
+ public String getLoginStatusString() {
+ return cgeoapplication.getInstance().getString(userInfo.getStatus().resId);
+ }
+
+ @Override
+ public boolean isLoggedIn() {
+ return userInfo.getStatus() == UserInfoStatus.SUCCESSFUL;
+ }
}
diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
index f818a7c..e2cc7cd 100644
--- a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
+++ b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
@@ -14,6 +14,7 @@ import cgeo.geocaching.connector.LogResult;
import cgeo.geocaching.connector.gc.GCConnector;
import cgeo.geocaching.connector.oc.OCApiConnector.ApiSupport;
import cgeo.geocaching.connector.oc.OCApiConnector.OAuthLevel;
+import cgeo.geocaching.connector.oc.UserInfo.UserInfoStatus;
import cgeo.geocaching.enumerations.CacheAttribute;
import cgeo.geocaching.enumerations.CacheSize;
import cgeo.geocaching.enumerations.CacheType;
@@ -664,7 +665,7 @@ final public class OkapiClient {
final JSONObject data = request(connector, OkapiService.SERVICE_USER, params);
if (data == null) {
- return new UserInfo(StringUtils.EMPTY, 0, false);
+ return new UserInfo(StringUtils.EMPTY, 0, UserInfoStatus.FAILED);
}
String name = StringUtils.EMPTY;
@@ -693,32 +694,7 @@ final public class OkapiClient {
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;
- }
+ return new UserInfo(name, finds, success ? UserInfoStatus.SUCCESSFUL : UserInfoStatus.FAILED);
}
}
diff --git a/main/src/cgeo/geocaching/connector/oc/UserInfo.java b/main/src/cgeo/geocaching/connector/oc/UserInfo.java
new file mode 100644
index 0000000..0dc0440
--- /dev/null
+++ b/main/src/cgeo/geocaching/connector/oc/UserInfo.java
@@ -0,0 +1,41 @@
+package cgeo.geocaching.connector.oc;
+
+import cgeo.geocaching.R;
+
+public class UserInfo {
+
+ public enum UserInfoStatus {
+ NOT_RETRIEVED(R.string.init_login_popup_working),
+ SUCCESSFUL(R.string.init_login_popup_ok),
+ FAILED(R.string.init_login_popup_failed),
+ NOT_SUPPORTED(R.string.init_login_popup_not_authorized);
+
+ public final int resId;
+
+ UserInfoStatus(int resId) {
+ this.resId = resId;
+ }
+ }
+
+ private final String name;
+ private final int finds;
+ private final UserInfoStatus status;
+
+ UserInfo(String name, int finds, UserInfoStatus status) {
+ this.name = name;
+ this.finds = finds;
+ this.status = status;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public int getFinds() {
+ return finds;
+ }
+
+ public UserInfoStatus getStatus() {
+ return status;
+ }
+}