import android.view.Menu;\r
import android.view.MenuItem;\r
import android.view.inputmethod.InputMethodManager;\r
+import android.widget.Toast;\r
\r
\r
public class Navit extends Activity implements Handler.Callback\r
public static final int MAPDOWNLOAD_DIALOG = 1;\r
public ProgressDialog mapdownloader_dialog = null;\r
public static NavitMapDownloader mapdownloader = null;\r
+ public static final int NavitDownloaderSelectMap_id = 967;\r
+ public static int download_map_it = 0;\r
\r
private boolean extractRes(String resname, String result)\r
{\r
NavitActivity(-3);\r
}\r
\r
- protected void onActivityResult(int requestCode, int resultCode, Intent data)\r
- {\r
- //Log.e("Navit", "onActivityResult " + requestCode + " " + resultCode);\r
- ActivityResults[requestCode].onActivityResult(requestCode, resultCode, data);\r
- }\r
+\r
public void setActivityResult(int requestCode, NavitActivityResult ActivityResult)\r
{\r
//Log.e("Navit", "setActivityResult " + requestCode);\r
Log.e("Navit", "onOptionsItemSelected -> zoom out");\r
break;\r
case 3 :\r
- // show the map download progressbar\r
- showDialog(Navit.MAPDOWNLOAD_DIALOG);\r
+ Intent foo2 = new Intent(this, NavitDownloadSelectMapActivity.class);\r
+ foo2.putExtra("title", "bla bla");\r
+ foo2.putExtra("some stuff", "bla bla");\r
+ this.startActivityForResult(foo2, Navit.NavitDownloaderSelectMap_id);\r
break;\r
case 99 :\r
this.exit();\r
return true;\r
}\r
\r
+\r
+ protected void onActivityResult(int requestCode, int resultCode, Intent data)\r
+ {\r
+ switch (requestCode)\r
+ {\r
+ case Navit.NavitDownloaderSelectMap_id :\r
+ try\r
+ {\r
+ if (resultCode == Activity.RESULT_OK)\r
+ {\r
+ // set map id to download\r
+ Navit.download_map_it = Integer.getInteger(data.getStringExtra("selected_id"), 0);\r
+ // show the map download progressbar, and download the map\r
+ showDialog(Navit.MAPDOWNLOAD_DIALOG);\r
+ }\r
+ else\r
+ {\r
+ // user pressed back key\r
+ }\r
+ }\r
+ catch (Exception e)\r
+ {\r
+ Log.d("Navit", "error on onActivityResult");\r
+ }\r
+ break;\r
+ default :\r
+ //Log.e("Navit", "onActivityResult " + requestCode + " " + resultCode);\r
+ ActivityResults[requestCode].onActivityResult(requestCode, resultCode, data);\r
+ break;\r
+ }\r
+ }\r
+\r
+\r
public Handler progress_handler = new Handler()\r
{\r
public void handleMessage(Message msg)\r
mapdownloader_dialog.setMessage(msg.getData()\r
.getString("text"));\r
break;\r
+ case 2 :\r
+ Toast.makeText(getApplicationContext(),\r
+ msg.getData().getString("text"),\r
+ Toast.LENGTH_SHORT).show();\r
+ break;\r
}\r
}\r
};\r
mapdownloader_dialog.setCancelable(true);\r
mapdownloader_dialog.setProgress(0);\r
mapdownloader_dialog.setMax(200);\r
- mapdownloader = new NavitMapDownloader();\r
+ mapdownloader = new NavitMapDownloader(this);\r
//map_download.download_osm_map(NavitMapDownloader.austria);\r
ProgressThread progressThread = mapdownloader.new ProgressThread(progress_handler,\r
- NavitMapDownloader.austria);\r
+ NavitMapDownloader.OSM_MAPS[Navit.download_map_it]);\r
progressThread.start();\r
return mapdownloader_dialog;\r
}\r
--- /dev/null
+/**\r
+ * Navit, a modular navigation system.\r
+ * Copyright (C) 2005-2008 Navit Team\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * version 2 as published by the Free Software Foundation.\r
+ *\r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the\r
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\r
+ * Boston, MA 02110-1301, USA.\r
+ */\r
+\r
+package org.navitproject.navit;\r
+\r
+import android.app.Activity;\r
+import android.app.ListActivity;\r
+import android.content.Intent;\r
+import android.os.Bundle;\r
+import android.util.Log;\r
+import android.view.View;\r
+import android.widget.ArrayAdapter;\r
+import android.widget.ListView;\r
+\r
+public class NavitDownloadSelectMapActivity extends ListActivity\r
+{\r
+\r
+ private int selected_id = -1;\r
+\r
+ @Override\r
+ public void onCreate(Bundle savedInstanceState)\r
+ {\r
+ super.onCreate(savedInstanceState);\r
+ Log.e("Navit", "all ok");\r
+\r
+ ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,\r
+ android.R.layout.simple_list_item_1, NavitMapDownloader.OSM_MAP_NAME_LIST);\r
+ setListAdapter(adapter);\r
+ }\r
+\r
+ @Override\r
+ protected void onListItemClick(ListView l, View v, int position, long id)\r
+ {\r
+ super.onListItemClick(l, v, position, id);\r
+ // Get the item that was clicked\r
+ // Object o = this.getListAdapter().getItem(position);\r
+ // String keyword = o.toString();\r
+ this.selected_id = position;\r
+ // Toast.makeText(this, "You selected: " + position + " " + keyword, Toast.LENGTH_LONG).show();\r
+\r
+ // close this activity\r
+ executeDone();\r
+ }\r
+\r
+ // @Override\r
+ // public void onBackPressed()\r
+ // {\r
+ // executeDone();\r
+ // super.onBackPressed();\r
+ // }\r
+\r
+ private void executeDone()\r
+ {\r
+ Intent resultIntent = new Intent();\r
+ resultIntent.putExtra("selected_id", String\r
+ .valueOf(NavitDownloadSelectMapActivity.this.selected_id));\r
+ setResult(Activity.RESULT_OK, resultIntent);\r
+ finish();\r
+ }\r
+\r
+}\r
\r
package org.navitproject.navit;\r
\r
+import java.io.BufferedOutputStream;\r
import java.io.File;\r
import java.io.FileOutputStream;\r
import java.io.IOException;\r
import java.io.InputStream;\r
import java.net.HttpURLConnection;\r
import java.net.URL;\r
+import java.text.DecimalFormat;\r
+import java.text.NumberFormat;\r
\r
import android.os.Bundle;\r
import android.os.Handler;\r
String lat1;\r
String lon2;\r
String lat2;\r
+ String map_name = "";\r
int est_size_bytes = 0;\r
\r
- public osm_map_values(String lon_1, String lat_1, String lon_2, String lat_2, int bytes_est)\r
+ public osm_map_values(String mapname, String lon_1, String lat_1, String lon_2, String lat_2,\r
+ int bytes_est)\r
{\r
+ this.map_name = mapname;\r
this.lon1 = lon_1;\r
this.lat1 = lat_1;\r
this.lon2 = lon_2;\r
*/\r
//\r
// define the maps here\r
- // lon1 , lat1 , lon2 , lat2, est. size in bytes\r
- public static osm_map_values austria = new osm_map_values("9.4", "46.32", "17.21", "49.1",\r
- 219152384);\r
+ // name , lon1 , lat1 , lon2 , lat2, est. size in bytes\r
+ public static osm_map_values austria = new osm_map_values("Austria", "9.4",\r
+ "46.32", "17.21", "49.1", 219152384);\r
+ public static osm_map_values benelux = new osm_map_values("BeNeLux", "2.08",\r
+ "48.87", "7.78", "54.52", 219152384);\r
+ public static osm_map_values germany = new osm_map_values("Germany", "5.18",\r
+ "46.84", "15.47", "55.64", 500000000);\r
+ public static osm_map_values[] OSM_MAPS = new osm_map_values[]{\r
+ NavitMapDownloader.austria, NavitMapDownloader.germany, NavitMapDownloader.benelux};\r
+ public static String[] OSM_MAP_NAME_LIST = new String[]{\r
+ NavitMapDownloader.OSM_MAPS[0].map_name, NavitMapDownloader.OSM_MAPS[1].map_name,\r
+ NavitMapDownloader.OSM_MAPS[2].map_name };\r
+\r
\r
public class ProgressThread extends Thread\r
{\r
}\r
}\r
\r
+ public Navit navit_jmain = null;\r
+\r
+ public NavitMapDownloader(Navit main)\r
+ {\r
+ this.navit_jmain = main;\r
+ }\r
+\r
public void download_osm_map(Handler handler, osm_map_values map_values)\r
{\r
Message msg = handler.obtainMessage();\r
b.putInt("max", map_values.est_size_bytes);\r
b.putInt("cur", 0);\r
b.putString("title", "Mapdownload");\r
- b.putString("text", "downloading OSM map");\r
+ b.putString("text", "downloading: " + map_values.map_name);\r
msg.setData(b);\r
handler.sendMessage(msg);\r
try\r
{\r
}\r
\r
+ // output filename\r
+ String fileName = "navitmap.tmp";\r
+ String final_fileName = "navitmap.bin";\r
+ // output path for output filename\r
+ // String PATH = Environment.getExternalStorageDirectory() + "/download/";\r
+ String PATH = "/sdcard/";\r
+ Log.v("log_tag", "mapfilename tmp: " + PATH + fileName);\r
+\r
try\r
{\r
URL url = new URL("http://maps.navit-project.org/api/map/?bbox=" + map_values.lon1 + ","\r
c.setConnectTimeout(5000);\r
c.connect();\r
\r
- // output filename\r
- String fileName = "navitmap.tmp";\r
- // output path for output filename\r
- // String PATH = Environment.getExternalStorageDirectory() + "/download/";\r
- String PATH = "/sdcard/";\r
- Log.v("log_tag", "mapfilename tmp: " + PATH + fileName);\r
File file = new File(PATH);\r
File outputFile = new File(file, fileName);\r
+ File final_outputFile = new File(file, final_fileName);\r
//outputFile.delete();\r
// seems this command overwrites the output file anyway\r
FileOutputStream fos = new FileOutputStream(outputFile);\r
+ BufferedOutputStream buf = new BufferedOutputStream(fos, 1024 * 16); // buffer\r
\r
InputStream is = c.getInputStream();\r
\r
- byte[] buffer = new byte[1024 * 10]; // 10k buffer\r
+ byte[] buffer = new byte[1024 * 4]; // buffer\r
int len1 = 0;\r
int already_read = 0;\r
- int alt = 10; // show progress about every 100k Bytes\r
+ int alt = 5; // show progress about every xx cylces\r
int alt_cur = 0;\r
+ String kbytes_per_second = "";\r
+ long last_timestamp = 0;\r
+ long start_timestamp = System.currentTimeMillis();\r
+ int last_bytes = 0;\r
+ NumberFormat formatter = new DecimalFormat("00000.0");\r
+ String eta_string = "";\r
+ float per_second_overall = 0f;\r
+ int bytes_remaining = 0;\r
+ int eta_seconds = 0;\r
while ((len1 = is.read(buffer)) != -1)\r
{\r
already_read = already_read + len1;\r
msg.what = 1;\r
b.putInt("max", map_values.est_size_bytes);\r
b.putInt("cur", already_read);\r
- b.putString("title", "Mapdownload");\r
- b.putString("text", "downloading OSM map\n" + (int) (already_read / 1024f / 1024f)\r
- + "Mb / " + (int) (map_values.est_size_bytes / 1024f / 1024f) + "Mb");\r
+ b.putString("title", "Map download");\r
+ // if (last_timestamp == 0)\r
+ // {\r
+ // kbytes_per_second = "--";\r
+ // }\r
+ // else\r
+ // {\r
+ // //float temp = (((already_read - last_bytes) / 1024f) / ((System\r
+ // // .currentTimeMillis() - last_timestamp) / 1000f));\r
+ // //kbytes_per_second = formatter.format(temp);\r
+ // }\r
+ last_timestamp = System.currentTimeMillis();\r
+ last_bytes = already_read;\r
+ per_second_overall = (float) already_read\r
+ / (float) ((System.currentTimeMillis() - start_timestamp) / 1000);\r
+ kbytes_per_second = formatter.format((per_second_overall / 1024f));\r
+ // Log.d("NavitMapDownloader", "k " + kbytes_per_second);\r
+ bytes_remaining = map_values.est_size_bytes - already_read;\r
+ eta_seconds = (int) ((float) bytes_remaining / (float) per_second_overall);\r
+ if (eta_seconds > 60)\r
+ {\r
+ eta_string = (int) (eta_seconds / 60f) + " m";\r
+ }\r
+ else\r
+ {\r
+ eta_string = eta_seconds + " s";\r
+ }\r
+ b.putString("text", "downloading: " + map_values.map_name + "\n" + " "\r
+ + (int) (already_read / 1024f / 1024f) + "Mb / "\r
+ + (int) (map_values.est_size_bytes / 1024f / 1024f) + "Mb" + "\n" + " "\r
+ + kbytes_per_second + "kb/s" + " ETA: " + eta_string);\r
msg.setData(b);\r
handler.sendMessage(msg);\r
}\r
- fos.write(buffer, 0, len1);\r
+ //fos.write(buffer, 0, len1);\r
+ buf.write(buffer, 0, len1);\r
}\r
+ buf.close();\r
fos.close();\r
is.close();\r
+\r
+ // delete an already final filename, first\r
+ final_outputFile.delete();\r
+ // rename file to final name\r
+ outputFile.renameTo(final_outputFile);\r
}\r
catch (IOException e)\r
{\r
+ msg = handler.obtainMessage();\r
+ b = new Bundle();\r
+ msg.what = 2;\r
+ b.putString("text", "Error downloading map!");\r
+ msg.setData(b);\r
+ handler.sendMessage(msg);\r
+\r
Log.d("NavitMapDownloader", "Error: " + e);\r
}\r
+ catch (Exception e)\r
+ {\r
+ msg = handler.obtainMessage();\r
+ b = new Bundle();\r
+ msg.what = 2;\r
+ b.putString("text", "Error downloading map!");\r
+ msg.setData(b);\r
+ handler.sendMessage(msg);\r
+\r
+ Log.d("NavitMapDownloader", "gerneral Error: " + e);\r
+ }\r
\r
msg = handler.obtainMessage();\r
b = new Bundle();\r
b.putInt("max", map_values.est_size_bytes);\r
b.putInt("cur", map_values.est_size_bytes);\r
b.putString("title", "Mapdownload");\r
- b.putString("text", "ready");\r
+ b.putString("text", map_values.map_name + " ready");\r
msg.setData(b);\r
handler.sendMessage(msg);\r
\r
\r
Log.d("NavitMapDownloader", "success");\r
}\r
-\r
}\r