package org.navitproject.navit;\r
\r
import java.io.File;\r
-import java.io.FileInputStream;\r
import java.io.FileOutputStream;\r
import java.io.InputStream;\r
import java.util.ArrayList;\r
import android.content.DialogInterface;\r
import android.content.Intent;\r
import android.content.SharedPreferences;\r
+import android.content.pm.ApplicationInfo;\r
+import android.content.pm.PackageManager;\r
+import android.content.pm.PackageManager.NameNotFoundException;\r
import android.content.res.Resources;\r
import android.media.AudioManager;\r
import android.net.Uri;\r
public static List<NavitAddress> NavitAddressResultList_foundItems = new ArrayList<NavitAddress>();\r
\r
public static final int MAP_NUM_SECONDARY = 12;\r
+ static final String NAVIT_PACKAGE_NAME = "org.navitproject.navit";\r
+ static final String TAG = "Navit";\r
static final String MAP_FILENAME_PATH = "/sdcard/navit/";\r
- static final String NAVIT_DATA_DIR = "/data/data/org.navitproject.navit";\r
+ static final String NAVIT_DATA_DIR = "/data/data/" + NAVIT_PACKAGE_NAME;\r
static final String NAVIT_DATA_SHARE_DIR = NAVIT_DATA_DIR + "/share";\r
static final String FIRST_STARTUP_FILE = NAVIT_DATA_SHARE_DIR + "/has_run_once.txt";\r
public static final String NAVIT_PREFS = "NavitPrefs";\r
- \r
+\r
public static String get_text(String in)\r
{\r
return NavitTextTranslations.get_text(in);\r
}\r
\r
- private boolean extractRes(String resname, String result)\r
- {\r
- int slash = -1;\r
+ private boolean extractRes(String resname, String result) {\r
boolean needs_update = false;\r
- File resultfile;\r
Resources res = getResources();\r
- Log.e("Navit", "Res Name " + resname);\r
- Log.e("Navit", "result " + result);\r
- int id = res.getIdentifier(resname, "raw", "org.navitproject.navit");\r
- Log.e("Navit", "Res ID " + id);\r
- if (id == 0) \r
+ Log.e(TAG, "Res Name " + resname + ", result " + result);\r
+ int id = res.getIdentifier(resname, "raw", NAVIT_PACKAGE_NAME);\r
+ Log.e(TAG, "Res ID " + id);\r
+ if (id == 0)\r
return false;\r
\r
- while ((slash = result.indexOf("/", slash + 1)) != -1)\r
- {\r
- if (slash != 0)\r
- {\r
- Log.e("Navit", "Checking " + result.substring(0, slash));\r
- resultfile = new File(result.substring(0, slash));\r
- if (!resultfile.exists())\r
- {\r
- Log.e("Navit", "Creating dir");\r
- if (!resultfile.mkdir())\r
- return false;\r
- needs_update = true;\r
- }\r
- }\r
- }\r
-\r
- resultfile = new File(result);\r
- if (!resultfile.exists()) \r
+ File resultfile = new File(result);\r
+ if (!resultfile.exists()) {\r
needs_update = true;\r
-\r
- if (!needs_update)\r
- {\r
- try\r
- {\r
- InputStream resourcestream = res.openRawResource(id);\r
- FileInputStream resultfilestream = new FileInputStream(resultfile);\r
- byte[] resourcebuf = new byte[1024];\r
- byte[] resultbuf = new byte[1024];\r
- int i = 0;\r
- while ((i = resourcestream.read(resourcebuf)) != -1)\r
- {\r
- if (resultfilestream.read(resultbuf) != i)\r
- {\r
- Log.e("Navit", "Result is too short");\r
- needs_update = true;\r
- break;\r
- }\r
- for (int j = 0; j < i; j++)\r
- {\r
- if (resourcebuf[j] != resultbuf[j])\r
- {\r
- Log.e("Navit", "Result is different");\r
- needs_update = true;\r
- break;\r
- }\r
- }\r
- if (needs_update) break;\r
- }\r
- if (!needs_update && resultfilestream.read(resultbuf) != -1)\r
- {\r
- Log.e("Navit", "Result is too long");\r
- needs_update = true;\r
- }\r
-\r
- }\r
- catch (Exception e)\r
- {\r
- Log.e("Navit", "Exception " + e.getMessage());\r
+ if (!resultfile.mkdirs())\r
return false;\r
+ } else {\r
+ PackageManager pm = getPackageManager();\r
+ ApplicationInfo appInfo;\r
+ long apkUpdateTime = 0;\r
+ try {\r
+ appInfo = pm.getApplicationInfo(NAVIT_PACKAGE_NAME, 0);\r
+ apkUpdateTime = new File(appInfo.sourceDir).lastModified();\r
+ } catch (NameNotFoundException e) {\r
+ Log.e(TAG, "Could not read package infos");\r
+ e.printStackTrace();\r
}\r
+ if (apkUpdateTime > resultfile.lastModified())\r
+ needs_update = true;\r
}\r
- if (needs_update)\r
- {\r
- Log.e("Navit", "Extracting resource");\r
\r
- try\r
- {\r
+ if (needs_update) {\r
+ Log.e(TAG, "Extracting resource");\r
+\r
+ try {\r
InputStream resourcestream = res.openRawResource(id);\r
FileOutputStream resultfilestream = new FileOutputStream(resultfile);\r
byte[] buf = new byte[1024];\r
int i = 0;\r
- while ((i = resourcestream.read(buf)) != -1)\r
- {\r
+ while ((i = resourcestream.read(buf)) != -1) {\r
resultfilestream.write(buf, 0, i);\r
}\r
- }\r
- catch (Exception e)\r
- {\r
- Log.e("Navit", "Exception " + e.getMessage());\r
+ } catch (Exception e) {\r
+ Log.e(TAG, "Exception " + e.getMessage());\r
return false;\r
}\r
}\r
{\r
SharedPreferences settings = getSharedPreferences(NAVIT_PREFS, MODE_PRIVATE);\r
boolean firstStart = settings.getBoolean("firstStart", true);\r
- \r
- \r
+\r
if (firstStart)\r
{\r
AlertDialog.Builder infobox = new AlertDialog.Builder(this);\r
}\r
});\r
\r
-\r
// TRANS\r
infobox.setNeutralButton(getString(R.string.initial_info_box_more_info), new DialogInterface.OnClickListener() {\r
public void onClick(DialogInterface arg0, int arg1) {\r