summaryrefslogtreecommitdiff
path: root/navit
diff options
context:
space:
mode:
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2009-08-12 23:10:50 +0000
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2009-08-12 23:10:50 +0000
commit68b4f6b3258f15f73d439a2eb36a1f91902aeb90 (patch)
tree9b45cbeda39b9cdab2f35379a0fe7961ba58c6b3 /navit
parent53721fa8df523400333a79a218899a9a3de793d2 (diff)
downloadnavit-68b4f6b3258f15f73d439a2eb36a1f91902aeb90.tar.gz
Add:Core:More android work
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@2460 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit')
-rw-r--r--navit/android.c9
-rw-r--r--navit/android/AndroidManifest.xml1
-rw-r--r--navit/android/src/org/navitproject/navit/Navit.java16
-rw-r--r--navit/android/src/org/navitproject/navit/NavitGraphics.java4
-rw-r--r--navit/android/src/org/navitproject/navit/NavitIdle.java53
-rw-r--r--navit/graphics/android/graphics_android.c74
-rw-r--r--navit/vehicle/android/vehicle_android.c8
7 files changed, 149 insertions, 16 deletions
diff --git a/navit/android.c b/navit/android.c
index 315824b48..bb1929bba 100644
--- a/navit/android.c
+++ b/navit/android.c
@@ -49,6 +49,7 @@ Java_org_navitproject_navit_Navit_NavitMain( JNIEnv* env, jobject thiz, jobject
__android_log_print(ANDROID_LOG_ERROR,"test","called");
jnienv=env;
android_activity=activity;
+ (*jnienv)->NewGlobalRef(jnienv, activity);
dbg(0,"enter env=%p thiz=%p activity=%p\n",env,thiz,activity);
main(1, strings);
}
@@ -91,3 +92,11 @@ Java_org_navitproject_navit_NavitVehicle_VehicleCallback( JNIEnv * env, jobject
{
callback_call_1((struct callback *)id, (void *)location);
}
+
+JNIEXPORT void JNICALL
+Java_org_navitproject_navit_NavitIdle_IdleCallback( JNIEnv* env, jobject thiz, int id)
+{
+ dbg(1,"enter %p %p\n",thiz, (void *)id);
+ callback_call_0((struct callback *)id);
+}
+
diff --git a/navit/android/AndroidManifest.xml b/navit/android/AndroidManifest.xml
index 7a1ea94c4..9341686da 100644
--- a/navit/android/AndroidManifest.xml
+++ b/navit/android/AndroidManifest.xml
@@ -5,6 +5,7 @@
android:versionName="1.0">
<uses-sdk android:minSdkVersion="3" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+ <uses-permission android:name="android.permission.WAKE_LOCK" />
<application android:label="@string/app_name">
<activity android:name="Navit"
android:label="@string/app_name"
diff --git a/navit/android/src/org/navitproject/navit/Navit.java b/navit/android/src/org/navitproject/navit/Navit.java
index f54f26273..24a1ed60e 100644
--- a/navit/android/src/org/navitproject/navit/Navit.java
+++ b/navit/android/src/org/navitproject/navit/Navit.java
@@ -21,21 +21,37 @@ import android.os.Bundle;
import android.os.Debug;
import android.os.Message;
import android.os.Handler;
+import android.os.PowerManager;
import android.content.Context;
import android.util.Log;
public class Navit extends Activity
{
+ public Handler handler;
+ private PowerManager.WakeLock wl;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
+ PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
+ wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE, "NavitDoNotDimScreen");
+ handler =new Handler() {
+ public void handleMessage(Message m) {
+ Log.e("Navit","Handler received message");
+ }
+ };
// Debug.startMethodTracing("calc");
NavitMain(this);
}
+ public void disableSuspend()
+ {
+ wl.acquire();
+ wl.release();
+ }
+
/* A native method that is implemented by the
* 'hello-jni' native library, which is packaged
* with this application.
diff --git a/navit/android/src/org/navitproject/navit/NavitGraphics.java b/navit/android/src/org/navitproject/navit/NavitGraphics.java
index d4af24e84..239b736cb 100644
--- a/navit/android/src/org/navitproject/navit/NavitGraphics.java
+++ b/navit/android/src/org/navitproject/navit/NavitGraphics.java
@@ -24,8 +24,10 @@ import android.view.*;
import android.util.Log;
public class NavitGraphics extends View {
- public NavitGraphics(Activity activity) {
+ private NavitGraphics parent_graphics;
+ public NavitGraphics(Activity activity, NavitGraphics parent) {
super(activity);
+ parent_graphics=parent;
}
public native void SizeChangedCallback(int id, int x, int y);
public native void ButtonCallback(int id, int pressed, int button, int x, int y);
diff --git a/navit/android/src/org/navitproject/navit/NavitIdle.java b/navit/android/src/org/navitproject/navit/NavitIdle.java
new file mode 100644
index 000000000..872ca085c
--- /dev/null
+++ b/navit/android/src/org/navitproject/navit/NavitIdle.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.navitproject.navit;
+
+import android.app.Activity;
+import android.widget.TextView;
+import android.os.Bundle;
+import android.os.Debug;
+import android.os.Message;
+import android.os.MessageQueue;
+import android.os.Handler;
+import android.os.Looper;
+import android.content.Context;
+import android.util.Log;
+
+
+public class NavitIdle {
+ public native void IdleCallback(int id);
+ private final class Idler implements MessageQueue.IdleHandler {
+ int idle_callbackid;
+ public Idler(int callbackid) {
+ idle_callbackid=callbackid;
+ }
+ public final boolean queueIdle() {
+ IdleCallback(idle_callbackid);
+ return true;
+ }
+ }
+ private Idler idler;
+ NavitIdle(int callbackid)
+ {
+ idler=new Idler(callbackid);
+ Looper.myQueue().addIdleHandler(idler);
+ }
+ public void remove()
+ {
+ Looper.myQueue().removeIdleHandler(idler);
+ }
+}
+
diff --git a/navit/graphics/android/graphics_android.c b/navit/graphics/android/graphics_android.c
index de3764a0d..66d98ac9b 100644
--- a/navit/graphics/android/graphics_android.c
+++ b/navit/graphics/android/graphics_android.c
@@ -20,6 +20,7 @@
#include <glib.h>
#include <unistd.h>
#include "config.h"
+#include "window.h"
#include "point.h"
#include "graphics.h"
#include "color.h"
@@ -54,6 +55,7 @@ struct graphics_priv {
jmethodID Resources_getIdentifier;
struct callback_list *cbl;
+ struct window win;
};
struct graphics_font_priv {
@@ -195,7 +197,7 @@ image_new(struct graphics_priv *gra, struct graphics_image_methods *meth, char *
jstring string;
int id;
- dbg(0,"enter %s\n",path);
+ dbg(1,"enter %s\n",path);
*meth=image_methods;
if (!strncmp(path,"res/drawable/",13)) {
jstring a=(*jnienv)->NewStringUTF(jnienv, "drawable");
@@ -204,11 +206,11 @@ image_new(struct graphics_priv *gra, struct graphics_image_methods *meth, char *
char *pos=strrchr(path_noext, '.');
if (pos)
*pos='\0';
- dbg(0,"path_noext=%s\n",path_noext);
+ dbg(1,"path_noext=%s\n",path_noext);
string = (*jnienv)->NewStringUTF(jnienv, path_noext);
g_free(path_noext);
id=(*jnienv)->CallIntMethod(jnienv, gra->Resources, gra->Resources_getIdentifier, string, a, b);
- dbg(0,"id=%d\n",id);
+ dbg(1,"id=%d\n",id);
if (id)
ret->Bitmap=(*jnienv)->CallStaticObjectMethod(jnienv, gra->BitmapFactoryClass, gra->BitmapFactory_decodeResource, gra->Resources, id);
(*jnienv)->DeleteLocalRef(jnienv, b);
@@ -217,12 +219,12 @@ image_new(struct graphics_priv *gra, struct graphics_image_methods *meth, char *
string = (*jnienv)->NewStringUTF(jnienv, path);
ret->Bitmap=(*jnienv)->CallStaticObjectMethod(jnienv, gra->BitmapFactoryClass, gra->BitmapFactory_decodeFile, string);
}
- dbg(0,"result=%p\n",ret->Bitmap);
+ dbg(1,"result=%p\n",ret->Bitmap);
if (ret->Bitmap) {
(*jnienv)->NewGlobalRef(jnienv, ret->Bitmap);
*w=(*jnienv)->CallIntMethod(jnienv, ret->Bitmap, gra->Bitmap_getWidth);
*h=(*jnienv)->CallIntMethod(jnienv, ret->Bitmap, gra->Bitmap_getHeight);
- dbg(0,"w=%d h=%d for %s\n",*w,*h,path);
+ dbg(1,"w=%d h=%d for %s\n",*w,*h,path);
*w=64;
*h=64;
hot->x=*w/2;
@@ -332,7 +334,9 @@ static struct graphics_priv * overlay_new(struct graphics_priv *gr, struct graph
static void *
get_data(struct graphics_priv *this, char *type)
{
- return &dummy;
+ if (strcmp(type,"window"))
+ return NULL;
+ return &this->win;
}
static void image_free(struct graphics_priv *gr, struct graphics_image_priv *priv)
@@ -498,13 +502,13 @@ graphics_android_init(struct graphics_priv *ret)
if (!find_class_global("org/navitproject/navit/NavitGraphics", &ret->NavitGraphicsClass))
return 0;
dbg(0,"at 3\n");
- cid = (*jnienv)->GetMethodID(jnienv, ret->NavitGraphicsClass, "<init>", "(Landroid/app/Activity;)V");
+ cid = (*jnienv)->GetMethodID(jnienv, ret->NavitGraphicsClass, "<init>", "(Landroid/app/Activity;Lorg/navitproject/navit/NavitGraphics;)V");
if (cid == NULL) {
dbg(0,"no method found\n");
return 0; /* exception thrown */
}
dbg(0,"at 4 android_activity=%p\n",android_activity);
- ret->NavitGraphics=(*jnienv)->NewObject(jnienv, ret->NavitGraphicsClass, cid, android_activity);
+ ret->NavitGraphics=(*jnienv)->NewObject(jnienv, ret->NavitGraphicsClass, cid, android_activity, NULL);
dbg(0,"result=%p\n",ret->NavitGraphics);
if (ret->NavitGraphics)
(*jnienv)->NewGlobalRef(jnienv, ret->NavitGraphics);
@@ -551,6 +555,23 @@ graphics_android_init(struct graphics_priv *ret)
return 1;
}
+static int
+graphics_android_fullscreen(struct window *win, int on)
+{
+ return 1;
+}
+
+static jclass NavitClass;
+static jmethodID Navit_disableSuspend;
+
+static void
+graphics_android_disable_suspend(struct window *win)
+{
+ dbg(1,"enter\n");
+ (*jnienv)->CallVoidMethod(jnienv, android_activity, Navit_disableSuspend);
+}
+
+
static struct graphics_priv *
graphics_android_new(struct navit *nav, struct graphics_methods *meth, struct attr **attrs, struct callback_list *cbl)
@@ -559,6 +580,9 @@ graphics_android_new(struct navit *nav, struct graphics_methods *meth, struct at
ret->cbl=cbl;
*meth=graphics_methods;
+ ret->win.priv=ret;
+ ret->win.fullscreen=graphics_android_fullscreen;
+ ret->win.disable_suspend=graphics_android_disable_suspend;
if (graphics_android_init(ret)) {
return ret;
} else {
@@ -592,10 +616,15 @@ event_android_remove_watch(struct event_watch *ev)
dbg(0,"enter\n");
}
+
static jclass NavitTimeoutClass;
static jmethodID NavitTimeout_init;
static jmethodID NavitTimeout_remove;
+static jclass NavitIdleClass;
+static jmethodID NavitIdle_init;
+static jmethodID NavitIdle_remove;
+
static struct event_timeout *
event_android_add_timeout(int timeout, int multi, struct callback *cb)
{
@@ -622,14 +651,24 @@ event_android_remove_timeout(struct event_timeout *to)
static struct event_idle *
event_android_add_idle(int priority, struct callback *cb)
{
- dbg(0,"enter\n");
- return NULL;
+ jobject ret;
+ dbg(1,"enter\n");
+ ret=(*jnienv)->NewObject(jnienv, NavitIdleClass, NavitIdle_init, (int)cb);
+ dbg(1,"result for %p=%p\n",cb,ret);
+ if (ret)
+ (*jnienv)->NewGlobalRef(jnienv, ret);
+ return (struct event_idle *)ret;
}
static void
event_android_remove_idle(struct event_idle *ev)
{
- dbg(0,"enter\n");
+ dbg(1,"enter %p\n",ev);
+ if (ev) {
+ jobject obj=(jobject )ev;
+ (*jnienv)->CallVoidMethod(jnienv, obj, NavitIdle_remove);
+ (*jnienv)->DeleteGlobalRef(jnienv, obj);
+ }
}
static void
@@ -662,6 +701,19 @@ event_android_new(struct event_methods *meth)
NavitTimeout_remove = (*jnienv)->GetMethodID(jnienv, NavitTimeoutClass, "remove", "()V");
if (NavitTimeout_remove == NULL)
return NULL;
+ if (!find_class_global("org/navitproject/navit/NavitIdle", &NavitIdleClass))
+ return NULL;
+ NavitIdle_init = (*jnienv)->GetMethodID(jnienv, NavitIdleClass, "<init>", "(I)V");
+ if (NavitIdle_init == NULL)
+ return NULL;
+ NavitIdle_remove = (*jnienv)->GetMethodID(jnienv, NavitIdleClass, "remove", "()V");
+ if (NavitIdle_remove == NULL)
+ return NULL;
+ if (!find_class_global("org/navitproject/navit/Navit", &NavitClass))
+ return NULL;
+ Navit_disableSuspend = (*jnienv)->GetMethodID(jnienv, NavitClass, "disableSuspend", "()V");
+ if (Navit_disableSuspend == NULL)
+ return NULL;
dbg(0,"ok\n");
*meth=event_android_methods;
return NULL;
diff --git a/navit/vehicle/android/vehicle_android.c b/navit/vehicle/android/vehicle_android.c
index 78f2f3df8..291d9a04e 100644
--- a/navit/vehicle/android/vehicle_android.c
+++ b/navit/vehicle/android/vehicle_android.c
@@ -81,7 +81,7 @@ vehicle_android_position_attr_get(struct vehicle_priv *priv,
enum attr_type type, struct attr *attr)
{
struct attr * active=NULL;
- dbg(0,"enter %s\n",attr_to_name(type));
+ dbg(1,"enter %s\n",attr_to_name(type));
switch (type) {
#if 0
case attr_position_fix_type:
@@ -116,7 +116,7 @@ vehicle_android_position_attr_get(struct vehicle_priv *priv,
default:
return 0;
}
- dbg(0,"ok\n");
+ dbg(1,"ok\n");
attr->type = type;
return 1;
}
@@ -131,7 +131,7 @@ vehicle_android_callback(struct vehicle_priv *v, jobject location)
{
time_t tnow;
struct tm *tm;
- dbg(0,"enter\n");
+ dbg(1,"enter\n");
v->geo.lat = (*jnienv)->CallDoubleMethod(jnienv, location, v->Location_getLatitude);
v->geo.lng = (*jnienv)->CallDoubleMethod(jnienv, location, v->Location_getLongitude);
@@ -141,7 +141,7 @@ vehicle_android_callback(struct vehicle_priv *v, jobject location)
tnow=(*jnienv)->CallLongMethod(jnienv, location, v->Location_getTime)/1000;
tm = gmtime(&tnow);
strftime(v->fixiso8601, sizeof(v->fixiso8601), "%Y-%m-%dT%TZ", tm);
- dbg(0,"time %s\n",v->fixiso8601);
+ dbg(1,"lat %f lon %f time %s\n",v->geo.lat,v->geo.lng,v->fixiso8601);
v->have_coords=1;
callback_list_call_0(v->cbl);
}