Fix:Core:Android cleanups
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Wed, 25 Nov 2009 22:13:08 +0000 (22:13 +0000)
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Wed, 25 Nov 2009 22:13:08 +0000 (22:13 +0000)
git-svn-id: https://navit.svn.sourceforge.net/svnroot/navit/trunk@2798 ffa7fe5e-494d-0410-b361-a75ebd5db220

navit/navit/android/src/org/navitproject/navit/NavitGraphics.java
navit/navit/attr_def.h
navit/navit/graphics/android/graphics_android.c
navit/navit/navit.c
navit/navit/plugin.c

index 734777f..9e91879 100644 (file)
@@ -52,8 +52,21 @@ public class NavitGraphics {
        float trackball_x,trackball_y;
        View view;
        RelativeLayout relativelayout;
+       NavitCamera camera;
+       Activity activity;
+
+       public void
+       SetCamera(int use_camera)
+       {
+               if (use_camera != 0 && camera == null) {
+                       // activity.requestWindowFeature(Window.FEATURE_NO_TITLE);
+                       camera=new NavitCamera(activity);
+                       relativelayout.addView(camera);
+               }
+       }
        public NavitGraphics(Activity activity, NavitGraphics parent, int x, int y, int w, int h, int alpha, int wraparound, int use_camera) {
                if (parent == null) {
+                       this.activity=activity;
                        view=new View(activity) {
        @Override protected void onDraw(Canvas canvas)
        {
@@ -193,16 +206,12 @@ public class NavitGraphics {
                        };
                        view.setFocusable(true);
                        view.setFocusableInTouchMode(true);
+                       relativelayout=new RelativeLayout(activity);
                        if (use_camera != 0) {
-                               activity.requestWindowFeature(Window.FEATURE_NO_TITLE);
-                               relativelayout=new RelativeLayout(activity);
-                               NavitCamera camera=new NavitCamera(activity);
-                               relativelayout.addView(camera);
-                               relativelayout.addView(view);
-                               activity.setContentView(relativelayout);
-                       } else {
-                               activity.setContentView(view);
+                               SetCamera(use_camera);
                        }
+                       relativelayout.addView(view);
+                       activity.setContentView(relativelayout);
                        view.requestFocus();
                } else {
                        draw_bitmap=Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
index b6f8684..fcb82b6 100644 (file)
@@ -128,6 +128,7 @@ ATTR(hog)
 ATTR(flags_town)
 ATTR(flags_street)
 ATTR(flags_house_number)
+ATTR(use_camera)
 ATTR2(0x00027500,type_rel_abs_begin)
 /* These attributes are int that can either hold relative              *
  * or absolute values. A relative value is indicated by                *
index 43af6ae..11ace92 100644 (file)
@@ -34,7 +34,7 @@ int dummy;
 
 struct graphics_priv {
        jclass NavitGraphicsClass;
-       jmethodID NavitGraphics_draw_polyline, NavitGraphics_draw_polygon, NavitGraphics_draw_rectangle, NavitGraphics_draw_circle, NavitGraphics_draw_text, NavitGraphics_draw_image, NavitGraphics_draw_mode, NavitGraphics_draw_drag, NavitGraphics_overlay_disable, NavitGraphics_overlay_resize;
+       jmethodID NavitGraphics_draw_polyline, NavitGraphics_draw_polygon, NavitGraphics_draw_rectangle, NavitGraphics_draw_circle, NavitGraphics_draw_text, NavitGraphics_draw_image, NavitGraphics_draw_mode, NavitGraphics_draw_drag, NavitGraphics_overlay_disable, NavitGraphics_overlay_resize, NavitGraphics_SetCamera;
 
        jclass PaintClass;
        jmethodID Paint_init,Paint_setStrokeWidth,Paint_setARGB;
@@ -374,6 +374,18 @@ static void overlay_resize(struct graphics_priv *gra, struct point *pnt, int w,
        (*jnienv)->CallVoidMethod(jnienv, gra->NavitGraphics, gra->NavitGraphics_overlay_resize, pnt ? pnt->x:0 , pnt ? pnt->y:0, w, h, alpha, wraparound);
 }
 
+static int
+set_attr(struct graphics_priv *gra, struct attr *attr)
+{
+       switch (attr->type) {
+       case attr_use_camera:
+               (*jnienv)->CallVoidMethod(jnienv, gra->NavitGraphics, gra->NavitGraphics_SetCamera, attr->u.num);
+               return 1;
+       default:
+               return 0;
+       }
+}
+
 static struct graphics_methods graphics_methods = {
        graphics_destroy,
        draw_mode,
@@ -396,6 +408,7 @@ static struct graphics_methods graphics_methods = {
        get_text_bbox,
        overlay_disable,
        overlay_resize,
+       set_attr,
 };
 
 static void
@@ -456,7 +469,7 @@ set_activity(jobject graphics)
 }
 
 static int
-graphics_android_init(struct graphics_priv *ret, struct graphics_priv *parent, struct point *pnt, int w, int h, int alpha, int wraparound)
+graphics_android_init(struct graphics_priv *ret, struct graphics_priv *parent, struct point *pnt, int w, int h, int alpha, int wraparound, int use_camera)
 {
        struct callback *cb;
        jmethodID cid;
@@ -508,7 +521,7 @@ graphics_android_init(struct graphics_priv *ret, struct graphics_priv *parent, s
                return 0; /* exception thrown */
        }
        dbg(0,"at 4 android_activity=%p\n",android_activity);
-       ret->NavitGraphics=(*jnienv)->NewObject(jnienv, ret->NavitGraphicsClass, cid, android_activity, parent ? parent->NavitGraphics : NULL, pnt ? pnt->x:0 , pnt ? pnt->y:0, w, h, alpha, wraparound, 0);
+       ret->NavitGraphics=(*jnienv)->NewObject(jnienv, ret->NavitGraphicsClass, cid, android_activity, parent ? parent->NavitGraphics : NULL, pnt ? pnt->x:0 , pnt ? pnt->y:0, w, h, alpha, wraparound, use_camera);
        dbg(0,"result=%p\n",ret->NavitGraphics);
        if (ret->NavitGraphics)
                (*jnienv)->NewGlobalRef(jnienv, ret->NavitGraphics);
@@ -565,6 +578,8 @@ graphics_android_init(struct graphics_priv *ret, struct graphics_priv *parent, s
                return 0;
        if (!find_method(ret->NavitGraphicsClass, "overlay_resize", "(IIIIII)V", &ret->NavitGraphics_overlay_resize))
                return 0;
+       if (!find_method(ret->NavitGraphicsClass, "SetCamera", "(I)V", &ret->NavitGraphics_SetCamera))
+               return 0;
 #if 0
        set_activity(ret->NavitGraphics);
 #endif
@@ -593,6 +608,8 @@ static struct graphics_priv *
 graphics_android_new(struct navit *nav, struct graphics_methods *meth, struct attr **attrs, struct callback_list *cbl)
 {
        struct graphics_priv *ret;
+       struct attr *attr;
+       int use_camera=0;
        if (!event_request_system("android","graphics_android"))
                return NULL;
        ret=g_new0(struct graphics_priv, 1);
@@ -602,7 +619,10 @@ graphics_android_new(struct navit *nav, struct graphics_methods *meth, struct at
        ret->win.priv=ret;
        ret->win.fullscreen=graphics_android_fullscreen;
        ret->win.disable_suspend=graphics_android_disable_suspend;
-       if (graphics_android_init(ret, NULL, NULL, 0, 0, 0, 0)) {
+       if ((attr=attr_search(attrs, NULL, attr_use_camera))) {
+               use_camera=attr->u.num;
+       }
+       if (graphics_android_init(ret, NULL, NULL, 0, 0, 0, 0, use_camera)) {
                dbg(0,"returning %p\n",ret);
                return ret;
        } else {
@@ -616,7 +636,7 @@ overlay_new(struct graphics_priv *gr, struct graphics_methods *meth, struct poin
 {
        struct graphics_priv *ret=g_new0(struct graphics_priv, 1);
        *meth=graphics_methods;
-       if (graphics_android_init(ret, gr, p, w, h, alpha, wraparound)) {
+       if (graphics_android_init(ret, gr, p, w, h, alpha, wraparound, 0)) {
                dbg(0,"returning %p\n",ret);
                return ret;
        } else {
index 1a64b38..9c8475f 100644 (file)
@@ -1670,8 +1670,10 @@ navit_set_attr_do(struct navit *this_, struct attr *attr, int init)
                        }
                        transform_set_yaw(this_->trans, dir);
                        if (orient_old != this_->orientation) {
+#if 0
                                if (this_->ready == 3)
                                        navit_draw(this_);
+#endif
                                attr_updated=1;
                        }
                }
index f2bbdc9..991eb50 100644 (file)
@@ -267,6 +267,8 @@ plugin_new(struct attr *parent, struct attr **attrs) {
                        if (!pls && active) {
                                if (!plugin_load(pl)) 
                                        plugin_set_active(pl, 0);
+                               else
+                                       plugin_call_init(pl);
                        }
                }
                file_wordexp_destroy(we);