diff options
author | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2009-08-12 23:10:50 +0000 |
---|---|---|
committer | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2009-08-12 23:10:50 +0000 |
commit | 68b4f6b3258f15f73d439a2eb36a1f91902aeb90 (patch) | |
tree | 9b45cbeda39b9cdab2f35379a0fe7961ba58c6b3 /navit | |
parent | 53721fa8df523400333a79a218899a9a3de793d2 (diff) | |
download | navit-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.c | 9 | ||||
-rw-r--r-- | navit/android/AndroidManifest.xml | 1 | ||||
-rw-r--r-- | navit/android/src/org/navitproject/navit/Navit.java | 16 | ||||
-rw-r--r-- | navit/android/src/org/navitproject/navit/NavitGraphics.java | 4 | ||||
-rw-r--r-- | navit/android/src/org/navitproject/navit/NavitIdle.java | 53 | ||||
-rw-r--r-- | navit/graphics/android/graphics_android.c | 74 | ||||
-rw-r--r-- | navit/vehicle/android/vehicle_android.c | 8 |
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); } |