package net.osmand.plus.views.corenative; import java.io.File; import net.osmand.IndexConstants; import net.osmand.core.android.CoreResourcesFromAndroidAssets; import net.osmand.core.android.MapRendererContext; import net.osmand.core.android.NativeCore; import net.osmand.core.jni.Logger; import net.osmand.core.jni.MapStylesCollection; import net.osmand.core.jni.ObfsCollection; import net.osmand.core.jni.QIODeviceLogSink; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.srtmplugin.SRTMPlugin; import android.content.Context; import android.util.DisplayMetrics; import android.util.Log; import android.view.WindowManager; /** * Created by Denis on 01.10.2014. */ public class NativeCoreContext { private static final String TAG = "NativeCoreContext"; private static boolean init; private static MapRendererContext mapRendererContext; public static boolean isInit() { return init; } public static boolean tryCatchInit(OsmandApplication app) { try { init(app); return true; } catch(Throwable t) { t.printStackTrace(); Log.e(TAG, "Failed to initialize", t); return false; } } public static void init(OsmandApplication app) { if (!init && NativeCore.isAvailable()) { if (!NativeCore.isLoaded()) NativeCore.load(CoreResourcesFromAndroidAssets.loadFromCurrentApplication(app)); if (NativeCore.isLoaded()) { File directory = app.getAppPath(""); Logger.get().addLogSink(QIODeviceLogSink.createFileLogSink( directory.getAbsolutePath() + "/osmandcore.log")); WindowManager mgr = (WindowManager)app.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); mgr.getDefaultDisplay().getMetrics(dm); ObfsCollection obfsCollection = new ObfsCollection(); obfsCollection.addDirectory(directory.getAbsolutePath(), false); if(OsmandPlugin.getEnabledPlugin(SRTMPlugin.class) != null) { obfsCollection.addDirectory(app.getAppPath(IndexConstants.SRTM_INDEX_DIR).getAbsolutePath(), false); } mapRendererContext = new MapRendererContext(app, dm.density); mapRendererContext.setupObfMap(new MapStylesCollection(), obfsCollection); app.getRendererRegistry().setRendererLoadedEventListener(mapRendererContext); init = true; } } } public static MapRendererContext getMapRendererContext() { return mapRendererContext; } }