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.java225
1 files changed, 83 insertions, 142 deletions
diff --git a/main/src/cgeo/geocaching/MainActivity.java b/main/src/cgeo/geocaching/MainActivity.java
index 03a1d0d..24b4a58 100644
--- a/main/src/cgeo/geocaching/MainActivity.java
+++ b/main/src/cgeo/geocaching/MainActivity.java
@@ -5,17 +5,18 @@ 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;
import cgeo.geocaching.geopoint.Units;
import cgeo.geocaching.maps.CGeoMap;
+import cgeo.geocaching.settings.Settings;
+import cgeo.geocaching.settings.SettingsActivity;
import cgeo.geocaching.ui.Formatter;
import cgeo.geocaching.utils.GeoDirHandler;
import cgeo.geocaching.utils.Log;
+import cgeo.geocaching.utils.ProcessUtils;
import cgeo.geocaching.utils.RunnableWithArgument;
import cgeo.geocaching.utils.Version;
@@ -30,19 +31,19 @@ import android.app.AlertDialog.Builder;
import android.app.SearchManager;
import android.content.DialogInterface;
import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
import android.content.res.Configuration;
import android.location.Address;
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 +54,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;
@@ -63,10 +62,11 @@ public class MainActivity extends AbstractActivity {
@InjectView(R.id.any_button) protected ImageView any;
@InjectView(R.id.filter_button) protected ImageView filter;
@InjectView(R.id.nearest) protected ImageView nearestView;
- @InjectView(R.id.nav_type) protected TextView navType ;
- @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.nav_type) protected TextView navType;
+ @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;
@@ -79,84 +79,66 @@ public class MainActivity extends AbstractActivity {
private boolean addressObtaining = false;
private boolean initialized = false;
- final private UpdateLocation locationUpdater = new UpdateLocation();
+ private final UpdateLocation locationUpdater = new UpdateLocation();
private Handler updateUserInfoHandler = new Handler() {
@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());
+ public void handleMessage(final Message msg) {
- userInfoViewGc.setText(userInfo.toString());
- userInfoViewGc.setVisibility(View.VISIBLE);
- }
- else {
- userInfoViewGc.setVisibility(View.GONE);
- }
+ // Get active connectors with login status
+ ILogin[] loginConns = ConnectorFactory.getActiveLiveConnectors();
- 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");
+ // Update UI
+ infoArea.removeAllViews();
+ LayoutInflater inflater = getLayoutInflater();
+
+ 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);
+ }
}
};
private Handler obtainAddressHandler = new Handler() {
@Override
- public void handleMessage(Message msg) {
+ public void handleMessage(final Message msg) {
try {
if (CollectionUtils.isNotEmpty(addresses)) {
final Address address = addresses.get(0);
- final StringBuilder addText = new StringBuilder();
+ final ArrayList<String> addressParts = new ArrayList<String>();
- if (address.getCountryName() != null) {
- addText.append(address.getCountryName());
+ final String countryName = address.getCountryName();
+ if (countryName != null) {
+ addressParts.add(countryName);
}
- if (address.getLocality() != null) {
- if (addText.length() > 0) {
- addText.append(", ");
- }
- addText.append(address.getLocality());
- } else if (address.getAdminArea() != null) {
- if (addText.length() > 0) {
- addText.append(", ");
+ final String locality = address.getLocality();
+ if (locality != null) {
+ addressParts.add(locality);
+ } else {
+ final String adminArea = address.getAdminArea();
+ if (adminArea != null) {
+ addressParts.add(adminArea);
}
- addText.append(address.getAdminArea());
}
addCoords = app.currentGeo().getCoords();
- navLocation.setText(addText.toString());
+ navLocation.setText(StringUtils.join(addressParts, ", "));
}
} catch (Exception e) {
// nothing
@@ -201,7 +183,7 @@ public class MainActivity extends AbstractActivity {
private Handler firstLoginHandler = new Handler() {
@Override
- public void handleMessage(Message msg) {
+ public void handleMessage(final Message msg) {
try {
final StatusCode reason = (StatusCode) msg.obj;
@@ -215,7 +197,7 @@ public class MainActivity extends AbstractActivity {
};
@Override
- public void onCreate(Bundle savedInstanceState) {
+ public void onCreate(final Bundle savedInstanceState) {
// don't call the super implementation with the layout argument, as that would set the wrong theme
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
@@ -236,7 +218,7 @@ public class MainActivity extends AbstractActivity {
}
@Override
- public void onConfigurationChanged(Configuration newConfig) {
+ public void onConfigurationChanged(final Configuration newConfig) {
super.onConfigurationChanged(newConfig);
init();
@@ -274,31 +256,20 @@ public class MainActivity extends AbstractActivity {
}
@Override
- public boolean onCreateOptionsMenu(Menu menu) {
+ public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.main_activity_options, menu);
return true;
}
@Override
- public boolean onPrepareOptionsMenu(Menu menu) {
+ public boolean onPrepareOptionsMenu(final Menu menu) {
super.onPrepareOptionsMenu(menu);
- MenuItem item = menu.findItem(R.id.menu_scan);
- if (item != null) {
- item.setEnabled(isIntentAvailable(SCAN_INTENT));
- }
+ menu.findItem(R.id.menu_scan).setEnabled(ProcessUtils.isIntentAvailable(SCAN_INTENT));
return true;
}
- public static boolean isIntentAvailable(String intent) {
- final PackageManager packageManager = cgeoapplication.getInstance().getPackageManager();
- final List<ResolveInfo> list = packageManager.queryIntentActivities(
- new Intent(intent), PackageManager.MATCH_DEFAULT_ONLY);
-
- return CollectionUtils.isNotEmpty(list);
- }
-
@Override
- public boolean onOptionsItemSelected(MenuItem item) {
+ public boolean onOptionsItemSelected(final MenuItem item) {
final int id = item.getItemId();
switch (id) {
case R.id.menu_about:
@@ -328,7 +299,7 @@ public class MainActivity extends AbstractActivity {
}
@Override
- public void onActivityResult(int requestCode, int resultCode, Intent intent) {
+ public void onActivityResult(final int requestCode, final int resultCode, final Intent intent) {
IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
if (scanResult != null) {
String scan = scanResult.getContents();
@@ -364,7 +335,7 @@ public class MainActivity extends AbstractActivity {
initialized = true;
Settings.setLanguage(Settings.isUseEnglish());
- Settings.getLogin();
+ Settings.getGcLogin();
if (app.firstRun) {
(new FirstLoginThread()).start();
@@ -373,7 +344,7 @@ public class MainActivity extends AbstractActivity {
findOnMap.setClickable(true);
findOnMap.setOnClickListener(new OnClickListener() {
@Override
- public void onClick(View v) {
+ public void onClick(final View v) {
cgeoFindOnMap(v);
}
});
@@ -381,18 +352,18 @@ public class MainActivity extends AbstractActivity {
findByOffline.setClickable(true);
findByOffline.setOnClickListener(new OnClickListener() {
@Override
- public void onClick(View v) {
+ public void onClick(final View v) {
cgeoFindByOffline(v);
}
});
findByOffline.setOnLongClickListener(new View.OnLongClickListener() {
@Override
- public boolean onLongClick(View v) {
+ public boolean onLongClick(final View v) {
new StoredList.UserInterface(MainActivity.this).promptForListSelection(R.string.list_title, new RunnableWithArgument<Integer>() {
@Override
- public void run(Integer selectedListId) {
+ public void run(final Integer selectedListId) {
Settings.saveLastList(selectedListId);
cgeocaches.startActivityOffline(MainActivity.this);
}
@@ -405,7 +376,7 @@ public class MainActivity extends AbstractActivity {
advanced.setClickable(true);
advanced.setOnClickListener(new OnClickListener() {
@Override
- public void onClick(View v) {
+ public void onClick(final View v) {
cgeoSearch(v);
}
});
@@ -413,7 +384,7 @@ public class MainActivity extends AbstractActivity {
any.setClickable(true);
any.setOnClickListener(new OnClickListener() {
@Override
- public void onClick(View v) {
+ public void onClick(final View v) {
cgeoPoint(v);
}
});
@@ -421,14 +392,14 @@ public class MainActivity extends AbstractActivity {
filter.setClickable(true);
filter.setOnClickListener(new View.OnClickListener() {
@Override
- public void onClick(View v) {
+ public void onClick(final View v) {
selectGlobalTypeFilter();
}
});
filter.setOnLongClickListener(new View.OnLongClickListener() {
@Override
- public boolean onLongClick(View v) {
+ public boolean onLongClick(final View v) {
selectGlobalTypeFilter();
return true;
}
@@ -458,7 +429,7 @@ public class MainActivity extends AbstractActivity {
Collections.sort(sorted, new Comparator<CacheType>() {
@Override
- public int compare(CacheType left, CacheType right) {
+ public int compare(final CacheType left, final CacheType right) {
return left.getL10n().compareToIgnoreCase(right.getL10n());
}
});
@@ -480,7 +451,7 @@ public class MainActivity extends AbstractActivity {
builder.setSingleChoiceItems(items, checkedItem, new DialogInterface.OnClickListener() {
@Override
- public void onClick(DialogInterface dialog, int position) {
+ public void onClick(final DialogInterface dialog, final int position) {
CacheType cacheType = cacheTypes.get(position);
Settings.setCacheType(cacheType);
setFilterTitle();
@@ -505,7 +476,7 @@ public class MainActivity extends AbstractActivity {
.setCancelable(false)
.setPositiveButton(getString(android.R.string.yes), new DialogInterface.OnClickListener() {
@Override
- public void onClick(DialogInterface dialog, int id) {
+ public void onClick(final DialogInterface dialog, final int id) {
dialog.dismiss();
cgData.resetNewlyCreatedDatabase();
app.restoreDatabase(MainActivity.this);
@@ -513,7 +484,7 @@ public class MainActivity extends AbstractActivity {
})
.setNegativeButton(getString(android.R.string.no), new DialogInterface.OnClickListener() {
@Override
- public void onClick(DialogInterface dialog, int id) {
+ public void onClick(final DialogInterface dialog, final int id) {
dialog.cancel();
cgData.resetNewlyCreatedDatabase();
}
@@ -533,7 +504,7 @@ public class MainActivity extends AbstractActivity {
nearestView.setClickable(true);
nearestView.setOnClickListener(new OnClickListener() {
@Override
- public void onClick(View v) {
+ public void onClick(final View v) {
cgeoFindNearest(v);
}
});
@@ -557,12 +528,7 @@ public class MainActivity extends AbstractActivity {
(new ObtainAddressThread()).start();
}
} else {
- if (geo.getAltitude() != 0.0) {
- final String humanAlt = Units.getDistanceFromKilometers((float) geo.getAltitude() / 1000);
- navLocation.setText(geo.getCoords() + " | " + humanAlt);
- } else {
- navLocation.setText(geo.getCoords().toString());
- }
+ navLocation.setText(geo.getCoords().toString());
}
} else {
if (nearestView.isClickable()) {
@@ -585,7 +551,7 @@ public class MainActivity extends AbstractActivity {
* @param v
* unused here but needed since this method is referenced from XML layout
*/
- public void cgeoFindOnMap(View v) {
+ public void cgeoFindOnMap(final View v) {
findOnMap.setPressed(true);
CGeoMap.startActivityLiveMap(this);
}
@@ -594,7 +560,7 @@ public class MainActivity extends AbstractActivity {
* @param v
* unused here but needed since this method is referenced from XML layout
*/
- public void cgeoFindNearest(View v) {
+ public void cgeoFindNearest(final View v) {
if (app.currentGeo().getCoords() == null) {
return;
}
@@ -607,7 +573,7 @@ public class MainActivity extends AbstractActivity {
* @param v
* unused here but needed since this method is referenced from XML layout
*/
- public void cgeoFindByOffline(View v) {
+ public void cgeoFindByOffline(final View v) {
findByOffline.setPressed(true);
cgeocaches.startActivityOffline(this);
}
@@ -616,7 +582,7 @@ public class MainActivity extends AbstractActivity {
* @param v
* unused here but needed since this method is referenced from XML layout
*/
- public void cgeoSearch(View v) {
+ public void cgeoSearch(final View v) {
advanced.setPressed(true);
startActivity(new Intent(this, SearchActivity.class));
}
@@ -625,7 +591,7 @@ public class MainActivity extends AbstractActivity {
* @param v
* unused here but needed since this method is referenced from XML layout
*/
- public void cgeoPoint(View v) {
+ public void cgeoPoint(final View v) {
any.setPressed(true);
startActivity(new Intent(this, NavigateAnyPointActivity.class));
}
@@ -634,7 +600,7 @@ public class MainActivity extends AbstractActivity {
* @param v
* unused here but needed since this method is referenced from XML layout
*/
- public void cgeoFilter(View v) {
+ public void cgeoFilter(final View v) {
filter.setPressed(true);
filter.performClick();
}
@@ -643,7 +609,7 @@ public class MainActivity extends AbstractActivity {
* @param v
* unused here but needed since this method is referenced from XML layout
*/
- public void cgeoNavSettings(View v) {
+ public void cgeoNavSettings(final View v) {
startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
}
@@ -651,7 +617,7 @@ public class MainActivity extends AbstractActivity {
private Handler countBubbleHandler = new Handler() {
@Override
- public void handleMessage(Message msg) {
+ public void handleMessage(final Message msg) {
try {
if (countBubbleCnt == 0) {
countBubble.setVisibility(View.GONE);
@@ -728,36 +694,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);
}
}
}
@@ -793,7 +734,7 @@ public class MainActivity extends AbstractActivity {
* @param view
* unused here but needed since this method is referenced from XML layout
*/
- public void showAbout(View view) {
+ public void showAbout(final View view) {
AboutActivity_.intent(this).start();
}
@@ -801,7 +742,7 @@ public class MainActivity extends AbstractActivity {
* @param view
* unused here but needed since this method is referenced from XML layout
*/
- public void goSearch(View view) {
+ public void goSearch(final View view) {
onSearchRequested();
}