aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/cgeoaddresses.java
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2011-09-16 14:36:28 +0200
committerSamuel Tardieu <sam@rfc1149.net>2011-09-16 14:36:28 +0200
commit579ef7a535489d4aa632db11667a3b01deb6cafd (patch)
tree55810021c02ac7d80d3a9702ef0b59e4af154b9c /main/src/cgeo/geocaching/cgeoaddresses.java
parent96ea21fd50334479c262da692038965d0e4d596a (diff)
downloadcgeo-579ef7a535489d4aa632db11667a3b01deb6cafd.zip
cgeo-579ef7a535489d4aa632db11667a3b01deb6cafd.tar.gz
cgeo-579ef7a535489d4aa632db11667a3b01deb6cafd.tar.bz2
Move sources into the main directory
This prepares the inclusion of tests into the same repository.
Diffstat (limited to 'main/src/cgeo/geocaching/cgeoaddresses.java')
-rw-r--r--main/src/cgeo/geocaching/cgeoaddresses.java178
1 files changed, 178 insertions, 0 deletions
diff --git a/main/src/cgeo/geocaching/cgeoaddresses.java b/main/src/cgeo/geocaching/cgeoaddresses.java
new file mode 100644
index 0000000..0261349
--- /dev/null
+++ b/main/src/cgeo/geocaching/cgeoaddresses.java
@@ -0,0 +1,178 @@
+package cgeo.geocaching;
+
+import cgeo.geocaching.activity.AbstractActivity;
+
+import android.app.ProgressDialog;
+import android.content.Intent;
+import android.location.Address;
+import android.location.Geocoder;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.Button;
+import android.widget.LinearLayout;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+public class cgeoaddresses extends AbstractActivity {
+ private final List<Address> addresses = new ArrayList<Address>();
+ private String keyword = null;
+ private LayoutInflater inflater = null;
+ private LinearLayout addList = null;
+ private ProgressDialog waitDialog = null;
+ private Handler loadPlacesHandler = new Handler() {
+
+ @Override
+ public void handleMessage(Message msg) {
+ try {
+ if (addList == null) {
+ addList = (LinearLayout) findViewById(R.id.address_list);
+ }
+
+ if (addresses.isEmpty()) {
+ if (waitDialog != null) {
+ waitDialog.dismiss();
+ }
+
+ showToast(res.getString(R.string.err_search_address_no_match));
+
+ finish();
+ return;
+ } else {
+ LinearLayout oneAddPre = null;
+ for (Address address : addresses) {
+ oneAddPre = (LinearLayout) inflater.inflate(R.layout.address_button, null);
+
+ Button oneAdd = (Button) oneAddPre.findViewById(R.id.button);
+ int index = 0;
+ StringBuilder allAdd = new StringBuilder();
+ StringBuilder allAddLine = new StringBuilder();
+
+ while (address.getAddressLine(index) != null) {
+ if (allAdd.length() > 0) {
+ allAdd.append('\n');
+ }
+ if (allAddLine.length() > 0) {
+ allAddLine.append("; ");
+ }
+
+ allAdd.append(address.getAddressLine(index));
+ allAddLine.append(address.getAddressLine(index));
+
+ index++;
+ }
+
+ oneAdd.setText(allAdd.toString());
+ oneAdd.setLines(allAdd.toString().split("\n").length);
+ oneAdd.setClickable(true);
+ oneAdd.setOnClickListener(new buttonListener(address.getLatitude(), address.getLongitude(), allAddLine.toString()));
+ addList.addView(oneAddPre);
+ }
+ }
+
+ if (waitDialog != null) {
+ waitDialog.dismiss();
+ }
+ } catch (Exception e) {
+ if (waitDialog != null) {
+ waitDialog.dismiss();
+ }
+ Log.e(cgSettings.tag, "cgeoaddresses.loadCachesHandler: " + e.toString());
+ }
+ }
+ };
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // init
+ inflater = getLayoutInflater();
+
+ setTheme();
+ setContentView(R.layout.addresses);
+ setTitle(res.getString(R.string.search_address_result));
+
+ // get parameters
+ Bundle extras = getIntent().getExtras();
+
+ // try to get data from extras
+ if (extras != null) {
+ keyword = extras.getString("keyword");
+ }
+
+ if (keyword == null) {
+ showToast(res.getString(R.string.err_search_address_forgot));
+ finish();
+ return;
+ }
+
+ waitDialog = ProgressDialog.show(this, res.getString(R.string.search_address_started), keyword, true);
+ waitDialog.setCancelable(true);
+
+ (new loadPlaces()).start();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ settings.load();
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ }
+
+ private class loadPlaces extends Thread {
+
+ @Override
+ public void run() {
+ Geocoder geocoder = new Geocoder(cgeoaddresses.this, Locale.getDefault());
+ try {
+ List<Address> knownLocations = geocoder.getFromLocationName(keyword, 20);
+
+ addresses.clear();
+ for (Address address : knownLocations) {
+ addresses.add(address);
+ }
+ } catch (Exception e) {
+ Log.e(cgSettings.tag, "cgeoaddresses.loadPlaces.run: " + e.toString());
+ }
+
+ loadPlacesHandler.sendMessage(new Message());
+ }
+ }
+
+ private class buttonListener implements View.OnClickListener {
+
+ private Double latitude = null;
+ private Double longitude = null;
+ private String address = null;
+
+ public buttonListener(Double latitudeIn, Double longitudeIn, String addressIn) {
+ latitude = latitudeIn;
+ longitude = longitudeIn;
+ address = addressIn;
+ }
+
+ public void onClick(View arg0) {
+ Intent addressIntent = new Intent(cgeoaddresses.this, cgeocaches.class);
+ addressIntent.putExtra("type", "address");
+ addressIntent.putExtra("latitude", (Double) latitude);
+ addressIntent.putExtra("longitude", (Double) longitude);
+ addressIntent.putExtra("address", (String) address);
+ addressIntent.putExtra("cachetype", settings.cacheType);
+ startActivity(addressIntent);
+
+ finish();
+ return;
+ }
+ }
+}