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; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; import android.view.SurfaceView; public class OsmAndMapSurfaceView extends SurfaceView implements Callback { private OsmandMapTileView mapView; private OnClickListener onClickListener; public OsmAndMapSurfaceView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public OsmAndMapSurfaceView(Context context) { super(context); init(); } @Override public void setOnClickListener(OnClickListener l) { super.setOnClickListener(l); this.onClickListener = l; } private void init() { getHolder().addCallback(this); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { if(mapView != null) { mapView.refreshMap(); } } @Override public void surfaceCreated(SurfaceHolder holder) { 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); } return r; } @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); } return r; } @Override public boolean onGenericMotionEvent(MotionEvent event) { if(mapView == null) { return super.onGenericMotionEvent(event); } return mapView.onGenericMotionEvent(event); } @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); } public OsmandMapTileView getMapView() { return mapView; } }