diff options
| author | Bananeweizen <Bananeweizen@gmx.de> | 2013-06-26 23:09:41 -0700 |
|---|---|---|
| committer | Bananeweizen <Bananeweizen@gmx.de> | 2013-06-26 23:09:41 -0700 |
| commit | b01b3c3514f1249b393907926784cd078f200d84 (patch) | |
| tree | 3d8b34077bc24add1126155e1c7d9c3b1131637e | |
| parent | 296d80ac6564a277dc382432fb1a90cff227b20a (diff) | |
| parent | ed1071c654b7ecac5466c91a405cb328bf075275 (diff) | |
| download | cgeo-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.xml | 66 | ||||
| -rw-r--r-- | main/res/layout/main_activity_connectorstatus.xml | 4 | ||||
| -rw-r--r-- | main/res/values/strings.xml | 1 | ||||
| -rw-r--r-- | main/res/values/styles.xml | 15 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/MainActivity.java | 97 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/ConnectorFactory.java | 13 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/capability/ILogin.java | 57 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/gc/GCConnector.java | 51 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java | 34 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/oc/OkapiClient.java | 30 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/oc/UserInfo.java | 41 |
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; + } +} |
