diff --git a/OsmAnd/res/values-ca/strings.xml b/OsmAnd/res/values-ca/strings.xml index 80eb244fe8..4fe292a900 100644 --- a/OsmAnd/res/values-ca/strings.xml +++ b/OsmAnd/res/values-ca/strings.xml @@ -1890,17 +1890,17 @@ La llista de països inclosos (bàsicament tot el món!): Afganistan, Albània, Velocitat màxima Control de fronteres Estació de peatge - Senyal de stop + Senyal d\'stop Ressalt Càmera de control de velocitat Avís de circulació Premeu qualsevol indicació existent per veure més detalls, mantingueu premuda per desactivar o esborrar. Dades actuals al dispositiu (%1$s lliure): Definiu la mida del text en el mapa. Mida del text - Aquest nom de punt preferit ja s\'ha utilitzat + Nom de punt preferit duplicat S\'ha canviat el nom del vostre punt preferit a %1$s per evitar duplicitats. Prova de renderització nativa - Iniciar activitat amb renderització nativa - Utilitzar renderització nativa - Ús de renderitzacio C++ en comptes de Java + Inicia l\'activitat amb renderització nativa + Utilitza la renderització nativa + Ús de renderització C++ en comptes de Java diff --git a/OsmAnd/res/values-cs/strings.xml b/OsmAnd/res/values-cs/strings.xml index 32d0523aea..83f2e7b196 100644 --- a/OsmAnd/res/values-cs/strings.xml +++ b/OsmAnd/res/values-cs/strings.xml @@ -1738,4 +1738,8 @@ s často kladenými otázkami. Nastavit velikost písma na mapě. Název oblíbeného bodu je již použit Aby nevznikla duplicita, oblíbený bod byl uložen jako %1$s. + Test nativního vykreslování + Spustí činnost s nativním vykreslováním + Použít nativní vykreslování + Použít C++ vykreslování místo Javy diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index 6f6f75d082..0a11c43fd6 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -1976,4 +1976,8 @@ Afghanistan, Ägypten, Albanien, Algerien, Andorra, Angola, Anguilla, Antigua an Schriftgröße Doppelung beim Favoriten-Namen Name des Favoriten bereits vergeben, er wurde auf %1$s geändert. + Nativen Renderer testen + Nutzt den nativen Renderer + Nativen Renderer benutzen + C++ Renderer statt Java-Renderer nutzen diff --git a/OsmAnd/res/values-it/strings.xml b/OsmAnd/res/values-it/strings.xml index ffae5c6752..a0440a09b2 100644 --- a/OsmAnd/res/values-it/strings.xml +++ b/OsmAnd/res/values-it/strings.xml @@ -1991,4 +1991,10 @@ Si consiglia di aggiungere uno o più punti intermedi per migliorarne le prestaz Clicca su un oggetto per visualizzare maggiori dettagli, tieni premuto per disattivarlo o cancellarlo. Dati attualmente nel dispositivo (%1$s liberi): Imposta la dimensione del testo sulla mappa. Dimensione del testo + Prova la rappresentazione nativa + Inizia l\'attività con la rappresentazione nativa + Nome del punto preferito duplicato + Per evitare duplicati il nome del vostro punto preferito è stato modificato in %1$s. + Utilizza la rappresentazione nativa + Usa la rappresentazione C++ anziché Java diff --git a/OsmAnd/res/values-tr/strings.xml b/OsmAnd/res/values-tr/strings.xml index 71ae4ed082..5758bd9f31 100644 --- a/OsmAnd/res/values-tr/strings.xml +++ b/OsmAnd/res/values-tr/strings.xml @@ -1,4 +1,5 @@ -Değişiklik listesini kapat + +Değişiklik listesini kapat ZXing Barcode Scanner uygulaması kurulu değil. Uygulama marketinde aramak ister misiniz? Yol renk şemasını seç: Yol renk şeması @@ -353,7 +354,7 @@ Hayır, teşekkürler Sil Sd card\'tan tekrar yükle - İndiriliyor… + İndir Yeni Arama Haritadaki yer adları için yazı boyutunu seçin Harita yazı karakteri boyutu @@ -788,7 +789,7 @@ Buraya yakın ara Rotayı GPX olarak kaydet Rota \'%1$s\' olarak kaydedildi. - Dosya adı:… + "Dosya adı: " Tarifi Kaydet OSM Comunity üzerine haritaları geliştirmek için kullanılacak GPX dosyaları yükleyin. %2$d/%1$d nesne yüklendi. @@ -906,7 +907,7 @@ Eliptik izdüşümü Sona erecek (dakika) Adres - Mevcut olanı seç... + Varolanı seçin… İsim Tanımla/Düzenle… Ara noktaları temizle @@ -1204,4 +1205,4 @@ \n\t* Yeniden tasarlanmış arayüz↵ →→\n\t* Ashklat düzeltmek ↵ - \ No newline at end of file + diff --git a/OsmAnd/src/net/osmand/core/android/GLActivity.java b/OsmAnd/src/net/osmand/core/android/GLActivity.java index a6d627d426..241aad4598 100644 --- a/OsmAnd/src/net/osmand/core/android/GLActivity.java +++ b/OsmAnd/src/net/osmand/core/android/GLActivity.java @@ -14,7 +14,7 @@ import net.osmand.data.RotatedTileBox; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandSettings; import net.osmand.plus.R; -import net.osmand.plus.helpers.SimpleTwoFingerTapDetector; +import net.osmand.plus.helpers.TwoFingerTapDetector; import net.osmand.plus.render.NativeOsmandLibrary; import android.app.Activity; import android.content.Context; @@ -75,7 +75,7 @@ public class GLActivity extends Activity { } private boolean afterTwoFingerTap = false; - SimpleTwoFingerTapDetector twoFingerTapDetector = new SimpleTwoFingerTapDetector() { + TwoFingerTapDetector twoFingerTapDetector = new TwoFingerTapDetector() { @Override public void onTwoFingerTap() { afterTwoFingerTap = true; diff --git a/OsmAnd/src/net/osmand/plus/OsmandApplication.java b/OsmAnd/src/net/osmand/plus/OsmandApplication.java index 0f90105a4c..2923082cc8 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandApplication.java +++ b/OsmAnd/src/net/osmand/plus/OsmandApplication.java @@ -12,6 +12,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; +import android.os.*; +import android.view.View; import net.osmand.IndexConstants; import net.osmand.PlatformUtil; import net.osmand.access.AccessibilityPlugin; @@ -54,9 +56,6 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Configuration; import android.graphics.Shader.TileMode; import android.graphics.drawable.BitmapDrawable; -import android.os.Build; -import android.os.Handler; -import android.os.Message; import android.text.format.DateFormat; import android.util.TypedValue; import android.view.accessibility.AccessibilityManager; @@ -127,7 +126,7 @@ public class OsmandApplication extends Application { } } super.onCreate(); - new Toast(this); // activate in UI thread to avoid further exceptions + createInUiThread(); sqliteAPI = new SQLiteAPIImpl(this); try { bRouterServiceConnection = BRouterServiceConnection.connect(this); @@ -183,7 +182,20 @@ public class OsmandApplication extends Application { } - + + private void createInUiThread() { + new Toast(this); // activate in UI thread to avoid further exceptions + new AsyncTask() { + @Override + protected Void doInBackground(View... params) { + return null; + } + + protected void onPostExecute(Void result) { + } + }.execute(); + } + @Override public void onTerminate() { super.onTerminate(); diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java index a90f81a685..12aa0c7f6a 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java @@ -777,4 +777,9 @@ public class MapActivity extends AccessibleActivity { public View getLayout() { return getWindow().getDecorView().findViewById(android.R.id.content); } + + @Override + public boolean onTouchEvent(MotionEvent event) { + return mapViewController.onTouchEvent(event); + } } diff --git a/OsmAnd/src/net/osmand/plus/helpers/SimpleTwoFingerTapDetector.java b/OsmAnd/src/net/osmand/plus/helpers/TwoFingerTapDetector.java similarity index 96% rename from OsmAnd/src/net/osmand/plus/helpers/SimpleTwoFingerTapDetector.java rename to OsmAnd/src/net/osmand/plus/helpers/TwoFingerTapDetector.java index b5a7cfec73..f31fb4d8f9 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/SimpleTwoFingerTapDetector.java +++ b/OsmAnd/src/net/osmand/plus/helpers/TwoFingerTapDetector.java @@ -6,7 +6,7 @@ import android.view.ViewConfiguration; /** * Created by Barsik on 24.06.2014. */ -public abstract class SimpleTwoFingerTapDetector { +public abstract class TwoFingerTapDetector { private static final int TIMEOUT = ViewConfiguration.getTapTimeout() + 100; private long mFirstDownTime = 0; private byte mTwoFingerTapCount = 0; diff --git a/OsmAnd/src/net/osmand/plus/render/NativeCppLibrary.java b/OsmAnd/src/net/osmand/plus/render/NativeCppLibrary.java new file mode 100644 index 0000000000..20cbb7662d --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/render/NativeCppLibrary.java @@ -0,0 +1,23 @@ +package net.osmand.plus.render; + +import net.osmand.NativeLibrary; + +/** + * Created by Denis on 02.10.2014. + */ +public class NativeCppLibrary extends NativeLibrary { + + public NativeCppLibrary(boolean newLibrary) { + super(newLibrary); + } + + public static void loadLibrary(String name) { + try { + System.out.println("Loading " + name); + System.loadLibrary(name); + } catch( UnsatisfiedLinkError e ) { + System.err.println("Failed to load '"+name + "':" + e); + throw e; + } + } +} diff --git a/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java b/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java index adf8a9176d..e093344e93 100644 --- a/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java +++ b/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java @@ -23,7 +23,7 @@ import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandSettings; import net.osmand.plus.R; -import net.osmand.plus.helpers.SimpleTwoFingerTapDetector; +import net.osmand.plus.helpers.TwoFingerTapDetector; import net.osmand.plus.views.MultiTouchSupport.MultiTouchZoomListener; import net.osmand.plus.views.OsmandMapLayer.DrawSettings; import net.osmand.plus.views.controllers.JavaViewController; @@ -81,9 +81,6 @@ public class OsmandMapTileView extends SurfaceView implements IMapDownloaderCall protected static final int emptyTileDivisor = 16; - - - public interface OnLongClickListener { public boolean onLongPressEvent(PointF point); } @@ -148,7 +145,7 @@ public class OsmandMapTileView extends SurfaceView implements IMapDownloaderCall private Paint paintImg; private boolean afterTwoFingerTap = false; - SimpleTwoFingerTapDetector twoFingerTapDetector = new SimpleTwoFingerTapDetector() { + TwoFingerTapDetector twoFingerTapDetector = new TwoFingerTapDetector() { @Override public void onTwoFingerTap() { afterTwoFingerTap = true; diff --git a/OsmAnd/src/net/osmand/plus/views/controllers/JavaViewController.java b/OsmAnd/src/net/osmand/plus/views/controllers/JavaViewController.java index 191b4217e2..d21e61674c 100644 --- a/OsmAnd/src/net/osmand/plus/views/controllers/JavaViewController.java +++ b/OsmAnd/src/net/osmand/plus/views/controllers/JavaViewController.java @@ -24,7 +24,6 @@ import java.util.List; * Created by Натали on 29.09.2014. */ public class JavaViewController extends MapViewBaseController { - private GLSurfaceView glSurfaceView; private OsmandMapTileView mapTileView; private OsmandSettings settings; private MapActivity mapActivity; diff --git a/OsmAnd/src/net/osmand/plus/views/controllers/NativeViewController.java b/OsmAnd/src/net/osmand/plus/views/controllers/NativeViewController.java index e42bdb9b0e..33502ab7c0 100644 --- a/OsmAnd/src/net/osmand/plus/views/controllers/NativeViewController.java +++ b/OsmAnd/src/net/osmand/plus/views/controllers/NativeViewController.java @@ -22,7 +22,8 @@ import net.osmand.plus.OsmandSettings; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.MapActivityLayers; import net.osmand.plus.base.MapViewTrackingUtilities; -import net.osmand.plus.helpers.SimpleTwoFingerTapDetector; +import net.osmand.plus.helpers.TwoFingerTapDetector; +import net.osmand.plus.render.NativeCppLibrary; import net.osmand.plus.render.NativeOsmandLibrary; import net.osmand.plus.views.OsmandMapLayer; import net.osmand.plus.views.OsmandMapTileView; @@ -36,14 +37,6 @@ import java.util.List; */ public class NativeViewController extends MapViewBaseController { - static { - NativeOsmandLibrary.loadLibrary("gnustl_shared"); - NativeOsmandLibrary.loadLibrary("Qt5Core"); - NativeOsmandLibrary.loadLibrary("Qt5Network"); - NativeOsmandLibrary.loadLibrary("Qt5Sql"); - NativeOsmandLibrary.loadLibrary("OsmAndCoreWithJNI"); - } - private GLSurfaceView glSurfaceView; private OsmandSettings settings; private MapActivity mapActivity; @@ -74,7 +67,7 @@ public class NativeViewController extends MapViewBaseController { public static final String NATIVE_TAG = "NativeRender"; private CoreResourcesFromAndroidAssetsCustom coreResources; - SimpleTwoFingerTapDetector twoFingerTapDetector = new SimpleTwoFingerTapDetector() { + TwoFingerTapDetector twoFingerTapDetector = new TwoFingerTapDetector() { @Override public void onTwoFingerTap() { currentViewport.setZoom(currentViewport.getZoom() - 1); @@ -87,9 +80,18 @@ public class NativeViewController extends MapViewBaseController { this.glSurfaceView = surfaceView; this.settings = activity.getMyApplication().getSettings(); this.mapActivity = activity; + loadLibraries(); setupView(); } + private void loadLibraries() { + NativeCppLibrary.loadLibrary("gnustl_shared"); + NativeCppLibrary.loadLibrary("Qt5Core"); + NativeCppLibrary.loadLibrary("Qt5Network"); + NativeCppLibrary.loadLibrary("Qt5Sql"); + NativeCppLibrary.loadLibrary("OsmAndCoreWithJNI"); + } + private void setupView() { WindowManager mgr = (WindowManager)mapActivity.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); @@ -252,8 +254,8 @@ public class NativeViewController extends MapViewBaseController { } private class EGLContextFactory implements GLSurfaceView.EGLContextFactory { - private EGLContext _gpuWorkerContext; - private EGLSurface _gpuWorkerFakeSurface; + private EGLContext gpuWorkerContext; + private EGLSurface gpuWorkerFakeSurface; public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig) { final String eglExtensions = egl.eglQueryString(display, EGL10.EGL_EXTENSIONS); @@ -280,7 +282,7 @@ public class NativeViewController extends MapViewBaseController { Log.i(NATIVE_TAG, "Creating GPU worker context..."); try { - _gpuWorkerContext = egl.eglCreateContext( + gpuWorkerContext = egl.eglCreateContext( display, eglConfig, mainContext, @@ -288,13 +290,13 @@ public class NativeViewController extends MapViewBaseController { } catch (Exception e) { Log.e(NATIVE_TAG, "Failed to create GPU worker context", e); } - if (_gpuWorkerContext == null || _gpuWorkerContext == EGL10.EGL_NO_CONTEXT) + if (gpuWorkerContext == null || gpuWorkerContext == EGL10.EGL_NO_CONTEXT) { Log.e(NATIVE_TAG, "Failed to create GPU worker context: " + egl.eglGetError()); - _gpuWorkerContext = null; + gpuWorkerContext = null; } - if (_gpuWorkerContext != null) + if (gpuWorkerContext != null) { Log.i(NATIVE_TAG, "Creating GPU worker fake surface..."); try { @@ -302,21 +304,21 @@ public class NativeViewController extends MapViewBaseController { EGL10.EGL_WIDTH, 1, EGL10.EGL_HEIGHT, 1, EGL10.EGL_NONE }; - _gpuWorkerFakeSurface = egl.eglCreatePbufferSurface(display, eglConfig, surfaceAttribList); + gpuWorkerFakeSurface = egl.eglCreatePbufferSurface(display, eglConfig, surfaceAttribList); } catch (Exception e) { Log.e(NATIVE_TAG, "Failed to create GPU worker fake surface", e); } - if (_gpuWorkerFakeSurface == null || _gpuWorkerFakeSurface == EGL10.EGL_NO_SURFACE) + if (gpuWorkerFakeSurface == null || gpuWorkerFakeSurface == EGL10.EGL_NO_SURFACE) { Log.e(NATIVE_TAG, "Failed to create GPU worker fake surface: " + egl.eglGetError()); - _gpuWorkerFakeSurface = null; + gpuWorkerFakeSurface = null; } } MapRendererSetupOptions rendererSetupOptions = new MapRendererSetupOptions(); - if (_gpuWorkerContext != null && _gpuWorkerFakeSurface != null) { + if (gpuWorkerContext != null && gpuWorkerFakeSurface != null) { rendererSetupOptions.setGpuWorkerThreadEnabled(true); - gpuWorkerThreadPrologue = new GpuWorkerThreadPrologue(egl, display, _gpuWorkerContext, _gpuWorkerFakeSurface); + gpuWorkerThreadPrologue = new GpuWorkerThreadPrologue(egl, display, gpuWorkerContext, gpuWorkerFakeSurface); rendererSetupOptions.setGpuWorkerThreadPrologue(gpuWorkerThreadPrologue.getBinding()); gpuWorkerThreadEpilogue = new GpuWorkerThreadEpilogue(egl); rendererSetupOptions.setGpuWorkerThreadEpilogue(gpuWorkerThreadEpilogue.getBinding()); @@ -333,14 +335,14 @@ public class NativeViewController extends MapViewBaseController { public void destroyContext(EGL10 egl, EGLDisplay display, EGLContext context) { egl.eglDestroyContext(display, context); - if (_gpuWorkerContext != null) { - egl.eglDestroyContext(display, _gpuWorkerContext); - _gpuWorkerContext = null; + if (gpuWorkerContext != null) { + egl.eglDestroyContext(display, gpuWorkerContext); + gpuWorkerContext = null; } - if (_gpuWorkerFakeSurface != null) { - egl.eglDestroySurface(display, _gpuWorkerFakeSurface); - _gpuWorkerFakeSurface = null; + if (gpuWorkerFakeSurface != null) { + egl.eglDestroySurface(display, gpuWorkerFakeSurface); + gpuWorkerFakeSurface = null; } } }