summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormvglasow <michael -at- vonglasow.com>2019-02-21 02:35:45 +0100
committermvglasow <michael -at- vonglasow.com>2019-02-21 02:35:45 +0100
commit2317c69710d1888077f50744d323ffaefaac4ddb (patch)
tree7a7bff4d8891e02e1b938bd20888ab3e3933a565
parentf6cea0c798c53eafa2f0e58a26e7c2fc607a3694 (diff)
downloadnavit-2317c69710d1888077f50744d323ffaefaac4ddb.tar.gz
Fix:port/android:Do not reinitialize everything on activity recreation
Signed-off-by: mvglasow <michael -at- vonglasow.com>
-rw-r--r--navit/android.c19
-rw-r--r--navit/android.h1
-rw-r--r--navit/android/src/org/navitproject/navit/Navit.java20
-rw-r--r--navit/android/src/org/navitproject/navit/NavitGraphics.java2
-rw-r--r--navit/android/src/org/navitproject/navit/NavitSpeech2.java4
-rw-r--r--navit/traffic/traff_android/traffic_traff_android.c2
-rw-r--r--navit/vehicle/android/vehicle_android.c4
7 files changed, 36 insertions, 16 deletions
diff --git a/navit/android.c b/navit/android.c
index 9b06ebb44..dc506ffb0 100644
--- a/navit/android.c
+++ b/navit/android.c
@@ -22,7 +22,8 @@
#include "track.h"
JNIEnv *jnienv;
-jobject *android_activity;
+jobject *android_activity = NULL;
+jobject *android_application = NULL;
int android_version;
struct android_search_priv {
@@ -67,14 +68,20 @@ int android_find_static_method(jclass class, char *name, char *args, jmethodID *
}
JNIEXPORT void JNICALL Java_org_navitproject_navit_Navit_NavitMain( JNIEnv* env, jobject thiz, jobject activity,
- jobject lang, int version, jobject display_density_string, jobject path, jobject map_path) {
+ jobject application, jobject lang, int version, jobject display_density_string, jobject path, jobject map_path,
+ jboolean isLaunch) {
const char *langstr;
const char *displaydensitystr;
const char *map_file_path;
android_version=version;
__android_log_print(ANDROID_LOG_ERROR,"test","called");
jnienv=env;
+ if (android_activity)
+ (*jnienv)->DeleteGlobalRef(jnienv, android_activity);
android_activity = (*jnienv)->NewGlobalRef(jnienv, activity);
+ if (android_application)
+ (*jnienv)->DeleteGlobalRef(jnienv, android_application);
+ android_application = (*jnienv)->NewGlobalRef(jnienv, application);
langstr=(*env)->GetStringUTFChars(env, lang, NULL);
dbg(lvl_debug,"enter env=%p thiz=%p activity=%p lang=%s version=%d",env,thiz,android_activity,langstr,version);
setenv("LANG",langstr,1);
@@ -89,9 +96,11 @@ JNIEXPORT void JNICALL Java_org_navitproject_navit_Navit_NavitMain( JNIEnv* env,
setenv("NAVIT_USER_DATADIR",map_file_path,1);
(*env)->ReleaseStringUTFChars(env, display_density_string, map_file_path);
- const char *strings=(*env)->GetStringUTFChars(env, path, NULL);
- main_real(1, &strings);
- (*env)->ReleaseStringUTFChars(env, path, strings);
+ if (isLaunch) {
+ const char *strings=(*env)->GetStringUTFChars(env, path, NULL);
+ main_real(1, &strings);
+ (*env)->ReleaseStringUTFChars(env, path, strings);
+ }
}
JNIEXPORT void JNICALL Java_org_navitproject_navit_Navit_NavitDestroy( JNIEnv* env) {
diff --git a/navit/android.h b/navit/android.h
index 24774d0e5..ee8b1b4b5 100644
--- a/navit/android.h
+++ b/navit/android.h
@@ -1,6 +1,7 @@
#include <jni.h>
extern JNIEnv *jnienv;
extern jobject *android_activity;
+extern jobject *android_application;
extern int android_version;
int android_find_class_global(char *name, jclass *ret);
int android_find_method(jclass class, char *name, char *args, jmethodID *ret);
diff --git a/navit/android/src/org/navitproject/navit/Navit.java b/navit/android/src/org/navitproject/navit/Navit.java
index fb10d56dd..5c2d15a72 100644
--- a/navit/android/src/org/navitproject/navit/Navit.java
+++ b/navit/android/src/org/navitproject/navit/Navit.java
@@ -23,6 +23,7 @@ import android.Manifest;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
+import android.app.Application;
import android.app.Dialog;
import android.app.Notification;
import android.app.NotificationManager;
@@ -71,6 +72,7 @@ import java.util.regex.Pattern;
public class Navit extends Activity {
+ protected static NavitGraphics graphics = null;
private NavitDialogs dialogs;
private PowerManager.WakeLock wl;
private NavitActivityResult[] ActivityResults;
@@ -97,7 +99,7 @@ public class Navit extends Activity {
Boolean isFullscreen = false;
private static final int MY_PERMISSIONS_REQUEST_ALL = 101;
private static NotificationManager nm;
- private static Navit navit;
+ private static Navit navit = null;
public static Navit getInstance() {
return navit;
@@ -316,6 +318,9 @@ public class Navit extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
+ /* Whether this is the first launch of Navit (as opposed to the activity being recreated) */
+ boolean isLaunch = (navit == null);
+
super.onCreate(savedInstanceState);
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
@@ -442,8 +447,10 @@ public class Navit extends Activity {
}
Log.d(TAG, "android.os.Build.VERSION.SDK_INT=" + Integer.valueOf(android.os.Build.VERSION.SDK));
- NavitMain(this, NavitLanguage, Integer.valueOf(android.os.Build.VERSION.SDK), my_display_density,
- NAVIT_DATA_DIR + "/bin/navit", map_filename_path);
+ NavitMain(this, getApplication(), NavitLanguage, Integer.valueOf(android.os.Build.VERSION.SDK), my_display_density,
+ NAVIT_DATA_DIR + "/bin/navit", map_filename_path, isLaunch);
+ if (graphics != null)
+ graphics.setActivity(this);
showInfos();
@@ -833,7 +840,8 @@ public class Navit extends Activity {
}
break;
default :
- ActivityResults[requestCode].onActivityResult(requestCode, resultCode, data);
+ if (ActivityResults[requestCode] != null)
+ ActivityResults[requestCode].onActivityResult(requestCode, resultCode, data);
break;
}
}
@@ -908,8 +916,8 @@ public class Navit extends Activity {
NavitDestroy();
}
- public native void NavitMain(Navit x, String lang, int version, String display_density_string, String path,
- String path2);
+ public native void NavitMain(Navit x, Application application, String lang, int version,
+ String display_density_string, String path, String path2, boolean isLaunch);
public native void NavitDestroy();
diff --git a/navit/android/src/org/navitproject/navit/NavitGraphics.java b/navit/android/src/org/navitproject/navit/NavitGraphics.java
index c7430d1bc..4e7929f88 100644
--- a/navit/android/src/org/navitproject/navit/NavitGraphics.java
+++ b/navit/android/src/org/navitproject/navit/NavitGraphics.java
@@ -632,6 +632,8 @@ public class NavitGraphics {
* @param activity The main activity.
*/
protected void setActivity(final Activity activity) {
+ if (Navit.graphics == null)
+ Navit.graphics = this;
this.activity = (Navit) activity;
view = new NavitView(activity);
view.setClickable(false);
diff --git a/navit/android/src/org/navitproject/navit/NavitSpeech2.java b/navit/android/src/org/navitproject/navit/NavitSpeech2.java
index 1bf996dc5..c86fdd1c8 100644
--- a/navit/android/src/org/navitproject/navit/NavitSpeech2.java
+++ b/navit/android/src/org/navitproject/navit/NavitSpeech2.java
@@ -44,7 +44,7 @@ public class NavitSpeech2 implements TextToSpeech.OnInitListener, NavitActivityR
navit.startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
} else {
Log.e(TAG, "ACTION_CHECK_TTS_DATA not available, assume tts is working");
- mTts = new TextToSpeech(navit, this);
+ mTts = new TextToSpeech(navit.getApplication(), this);
}
}
@@ -57,7 +57,7 @@ public class NavitSpeech2 implements TextToSpeech.OnInitListener, NavitActivityR
if (requestCode == MY_DATA_CHECK_CODE) {
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
// success, create the TTS instance
- mTts = new TextToSpeech(navit, this);
+ mTts = new TextToSpeech(navit.getApplication(), this);
} else {
// missing data, ask to install it
AlertDialog.Builder builder = new AlertDialog.Builder(navit);
diff --git a/navit/traffic/traff_android/traffic_traff_android.c b/navit/traffic/traff_android/traffic_traff_android.c
index 0bc07ad7f..91d408777 100644
--- a/navit/traffic/traff_android/traffic_traff_android.c
+++ b/navit/traffic/traff_android/traffic_traff_android.c
@@ -122,7 +122,7 @@ static int traffic_traff_android_init(struct traffic_priv * this_) {
dbg(lvl_error,"no method found");
return 0; /* exception thrown */
}
- this_->NavitTraff=(*jnienv)->NewObject(jnienv, this_->NavitTraffClass, cid, android_activity,
+ this_->NavitTraff=(*jnienv)->NewObject(jnienv, this_->NavitTraffClass, cid, android_application,
(int) this_->cbid);
dbg(lvl_debug,"result=%p", this_->NavitTraff);
if (!this_->NavitTraff)
diff --git a/navit/vehicle/android/vehicle_android.c b/navit/vehicle/android/vehicle_android.c
index 4d3137bd8..f6173e1b3 100644
--- a/navit/vehicle/android/vehicle_android.c
+++ b/navit/vehicle/android/vehicle_android.c
@@ -238,8 +238,8 @@ static int vehicle_android_init(struct vehicle_priv *ret) {
dbg(lvl_error,"no method found");
return 0; /* exception thrown */
}
- dbg(lvl_debug, "at 4 android_activity=%p", android_activity);
- ret->NavitVehicle=(*jnienv)->NewObject(jnienv, ret->NavitVehicleClass, cid, android_activity,
+ dbg(lvl_debug, "at 4 android_application=%p", android_application);
+ ret->NavitVehicle=(*jnienv)->NewObject(jnienv, ret->NavitVehicleClass, cid, android_application,
(int) ret->pcb, (int) ret->scb, (int) ret->fcb);
dbg(lvl_debug,"result=%p",ret->NavitVehicle);
if (!ret->NavitVehicle)