From 7be774644ee513aaf3b469d11e8c389f686b7295 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Fri, 13 Mar 2015 22:03:38 +0100 Subject: [PATCH] Fix init of new core --- .../osmand/plus/activities/MapActivity.java | 10 ++-- .../plus/views/OsmAndMapLayersView.java | 22 +++++--- .../plus/views/OsmAndMapSurfaceView.java | 50 +++++++++++++++---- .../osmand/plus/views/OsmandMapTileView.java | 47 +++++++++-------- 4 files changed, 86 insertions(+), 43 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java index 7e06d9f8e0..8000234543 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java @@ -58,7 +58,6 @@ import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.media.AudioManager; import android.net.Uri; @@ -140,12 +139,14 @@ public class MapActivity extends AccessibleActivity { // Full screen is not used here // getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.main); + + mapView = new OsmandMapTileView(); + mapView.init(this); mapActions = new MapActivityActions(this); mapLayers = new MapActivityLayers(this); if (mapViewTrackingUtilities == null) { mapViewTrackingUtilities = new MapViewTrackingUtilities(app); } - dashboardOnMap.createDashboardView(); if (app.isApplicationInitializing() || DashboardOnMap.staticVisible) { dashboardOnMap.setDashboardVisibility(true); @@ -188,8 +189,7 @@ public class MapActivity extends AccessibleActivity { OsmAndMapSurfaceView surf = (OsmAndMapSurfaceView) findViewById(R.id.MapView); surf.setVisibility(View.VISIBLE); - mapView = surf.getMapView(); - + surf.setMapView(mapView); mapView.setTrackBallDelegate(new OsmandMapTileView.OnTrackBallListener() { @Override public boolean onTrackBallEvent(MotionEvent e) { @@ -254,7 +254,7 @@ public class MapActivity extends AccessibleActivity { atlasMapRendererView.setAzimuth(0); atlasMapRendererView.setElevationAngle(90); NativeCoreContext.getMapRendererContext().setMapRendererView(atlasMapRendererView); - mapView = ml.getMapView(); + ml.setMapView(mapView); mapViewTrackingUtilities.setMapView(mapView); mapView.setMapRender(atlasMapRendererView); OsmAndMapSurfaceView surf = (OsmAndMapSurfaceView) findViewById(R.id.MapView); diff --git a/OsmAnd/src/net/osmand/plus/views/OsmAndMapLayersView.java b/OsmAnd/src/net/osmand/plus/views/OsmAndMapLayersView.java index ca3dd7e2e8..d21ced8e20 100644 --- a/OsmAnd/src/net/osmand/plus/views/OsmAndMapLayersView.java +++ b/OsmAnd/src/net/osmand/plus/views/OsmAndMapLayersView.java @@ -14,22 +14,23 @@ public class OsmAndMapLayersView extends View { public OsmAndMapLayersView(Context context, AttributeSet attrs) { super(context, attrs); - init(); } public OsmAndMapLayersView(Context context) { super(context); - init(); } - - private void init() { - mapView = new OsmandMapTileView(); - mapView.initView(this); + + public void setMapView(OsmandMapTileView mapView) { + this.mapView = mapView; + mapView.setView(this); } @Override public boolean onTrackballEvent(MotionEvent event) { + if(mapView == null) { + return super.onTrackballEvent(event); + } Boolean r = mapView.onTrackballEvent(event); if(r == null) { return super.onTrackballEvent(event); @@ -39,6 +40,9 @@ public class OsmAndMapLayersView extends View { @Override public boolean onKeyDown(int keyCode, KeyEvent event) { + if(mapView == null) { + return super.onKeyDown(keyCode, event); + } Boolean r = mapView.onKeyDown(keyCode, event); if(r == null) { return super.onKeyDown(keyCode, event); @@ -48,11 +52,17 @@ public class OsmAndMapLayersView extends View { @Override public boolean onTouchEvent(MotionEvent event) { + if(mapView == null) { + return super.onTouchEvent(event); + } return mapView.onTouchEvent(event); } @Override protected void onDraw(Canvas canvas) { + if(mapView == null) { + return; + } boolean nightMode = mapView.getApplication().getDaynightHelper().isNightMode(); DrawSettings drawSettings = new DrawSettings(nightMode, false); mapView.drawOverMap(canvas, mapView.getCurrentRotatedTileBox().copy(), drawSettings); diff --git a/OsmAnd/src/net/osmand/plus/views/OsmAndMapSurfaceView.java b/OsmAnd/src/net/osmand/plus/views/OsmAndMapSurfaceView.java index 845f5096f3..844628b4b7 100644 --- a/OsmAnd/src/net/osmand/plus/views/OsmAndMapSurfaceView.java +++ b/OsmAnd/src/net/osmand/plus/views/OsmAndMapSurfaceView.java @@ -1,6 +1,8 @@ package net.osmand.plus.views; +import net.osmand.plus.views.OsmandMapLayer.DrawSettings; import android.content.Context; +import android.graphics.Canvas; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.MotionEvent; @@ -23,29 +25,49 @@ public class OsmAndMapSurfaceView extends SurfaceView implements Callback { super(context); init(); } + + @Override + public void setOnClickListener(OnClickListener l) { + super.setOnClickListener(l); + this.onClickListener = l; + } + private void init() { getHolder().addCallback(this); - mapView = new OsmandMapTileView(); - mapView.initView(this); } + @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { - mapView.refreshMap(); + if(mapView != null) { + mapView.refreshMap(); + } } @Override public void surfaceCreated(SurfaceHolder holder) { - mapView.refreshMap(); + if(mapView != null) { + mapView.refreshMap(); + } } @Override public void surfaceDestroyed(SurfaceHolder holder) { } + + + public void setMapView(OsmandMapTileView mapView) { + this.mapView = mapView; + mapView.setView(this); + } + @Override public boolean onTrackballEvent(MotionEvent event) { + if(mapView == null) { + return super.onTrackballEvent(event); + } Boolean r = mapView.onTrackballEvent(event); if(r == null) { return super.onTrackballEvent(event); @@ -53,13 +75,11 @@ public class OsmAndMapSurfaceView extends SurfaceView implements Callback { return r; } - @Override - public void setOnClickListener(OnClickListener l) { - super.setOnClickListener(l); - this.onClickListener = l; - } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { + if(mapView == null) { + return super.onKeyDown(keyCode, event); + } Boolean r = mapView.onKeyDown(keyCode, event); if(r == null) { return super.onKeyDown(keyCode, event); @@ -69,12 +89,22 @@ public class OsmAndMapSurfaceView extends SurfaceView implements Callback { @Override public boolean onTouchEvent(MotionEvent event) { - if(onClickListener != null) { + if(mapView == null) { return super.onTouchEvent(event); } return mapView.onTouchEvent(event); } + @Override + protected void onDraw(Canvas canvas) { + if(mapView == null) { + return; + } + boolean nightMode = mapView.getApplication().getDaynightHelper().isNightMode(); + DrawSettings drawSettings = new DrawSettings(nightMode, false); + mapView.drawOverMap(canvas, mapView.getCurrentRotatedTileBox().copy(), drawSettings); + } + public OsmandMapTileView getMapView() { return mapView; diff --git a/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java b/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java index 70003988db..61a5f5922c 100644 --- a/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java +++ b/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java @@ -173,9 +173,8 @@ public class OsmandMapTileView implements IMapDownloaderCallback { // ///////////////////////////// INITIALIZING UI PART /////////////////////////////////// - public void initView(View view) { - application = (OsmandApplication) view.getContext().getApplicationContext(); - this.view = view; + public void init(Context ctx) { + application = (OsmandApplication) ctx.getApplicationContext(); paintGrayFill = new Paint(); paintGrayFill.setColor(Color.GRAY); paintGrayFill.setStyle(Style.FILL); @@ -204,28 +203,27 @@ public class OsmandMapTileView implements IMapDownloaderCallback { paintImg.setFilterBitmap(true); // paintImg.setDither(true); - view.setClickable(true); - view.setLongClickable(true); - view.setFocusable(true); - - handler = new Handler(); - baseHandler = new Handler(application.getResourceManager().getRenderingBufferImageThread().getLooper()); - animatedDraggingThread = new AnimateDraggingMapThread(this); - gestureDetector = new GestureDetector(view.getContext(), new MapExplorer(this, new MapTileViewOnGestureListener())); - multiTouchSupport = new MultiTouchSupport(view.getContext(), new MapTileViewMultiTouchZoomListener()); + gestureDetector = new GestureDetector(ctx, new MapExplorer(this, new MapTileViewOnGestureListener())); + multiTouchSupport = new MultiTouchSupport(ctx, new MapTileViewMultiTouchZoomListener()); gestureDetector.setOnDoubleTapListener(new MapTileViewOnDoubleTapListener()); - WindowManager mgr = (WindowManager) view.getContext().getSystemService(Context.WINDOW_SERVICE); + WindowManager mgr = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); dm = new DisplayMetrics(); mgr.getDefaultDisplay().getMetrics(dm); currentViewport = new RotatedTileBox.RotatedTileBoxBuilder(). - setLocation(0, 0).setZoom(3).setPixelDimensions(view.getWidth(), view.getHeight()).build(); + setLocation(0, 0).setZoom(3).setPixelDimensions(100, 100).build(); currentViewport.setDensity(dm.density); currentViewport.setMapDensity(getSettingsMapDensity()); - + } + + public void setView(View view) { + this.view = view; + view.setClickable(true); + view.setLongClickable(true); + view.setFocusable(true); } public Boolean onKeyDown(int keyCode, KeyEvent event) { @@ -469,6 +467,9 @@ public class OsmandMapTileView implements IMapDownloaderCallback { } private void refreshMapInternal(DrawSettings drawSettings) { + if(view == null) { + return; + } final float ratioy = mapPosition == OsmandSettings.BOTTOM_CONSTANT ? 0.85f : 0.5f; final int cy = (int) (ratioy * view.getHeight()); if (currentViewport.getPixWidth() != view.getWidth() || currentViewport.getPixHeight() != view.getHeight() || @@ -605,7 +606,7 @@ public class OsmandMapTileView implements IMapDownloaderCallback { // this method could be called in non UI thread public void refreshMap(final boolean updateVectorRendering) { - if (view.isShown()) { + if (view != null && view.isShown()) { boolean nightMode = application.getDaynightHelper().isNightMode(); DrawSettings drawSettings = new DrawSettings(nightMode, updateVectorRendering); sendRefreshMapMsg(drawSettings, 20); @@ -785,7 +786,7 @@ public class OsmandMapTileView implements IMapDownloaderCallback { handler.post(new Runnable() { @Override public void run() { - AccessibleToast.makeText(view.getContext(), msg, Toast.LENGTH_SHORT).show(); //$NON-NLS-1$ + AccessibleToast.makeText(application, msg, Toast.LENGTH_SHORT).show(); //$NON-NLS-1$ } }); } @@ -815,7 +816,7 @@ public class OsmandMapTileView implements IMapDownloaderCallback { final int newZoom = getZoom(); if (application.accessibilityEnabled()) { if (newZoom != initialViewport.getZoom()) { - showMessage(view.getContext().getString(R.string.zoomIs) + " " + newZoom); //$NON-NLS-1$ + showMessage(application.getString(R.string.zoomIs) + " " + newZoom); //$NON-NLS-1$ } else { final LatLon p1 = initialViewport.getLatLonFromPixel(x1, y1); final LatLon p2 = initialViewport.getLatLonFromPixel(x2, y2); @@ -977,12 +978,14 @@ public class OsmandMapTileView implements IMapDownloaderCallback { } - public Context getContext() { - return view.getContext(); - } + public Resources getResources() { - return view.getResources(); + return application.getResources(); + } + + public Context getContext() { + return view.getContext(); } public ViewParent getParent() {