diff options
Diffstat (limited to 'main/src/cgeo/geocaching/MainActivity.java')
| -rw-r--r-- | main/src/cgeo/geocaching/MainActivity.java | 225 |
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(); } |
