Refactor startup
This commit is contained in:
parent
3007fa5a91
commit
2ed43c34e1
18 changed files with 644 additions and 488 deletions
|
@ -36,6 +36,14 @@ public class MapPoiTypes {
|
|||
public String getTranslation(AbstractPoiType type);
|
||||
}
|
||||
|
||||
public static MapPoiTypes getDefaultNoInit() {
|
||||
if(DEFAULT_INSTANCE == null){
|
||||
DEFAULT_INSTANCE = new MapPoiTypes(null);
|
||||
}
|
||||
return DEFAULT_INSTANCE;
|
||||
}
|
||||
|
||||
|
||||
public static MapPoiTypes getDefault() {
|
||||
if(DEFAULT_INSTANCE == null){
|
||||
DEFAULT_INSTANCE = new MapPoiTypes(null);
|
||||
|
@ -43,13 +51,6 @@ public class MapPoiTypes {
|
|||
}
|
||||
return DEFAULT_INSTANCE;
|
||||
}
|
||||
|
||||
|
||||
public static MapPoiTypes initDefault(PoiTranslator pt) {
|
||||
MapPoiTypes df = getDefault();
|
||||
df.setPoiTranslator(pt);
|
||||
return df;
|
||||
}
|
||||
|
||||
|
||||
public PoiCategory getOtherPoiCategory() {
|
||||
|
@ -120,7 +121,7 @@ public class MapPoiTypes {
|
|||
}
|
||||
|
||||
|
||||
protected void init(){
|
||||
public void init(){
|
||||
InputStream is;
|
||||
try {
|
||||
if(resourceName == null){
|
||||
|
|
|
@ -1,56 +1,114 @@
|
|||
package net.osmand.plus;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Random;
|
||||
|
||||
import net.osmand.IProgress;
|
||||
import net.osmand.IndexConstants;
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.access.AccessibleAlertBuilder;
|
||||
import net.osmand.map.OsmandRegions;
|
||||
import net.osmand.osm.AbstractPoiType;
|
||||
import net.osmand.osm.MapPoiTypes;
|
||||
import net.osmand.plus.activities.DayNightHelper;
|
||||
import net.osmand.plus.activities.HelpActivity;
|
||||
import net.osmand.plus.activities.SavingTrackHelper;
|
||||
import net.osmand.plus.download.DownloadActivity;
|
||||
import net.osmand.plus.helpers.AvoidSpecificRoads;
|
||||
import net.osmand.plus.helpers.WaypointHelper;
|
||||
import net.osmand.plus.monitoring.LiveMonitoringHelper;
|
||||
import net.osmand.plus.poi.PoiFiltersHelper;
|
||||
import net.osmand.plus.render.MapRenderRepositories;
|
||||
import net.osmand.plus.render.NativeOsmandLibrary;
|
||||
import net.osmand.plus.render.RendererRegistry;
|
||||
import net.osmand.plus.resources.ResourceManager;
|
||||
import net.osmand.plus.routing.RoutingHelper;
|
||||
import net.osmand.plus.views.corenative.NativeCoreContext;
|
||||
import net.osmand.plus.voice.CommandPlayerException;
|
||||
import net.osmand.plus.voice.CommandPlayerFactory;
|
||||
import net.osmand.render.RenderingRulesStorage;
|
||||
import net.osmand.router.RoutingConfiguration;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import net.osmand.access.AccessibleAlertBuilder;
|
||||
import net.osmand.plus.activities.HelpActivity;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.activities.TipsAndTricksActivity;
|
||||
import net.osmand.plus.download.DownloadActivity;
|
||||
import net.osmand.plus.render.MapRenderRepositories;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Random;
|
||||
import btools.routingapp.BRouterServiceConnection;
|
||||
|
||||
/**
|
||||
* Created by Denis
|
||||
* on 03.03.15.
|
||||
*/
|
||||
public class AppInitializer {
|
||||
public class AppInitializer implements IProgress {
|
||||
|
||||
public static final boolean TIPS_AND_TRICKS = false;
|
||||
private static final String FIRST_TIME_APP_RUN = "FIRST_TIME_APP_RUN"; //$NON-NLS-1$
|
||||
private static final String VECTOR_INDEXES_CHECK = "VECTOR_INDEXES_CHECK"; //$NON-NLS-1$
|
||||
private static final String TIPS_SHOW = "TIPS_SHOW"; //$NON-NLS-1$
|
||||
private static final String VERSION_INSTALLED = "VERSION_INSTALLED"; //$NON-NLS-1$
|
||||
private static final String EXCEPTION_FILE_SIZE = "EXCEPTION_FS"; //$NON-NLS-1$
|
||||
|
||||
public static final String LATEST_CHANGES_URL = "changes-1.9.html";
|
||||
public static final int APP_EXIT_CODE = 4;
|
||||
public static final String APP_EXIT_KEY = "APP_EXIT_KEY";
|
||||
|
||||
|
||||
public boolean initApp(final Activity activity, OsmandApplication app) {
|
||||
final OsmAndAppCustomization appCustomization = app.getAppCustomization();
|
||||
// restore follow route mode
|
||||
if (app.getSettings().FOLLOW_THE_ROUTE.get() && !app.getRoutingHelper().isRouteCalculated()) {
|
||||
if(!(activity instanceof MapActivity)) {
|
||||
startMapActivity(activity);
|
||||
}
|
||||
return false;
|
||||
private OsmandApplication app;
|
||||
private static final org.apache.commons.logging.Log LOG = PlatformUtil.getLog(AppInitializer.class);
|
||||
|
||||
private boolean initSettings = false;
|
||||
private boolean firstTime;
|
||||
private boolean appVersionChanged;
|
||||
private long startTime;
|
||||
private long startBgTime;
|
||||
private boolean appInitializing = true;
|
||||
private List<String> warnings = new ArrayList<String>();
|
||||
private String taskName;
|
||||
private List<AppInitializeListener> listeners = new ArrayList<AppInitializer.AppInitializeListener>();
|
||||
|
||||
public enum InitEvents {
|
||||
FAVORITES_INITIALIZED, NATIVE_INITIALIZED, TASK_CHANGED, MAPS_INITIALIZED, POI_TYPES_INITIALIZED, ASSETS_COPIED, INIT_RENDERERS, RESTORE_BACKUPS, INDEX_REGION_BOUNDARIES, SAVE_GPX_TRACKS, LOAD_GPX_TRACKS;
|
||||
}
|
||||
|
||||
public interface AppInitializeListener {
|
||||
|
||||
public void onProgress(AppInitializer init, InitEvents event);
|
||||
|
||||
public void onFinish(AppInitializer init);
|
||||
}
|
||||
|
||||
|
||||
public AppInitializer(OsmandApplication app) {
|
||||
this.app = app;
|
||||
}
|
||||
|
||||
|
||||
public List<String> getWarnings() {
|
||||
return warnings;
|
||||
}
|
||||
|
||||
public boolean isAppInitializing() {
|
||||
return appInitializing;
|
||||
}
|
||||
|
||||
|
||||
private void initUiVars(Activity activity) {
|
||||
if(initSettings) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
boolean firstTime = false;
|
||||
SharedPreferences pref = activity.getPreferences(Context.MODE_WORLD_WRITEABLE);
|
||||
boolean appVersionChanged = false;
|
||||
if (!pref.contains(FIRST_TIME_APP_RUN)) {
|
||||
firstTime = true;
|
||||
pref.edit().putBoolean(FIRST_TIME_APP_RUN, true).commit();
|
||||
|
@ -59,51 +117,44 @@ public class AppInitializer {
|
|||
pref.edit().putString(VERSION_INSTALLED, Version.getFullVersion(app)).commit();
|
||||
appVersionChanged = true;
|
||||
}
|
||||
if (appCustomization.showFirstTimeRunAndTips(firstTime, appVersionChanged)) {
|
||||
if (firstTime) {
|
||||
applicationInstalledFirstTime(activity);
|
||||
} else {
|
||||
int i = pref.getInt(TIPS_SHOW, 0);
|
||||
if (i < 7) {
|
||||
pref.edit().putInt(TIPS_SHOW, ++i).commit();
|
||||
}
|
||||
if (i == 1 || i == 5 || appVersionChanged) {
|
||||
if (TIPS_AND_TRICKS) {
|
||||
TipsAndTricksActivity tipsActivity = new TipsAndTricksActivity(activity);
|
||||
Dialog dlg = tipsActivity.getDialogToShowTips(!appVersionChanged, false);
|
||||
dlg.show();
|
||||
} else {
|
||||
if (appVersionChanged) {
|
||||
final Intent helpIntent = new Intent(activity, HelpActivity.class);
|
||||
helpIntent.putExtra(HelpActivity.TITLE, Version.getAppVersion((OsmandApplication)activity.getApplication()));
|
||||
helpIntent.putExtra(HelpActivity.URL, LATEST_CHANGES_URL);
|
||||
activity.startActivity(helpIntent);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
initSettings = true;
|
||||
}
|
||||
|
||||
public boolean isFirstTime(Activity a) {
|
||||
initUiVars(a);
|
||||
return firstTime;
|
||||
}
|
||||
|
||||
public boolean checkAppVersionChanged(Activity activity) {
|
||||
initUiVars(activity);
|
||||
if (!firstTime && appVersionChanged) {
|
||||
final Intent helpIntent = new Intent(activity, HelpActivity.class);
|
||||
helpIntent.putExtra(HelpActivity.TITLE, Version.getAppVersion(app));
|
||||
helpIntent.putExtra(HelpActivity.URL, LATEST_CHANGES_URL);
|
||||
activity.startActivity(helpIntent);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean checkPreviousRunsForExceptions(Activity ctx,boolean firstTime) {
|
||||
long size = ctx.getPreferences(Context.MODE_WORLD_READABLE).getLong(EXCEPTION_FILE_SIZE, 0);
|
||||
final OsmandApplication app = ((OsmandApplication) ctx.getApplication());
|
||||
public boolean checkPreviousRunsForExceptions(Activity activity) {
|
||||
initUiVars(activity);
|
||||
long size = activity.getPreferences(Context.MODE_WORLD_READABLE).getLong(EXCEPTION_FILE_SIZE, 0);
|
||||
final File file = app.getAppPath(OsmandApplication.EXCEPTION_PATH);
|
||||
if (file.exists() && file.length() > 0) {
|
||||
if (size != file.length() && !firstTime) {
|
||||
return true;
|
||||
}
|
||||
ctx.getPreferences(Context.MODE_WORLD_WRITEABLE).edit().putLong(EXCEPTION_FILE_SIZE, file.length()).commit();
|
||||
activity.getPreferences(Context.MODE_WORLD_WRITEABLE).edit().putLong(EXCEPTION_FILE_SIZE, file.length()).commit();
|
||||
} else {
|
||||
if (size > 0) {
|
||||
ctx.getPreferences(Context.MODE_WORLD_WRITEABLE).edit().putLong(EXCEPTION_FILE_SIZE, 0).commit();
|
||||
activity.getPreferences(Context.MODE_WORLD_WRITEABLE).edit().putLong(EXCEPTION_FILE_SIZE, 0).commit();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// TODO
|
||||
public void checkVectorIndexesDownloaded(final Activity ctx) {
|
||||
OsmandApplication app = (OsmandApplication)ctx.getApplication();
|
||||
MapRenderRepositories maps = app.getResourceManager().getRenderer();
|
||||
|
@ -144,6 +195,7 @@ public class AppInitializer {
|
|||
ctx.startActivityForResult(mapIndent, 0);
|
||||
}
|
||||
|
||||
// TODO
|
||||
private void applicationInstalledFirstTime(final Activity ctx) {
|
||||
final OsmandApplication app = (OsmandApplication)ctx.getApplication();
|
||||
boolean netOsmandWasInstalled = false;
|
||||
|
@ -174,7 +226,370 @@ public class AppInitializer {
|
|||
builder.show();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void indexRegionsBoundaries(boolean overwrite) {
|
||||
try {
|
||||
File file = app.getAppPath("regions.ocbf");
|
||||
if (file != null) {
|
||||
if (!file.exists() || overwrite) {
|
||||
Algorithms.streamCopy(OsmandRegions.class.getResourceAsStream("regions.ocbf"),
|
||||
new FileOutputStream(file));
|
||||
}
|
||||
}
|
||||
app.regions.prepareFile(file.getAbsolutePath());
|
||||
} catch (IOException e) {
|
||||
LOG.error(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void initPoiTypes() {
|
||||
app.poiTypes.init();
|
||||
app.poiTypes.setPoiTranslator(new MapPoiTypes.PoiTranslator() {
|
||||
|
||||
@Override
|
||||
public String getTranslation(AbstractPoiType type) {
|
||||
try {
|
||||
Field f = R.string.class.getField("poi_" + type.getKeyName());
|
||||
if (f != null) {
|
||||
Integer in = (Integer) f.get(null);
|
||||
return app.getString(in);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.err.println(e.getMessage());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void onCreateApplication() {
|
||||
// always update application mode to default
|
||||
OsmandSettings osmandSettings = app.getSettings();
|
||||
if (!osmandSettings.FOLLOW_THE_ROUTE.get()) {
|
||||
osmandSettings.APPLICATION_MODE.set(osmandSettings.DEFAULT_APPLICATION_MODE.get());
|
||||
}
|
||||
startTime = System.currentTimeMillis();
|
||||
try {
|
||||
app.bRouterServiceConnection = startupInit(BRouterServiceConnection.connect(app), BRouterServiceConnection.class);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
app.applyTheme(app);
|
||||
app.poiTypes = startupInit(MapPoiTypes.getDefaultNoInit(), MapPoiTypes.class);
|
||||
app.routingHelper = startupInit(new RoutingHelper(app), RoutingHelper.class);
|
||||
app.resourceManager = startupInit(new ResourceManager(app), ResourceManager.class);
|
||||
app.daynightHelper = startupInit(new DayNightHelper(app), DayNightHelper.class);
|
||||
app.avoidSpecificRoads = startupInit(new AvoidSpecificRoads(app), AvoidSpecificRoads.class);
|
||||
app.locationProvider = startupInit(new OsmAndLocationProvider(app), OsmAndLocationProvider.class);
|
||||
app.savingTrackHelper = startupInit(new SavingTrackHelper(app), SavingTrackHelper.class);
|
||||
app.liveMonitoringHelper = startupInit(new LiveMonitoringHelper(app), LiveMonitoringHelper.class);
|
||||
app.selectedGpxHelper = startupInit(new GpxSelectionHelper(app, app.savingTrackHelper), GpxSelectionHelper.class);
|
||||
app.favorites = startupInit(new FavouritesDbHelper(app), FavouritesDbHelper.class);
|
||||
app.waypointHelper = startupInit(new WaypointHelper(app), WaypointHelper.class);
|
||||
app.regions = startupInit(new OsmandRegions(), OsmandRegions.class);
|
||||
String lang = osmandSettings.PREFERRED_LOCALE.get();
|
||||
String clang = "".equals(lang) ? new Locale(lang).getLanguage() : lang;
|
||||
app.regions.setLocale(clang);
|
||||
app.poiFilters = startupInit(new PoiFiltersHelper(app), PoiFiltersHelper.class);
|
||||
app.rendererRegistry = startupInit(new RendererRegistry(), RendererRegistry.class);
|
||||
app.targetPointsHelper = startupInit(new TargetPointsHelper(app), TargetPointsHelper.class);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private <T> T startupInit(T object, Class<T> class1) {
|
||||
long t = System.currentTimeMillis();
|
||||
if(t - startTime > 7) {
|
||||
System.err.println("Startup service " + class1.getName() + " took too long " + (t - startTime) + " ms");
|
||||
}
|
||||
startTime = t;
|
||||
return object;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void initPlugins() {
|
||||
OsmandPlugin.initPlugins(app);
|
||||
}
|
||||
|
||||
public net.osmand.router.RoutingConfiguration.Builder getLazyDefaultRoutingConfig() {
|
||||
long tm = System.currentTimeMillis();
|
||||
try {
|
||||
File routingXml = app.getAppPath(IndexConstants.ROUTING_XML_FILE);
|
||||
if (routingXml.exists() && routingXml.canRead()) {
|
||||
try {
|
||||
return RoutingConfiguration.parseFromInputStream(new FileInputStream(routingXml));
|
||||
} catch (XmlPullParserException e) {
|
||||
throw new IllegalStateException(e);
|
||||
} catch (IOException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
} else {
|
||||
return RoutingConfiguration.getDefault();
|
||||
}
|
||||
} finally {
|
||||
long te = System.currentTimeMillis();
|
||||
if(te - tm > 30) {
|
||||
System.err.println("Defalt routing config init took " + (te - tm) + " ms");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public void initVoiceDataInDifferentThread(final Activity uiContext, final String voiceProvider, final Runnable run, boolean showDialog) {
|
||||
final ProgressDialog dlg = showDialog ? ProgressDialog.show(uiContext, app.getString(R.string.loading_data),
|
||||
app.getString(R.string.voice_data_initializing)) : null;
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
if (app.player != null) {
|
||||
app.player.clear();
|
||||
}
|
||||
app.player = CommandPlayerFactory.createCommandPlayer(voiceProvider, app, uiContext);
|
||||
app.getRoutingHelper().getVoiceRouter().setPlayer(app.player);
|
||||
if(dlg != null) {
|
||||
dlg.dismiss();
|
||||
}
|
||||
if (run != null && uiContext != null) {
|
||||
uiContext.runOnUiThread(run);
|
||||
}
|
||||
} catch (CommandPlayerException e) {
|
||||
if(dlg != null) {
|
||||
dlg.dismiss();
|
||||
}
|
||||
app.showToastMessage(e.getError());
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
private void startApplicationBackground() {
|
||||
try {
|
||||
startBgTime = System.currentTimeMillis();
|
||||
initPoiTypes();
|
||||
notifyEvent(InitEvents.POI_TYPES_INITIALIZED);
|
||||
app.favorites.loadFavorites();
|
||||
notifyEvent(InitEvents.FAVORITES_INITIALIZED);
|
||||
initNativeCore();
|
||||
notifyEvent(InitEvents.NATIVE_INITIALIZED);
|
||||
app.resourceManager.reloadIndexesOnStart(this, warnings);
|
||||
indexRegionsBoundaries(false);
|
||||
notifyEvent(InitEvents.INDEX_REGION_BOUNDARIES);
|
||||
app.selectedGpxHelper.loadGPXTracks(this);
|
||||
notifyEvent(InitEvents.LOAD_GPX_TRACKS);
|
||||
saveGPXTracks();
|
||||
notifyEvent(InitEvents.SAVE_GPX_TRACKS);
|
||||
// restore backuped favorites to normal file
|
||||
restoreBackupForFavoritesFiles();
|
||||
notifyEvent(InitEvents.RESTORE_BACKUPS);
|
||||
} catch (RuntimeException e) {
|
||||
e.printStackTrace();
|
||||
warnings.add(e.getMessage());
|
||||
} finally {
|
||||
appInitializing = false;
|
||||
notifyFinish();
|
||||
if (warnings != null && !warnings.isEmpty()) {
|
||||
app.showToastMessage(formatWarnings(warnings).toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void restoreBackupForFavoritesFiles() {
|
||||
final File appDir = app.getAppPath(null);
|
||||
File save = new File(appDir, FavouritesDbHelper.FILE_TO_SAVE);
|
||||
File bak = new File(appDir, FavouritesDbHelper.FILE_TO_BACKUP);
|
||||
if (bak.exists() && (!save.exists() || bak.lastModified() > save.lastModified())) {
|
||||
if (save.exists()) {
|
||||
save.delete();
|
||||
}
|
||||
bak.renameTo(save);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void saveGPXTracks() {
|
||||
if (app.savingTrackHelper.hasDataToSave()) {
|
||||
long timeUpdated = app.savingTrackHelper.getLastTrackPointTime();
|
||||
if (System.currentTimeMillis() - timeUpdated >= 45000) {
|
||||
startTask(app.getString(R.string.saving_gpx_tracks), -1);
|
||||
try {
|
||||
warnings.addAll(app.savingTrackHelper.saveDataToGpx(app.getAppCustomization().getTracksDir()));
|
||||
} catch (RuntimeException e) {
|
||||
warnings.add(e.getMessage());
|
||||
}
|
||||
} else {
|
||||
app.savingTrackHelper.loadGpxFromDatabase();
|
||||
}
|
||||
}
|
||||
if(app.getSettings().SAVE_GLOBAL_TRACK_TO_GPX.get()){
|
||||
app.startNavigationService(NavigationService.USED_BY_GPX);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void initNativeCore() {
|
||||
if (!"qnx".equals(System.getProperty("os.name"))) {
|
||||
OsmandSettings osmandSettings = app.getSettings();
|
||||
if (osmandSettings.USE_OPENGL_RENDER.get()) {
|
||||
boolean success = false;
|
||||
if (!osmandSettings.OPENGL_RENDER_FAILED.get()) {
|
||||
osmandSettings.OPENGL_RENDER_FAILED.set(true);
|
||||
success = NativeCoreContext.tryCatchInit(app);
|
||||
if (success) {
|
||||
osmandSettings.OPENGL_RENDER_FAILED.set(false);
|
||||
}
|
||||
}
|
||||
if (!success) {
|
||||
// try next time once again ?
|
||||
osmandSettings.OPENGL_RENDER_FAILED.set(false);
|
||||
warnings.add("Native OpenGL library is not supported. Please try again after exit");
|
||||
}
|
||||
}
|
||||
if (osmandSettings.NATIVE_RENDERING_FAILED.get()) {
|
||||
osmandSettings.SAFE_MODE.set(true);
|
||||
osmandSettings.NATIVE_RENDERING_FAILED.set(false);
|
||||
warnings.add(app.getString(R.string.native_library_not_supported));
|
||||
} else {
|
||||
osmandSettings.SAFE_MODE.set(false);
|
||||
osmandSettings.NATIVE_RENDERING_FAILED.set(true);
|
||||
startTask(app.getString(R.string.init_native_library), -1);
|
||||
RenderingRulesStorage storage = app.getRendererRegistry().getCurrentSelectedRenderer();
|
||||
boolean initialized = NativeOsmandLibrary.getLibrary(storage, app) != null;
|
||||
osmandSettings.NATIVE_RENDERING_FAILED.set(false);
|
||||
if (!initialized) {
|
||||
LOG.info("Native library could not be loaded!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private StringBuilder formatWarnings(List<String> warnings) {
|
||||
final StringBuilder b = new StringBuilder();
|
||||
boolean f = true;
|
||||
for (String w : warnings) {
|
||||
if (f) {
|
||||
f = false;
|
||||
} else {
|
||||
b.append('\n');
|
||||
}
|
||||
b.append(w);
|
||||
}
|
||||
return b;
|
||||
}
|
||||
|
||||
|
||||
public void notifyFinish() {
|
||||
app.uiHandler.post(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
for(AppInitializeListener l : listeners) {
|
||||
l.onFinish(AppInitializer.this);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
public void notifyEvent(final InitEvents event) {
|
||||
long time = System.currentTimeMillis();
|
||||
System.out.println("Initialized " + event + " in " + (time - startBgTime) + " ms");
|
||||
app.uiHandler.post(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
for(AppInitializeListener l : listeners) {
|
||||
l.onProgress(AppInitializer.this, event);
|
||||
}
|
||||
}
|
||||
});
|
||||
startBgTime = time;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void startTask(String taskName, int work) {
|
||||
this.taskName = taskName;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void startWork(int work) {
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void progress(int deltaWork) {
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void remaining(int remainingWork) {
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void finishTask() {
|
||||
taskName = null;
|
||||
notifyEvent(InitEvents.TASK_CHANGED);
|
||||
}
|
||||
|
||||
public String getCurrentInitTaskName() {
|
||||
return taskName;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean isIndeterminate() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean isInterrupted() {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private boolean applicationBgInitializing = false;
|
||||
|
||||
|
||||
public synchronized void startApplication() {
|
||||
if (applicationBgInitializing) {
|
||||
return;
|
||||
}
|
||||
applicationBgInitializing = true;
|
||||
new Thread(new Runnable() { //$NON-NLS-1$
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
startApplicationBackground();
|
||||
} finally {
|
||||
applicationBgInitializing = false;
|
||||
}
|
||||
}
|
||||
}, "Initializing app").run();
|
||||
;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void addListener(AppInitializeListener listener) {
|
||||
this.listeners.add(listener);
|
||||
if(!appInitializing) {
|
||||
listener.onFinish(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void removeListener(AppInitializer listener) {
|
||||
this.listeners.remove(listener);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,9 +33,9 @@ public class GpxSelectionHelper {
|
|||
private List<SelectedGpxFile> selectedGPXFiles = new java.util.ArrayList<SelectedGpxFile>();
|
||||
private SavingTrackHelper savingTrackHelper;
|
||||
|
||||
public GpxSelectionHelper(OsmandApplication osmandApplication) {
|
||||
public GpxSelectionHelper(OsmandApplication osmandApplication, SavingTrackHelper trackHelper) {
|
||||
this.app = osmandApplication;
|
||||
savingTrackHelper = this.app.getSavingTrackHelper();
|
||||
savingTrackHelper = trackHelper;
|
||||
}
|
||||
|
||||
public void clearAllGpxFileToShow() {
|
||||
|
|
|
@ -3,12 +3,9 @@ package net.osmand.plus;
|
|||
import java.io.BufferedWriter;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintStream;
|
||||
import java.lang.Thread.UncaughtExceptionHandler;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
@ -18,8 +15,9 @@ import net.osmand.PlatformUtil;
|
|||
import net.osmand.access.AccessibilityPlugin;
|
||||
import net.osmand.access.AccessibleAlertBuilder;
|
||||
import net.osmand.access.AccessibleToast;
|
||||
import net.osmand.osm.AbstractPoiType;
|
||||
import net.osmand.map.OsmandRegions;
|
||||
import net.osmand.osm.MapPoiTypes;
|
||||
import net.osmand.plus.AppInitializer.AppInitializeListener;
|
||||
import net.osmand.plus.access.AccessibilityMode;
|
||||
import net.osmand.plus.activities.DayNightHelper;
|
||||
import net.osmand.plus.activities.MainMenuActivity;
|
||||
|
@ -43,9 +41,6 @@ import net.osmand.plus.voice.CommandPlayerFactory;
|
|||
import net.osmand.render.RenderingRulesStorage;
|
||||
import net.osmand.router.RoutingConfiguration;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlarmManager;
|
||||
import android.app.AlertDialog;
|
||||
|
@ -82,39 +77,36 @@ public class OsmandApplication extends Application {
|
|||
public static final String EXCEPTION_PATH = "exception.log"; //$NON-NLS-1$
|
||||
private static final org.apache.commons.logging.Log LOG = PlatformUtil.getLog(OsmandApplication.class);
|
||||
|
||||
|
||||
ResourceManager resourceManager = null;
|
||||
PoiFiltersHelper poiFilters = null;
|
||||
MapPoiTypes poiTypes = null;
|
||||
RoutingHelper routingHelper = null;
|
||||
FavouritesDbHelper favorites = null;
|
||||
CommandPlayer player = null;
|
||||
|
||||
final AppInitializer appInitializer = new AppInitializer(this);
|
||||
OsmandSettings osmandSettings = null;
|
||||
|
||||
OsmAndAppCustomization appCustomization;
|
||||
DayNightHelper daynightHelper;
|
||||
private final SQLiteAPI sqliteAPI = new SQLiteAPIImpl(this);
|
||||
private final OsmAndTaskManager taskManager = new OsmAndTaskManager(this);
|
||||
Handler uiHandler;
|
||||
|
||||
NavigationService navigationService;
|
||||
RendererRegistry rendererRegistry;
|
||||
OsmAndLocationProvider locationProvider;
|
||||
OsmAndTaskManager taskManager;
|
||||
|
||||
// start variables
|
||||
private ProgressImplementation startDialog;
|
||||
private Handler uiHandler;
|
||||
private GpxSelectionHelper selectedGpxHelper;
|
||||
private SavingTrackHelper savingTrackHelper;
|
||||
private LiveMonitoringHelper liveMonitoringHelper;
|
||||
private TargetPointsHelper targetPointsHelper;
|
||||
private RoutingConfiguration.Builder defaultRoutingConfig;
|
||||
private WaypointHelper waypointHelper;
|
||||
private AvoidSpecificRoads avoidSpecificRoads;
|
||||
|
||||
private boolean applicationInitializing = false;
|
||||
private Locale preferredLocale = null;
|
||||
|
||||
SQLiteAPI sqliteAPI;
|
||||
|
||||
// start variables
|
||||
ResourceManager resourceManager;
|
||||
OsmAndLocationProvider locationProvider;
|
||||
RendererRegistry rendererRegistry;
|
||||
DayNightHelper daynightHelper;
|
||||
PoiFiltersHelper poiFilters;
|
||||
MapPoiTypes poiTypes;
|
||||
RoutingHelper routingHelper;
|
||||
FavouritesDbHelper favorites;
|
||||
CommandPlayer player;
|
||||
GpxSelectionHelper selectedGpxHelper;
|
||||
SavingTrackHelper savingTrackHelper;
|
||||
LiveMonitoringHelper liveMonitoringHelper;
|
||||
TargetPointsHelper targetPointsHelper;
|
||||
WaypointHelper waypointHelper;
|
||||
AvoidSpecificRoads avoidSpecificRoads;
|
||||
BRouterServiceConnection bRouterServiceConnection;
|
||||
OsmandRegions regions;
|
||||
|
||||
RoutingConfiguration.Builder defaultRoutingConfig;
|
||||
|
||||
// Typeface
|
||||
|
||||
|
@ -132,89 +124,40 @@ public class OsmandApplication extends Application {
|
|||
}
|
||||
super.onCreate();
|
||||
createInUiThread();
|
||||
sqliteAPI = new SQLiteAPIImpl(this);
|
||||
try {
|
||||
bRouterServiceConnection = BRouterServiceConnection.connect(this);
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
uiHandler = new Handler();
|
||||
if(Version.isSherpafy(this)) {
|
||||
appCustomization = new SherpafyCustomization();
|
||||
} else {
|
||||
appCustomization = new OsmAndAppCustomization();
|
||||
}
|
||||
|
||||
appCustomization.setup(this);
|
||||
|
||||
osmandSettings = appCustomization.getOsmandSettings();
|
||||
// always update application mode to default
|
||||
if(!osmandSettings.FOLLOW_THE_ROUTE.get()){
|
||||
osmandSettings.APPLICATION_MODE.set(osmandSettings.DEFAULT_APPLICATION_MODE.get());
|
||||
}
|
||||
|
||||
|
||||
applyTheme(this);
|
||||
|
||||
poiTypes = initPoiTypes();
|
||||
routingHelper = new RoutingHelper(this, player);
|
||||
taskManager = new OsmAndTaskManager(this);
|
||||
resourceManager = new ResourceManager(this);
|
||||
daynightHelper = new DayNightHelper(this);
|
||||
avoidSpecificRoads = new AvoidSpecificRoads(this);
|
||||
locationProvider = new OsmAndLocationProvider(this);
|
||||
savingTrackHelper = new SavingTrackHelper(this);
|
||||
liveMonitoringHelper = new LiveMonitoringHelper(this);
|
||||
selectedGpxHelper = new GpxSelectionHelper(this);
|
||||
favorites = new FavouritesDbHelper(this);
|
||||
waypointHelper = new WaypointHelper(this);
|
||||
uiHandler = new Handler();
|
||||
rendererRegistry = new RendererRegistry();
|
||||
targetPointsHelper = new TargetPointsHelper(this);
|
||||
appInitializer.onCreateApplication();
|
||||
// if(!osmandSettings.FOLLOW_THE_ROUTE.get()) {
|
||||
// targetPointsHelper.clearPointToNavigate(false);
|
||||
// }
|
||||
checkPreferredLocale();
|
||||
startApplication();
|
||||
if (LOG.isDebugEnabled()) {
|
||||
LOG.debug("Time to start application " + (System.currentTimeMillis() - timeToStart) + " ms. Should be less < 800 ms");
|
||||
if (LOG.isInfoEnabled()) {
|
||||
LOG.info("Time to start application " + (System.currentTimeMillis() - timeToStart) + " ms. Should be less < 800 ms");
|
||||
}
|
||||
timeToStart = System.currentTimeMillis();
|
||||
OsmandPlugin.initPlugins(this);
|
||||
appInitializer.initPlugins();
|
||||
|
||||
if (LOG.isDebugEnabled()) {
|
||||
LOG.debug("Time to init plugins " + (System.currentTimeMillis() - timeToStart) + " ms. Should be less < 800 ms");
|
||||
if (LOG.isInfoEnabled()) {
|
||||
LOG.info("Time to init plugins " + (System.currentTimeMillis() - timeToStart) + " ms. Should be less < 800 ms");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public AppInitializer getAppInitializer() {
|
||||
return appInitializer;
|
||||
}
|
||||
|
||||
public MapPoiTypes getPoiTypes() {
|
||||
if(poiTypes == null) {
|
||||
throw new IllegalStateException("State exception");
|
||||
}
|
||||
return poiTypes;
|
||||
}
|
||||
|
||||
private MapPoiTypes initPoiTypes() {
|
||||
return MapPoiTypes.initDefault(new MapPoiTypes.PoiTranslator() {
|
||||
|
||||
@Override
|
||||
public String getTranslation(AbstractPoiType type) {
|
||||
try {
|
||||
Field f = R.string.class.getField("poi_" + type.getKeyName());
|
||||
if (f != null) {
|
||||
Integer in = (Integer) f.get(null);
|
||||
return getString(in);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.err.println(e.getMessage());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void createInUiThread() {
|
||||
new Toast(this); // activate in UI thread to avoid further exceptions
|
||||
new AsyncTask<View, Void, Void>() {
|
||||
|
@ -248,7 +191,6 @@ public class OsmandApplication extends Application {
|
|||
return avoidSpecificRoads;
|
||||
}
|
||||
|
||||
|
||||
public OsmAndLocationProvider getLocationProvider() {
|
||||
return locationProvider;
|
||||
}
|
||||
|
@ -288,9 +230,6 @@ public class OsmandApplication extends Application {
|
|||
}
|
||||
|
||||
public PoiFiltersHelper getPoiFilters() {
|
||||
if (poiFilters == null) {
|
||||
poiFilters = new PoiFiltersHelper(this);
|
||||
}
|
||||
return poiFilters;
|
||||
}
|
||||
|
||||
|
@ -341,44 +280,26 @@ public class OsmandApplication extends Application {
|
|||
config.locale = preferredLocale;
|
||||
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
|
||||
}
|
||||
String clang = "".equals(lang) ? config.locale.getLanguage() : lang;
|
||||
resourceManager.getOsmandRegions().setLocale(clang);
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static final int PROGRESS_DIALOG = 5;
|
||||
|
||||
public void checkApplicationIsBeingInitialized(Activity activity, ProgressDialog progressDialog) {
|
||||
public void checkApplicationIsBeingInitialized(Activity activity, AppInitializeListener listener) {
|
||||
// start application if it was previously closed
|
||||
startApplication();
|
||||
synchronized (OsmandApplication.this) {
|
||||
if (startDialog != null) {
|
||||
progressDialog.setTitle(getString(R.string.loading_data));
|
||||
progressDialog.setMessage(getString(R.string.reading_indexes));
|
||||
activity.showDialog(PROGRESS_DIALOG);
|
||||
startDialog.setDialog(progressDialog);
|
||||
} else {
|
||||
progressDialog.dismiss();
|
||||
}
|
||||
if(listener != null) {
|
||||
appInitializer.addListener(listener);
|
||||
}
|
||||
}
|
||||
|
||||
public void checkApplicationIsBeingInitialized(Activity activity, TextView tv, ProgressBar progressBar,
|
||||
Runnable onClose) {
|
||||
// start application if it was previously closed
|
||||
startApplication();
|
||||
synchronized (OsmandApplication.this) {
|
||||
if (startDialog != null ) {
|
||||
tv.setText(getString(R.string.loading_data));
|
||||
startDialog.setProgressBar(tv, progressBar, onClose);
|
||||
} else if (onClose != null) {
|
||||
onClose.run();
|
||||
}
|
||||
}
|
||||
public void unsubscribeInitListener(AppInitializer listener) {
|
||||
if(listener != null) {
|
||||
appInitializer.removeListener(listener);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public boolean isApplicationInitializing() {
|
||||
return startDialog != null;
|
||||
return appInitializer.isAppInitializing();
|
||||
}
|
||||
|
||||
public RoutingHelper getRoutingHelper() {
|
||||
|
@ -444,40 +365,12 @@ public class OsmandApplication extends Application {
|
|||
|
||||
} else {
|
||||
if (player == null || !Algorithms.objectEquals(voiceProvider, player.getCurrentVoice())) {
|
||||
initVoiceDataInDifferentThread(uiContext, voiceProvider, run, showDialog);
|
||||
appInitializer. initVoiceDataInDifferentThread(uiContext, voiceProvider, run, showDialog);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void initVoiceDataInDifferentThread(final Activity uiContext, final String voiceProvider, final Runnable run, boolean showDialog) {
|
||||
final ProgressDialog dlg = showDialog ? ProgressDialog.show(uiContext, getString(R.string.loading_data),
|
||||
getString(R.string.voice_data_initializing)) : null;
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
if (player != null) {
|
||||
player.clear();
|
||||
}
|
||||
player = CommandPlayerFactory.createCommandPlayer(voiceProvider, OsmandApplication.this, uiContext);
|
||||
routingHelper.getVoiceRouter().setPlayer(player);
|
||||
if(dlg != null) {
|
||||
dlg.dismiss();
|
||||
}
|
||||
if (run != null && uiContext != null) {
|
||||
uiContext.runOnUiThread(run);
|
||||
}
|
||||
} catch (CommandPlayerException e) {
|
||||
if(dlg != null) {
|
||||
dlg.dismiss();
|
||||
}
|
||||
showToastMessage(e.getError());
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
public NavigationService getNavigationService() {
|
||||
return navigationService;
|
||||
}
|
||||
|
@ -516,11 +409,9 @@ public class OsmandApplication extends Application {
|
|||
}
|
||||
|
||||
private void closeApplicationAnyway(final Activity activity, boolean disableService) {
|
||||
if (applicationInitializing) {
|
||||
if (appInitializer.isAppInitializing()) {
|
||||
resourceManager.close();
|
||||
}
|
||||
applicationInitializing = false;
|
||||
|
||||
activity.finish();
|
||||
|
||||
if (getNavigationService() == null) {
|
||||
|
@ -547,141 +438,9 @@ public class OsmandApplication extends Application {
|
|||
}
|
||||
|
||||
public synchronized void startApplication() {
|
||||
if (applicationInitializing) {
|
||||
return;
|
||||
}
|
||||
applicationInitializing = true;
|
||||
startDialog = new ProgressImplementation(this, null, false);
|
||||
|
||||
startDialog.setRunnable("Initializing app", new Runnable() { //$NON-NLS-1$
|
||||
@Override
|
||||
public void run() {
|
||||
startApplicationBackground();
|
||||
}
|
||||
});
|
||||
startDialog.run();
|
||||
|
||||
Thread.setDefaultUncaughtExceptionHandler(new DefaultExceptionHandler());
|
||||
|
||||
appInitializer.startApplication();
|
||||
}
|
||||
|
||||
|
||||
private void startApplicationBackground() {
|
||||
List<String> warnings = new ArrayList<String>();
|
||||
try {
|
||||
favorites.loadFavorites();
|
||||
if (!"qnx".equals(System.getProperty("os.name"))) {
|
||||
if (osmandSettings.USE_OPENGL_RENDER.get()) {
|
||||
boolean success = false;
|
||||
if (!osmandSettings.OPENGL_RENDER_FAILED.get()) {
|
||||
osmandSettings.OPENGL_RENDER_FAILED.set(true);
|
||||
success = NativeCoreContext.tryCatchInit(this);
|
||||
if (success) {
|
||||
osmandSettings.OPENGL_RENDER_FAILED.set(false);
|
||||
}
|
||||
}
|
||||
if (!success) {
|
||||
// try next time once again ?
|
||||
osmandSettings.OPENGL_RENDER_FAILED.set(false);
|
||||
warnings.add("Native OpenGL library is not supported. Please try again after exit");
|
||||
}
|
||||
}
|
||||
if (osmandSettings.NATIVE_RENDERING_FAILED.get()) {
|
||||
osmandSettings.SAFE_MODE.set(true);
|
||||
osmandSettings.NATIVE_RENDERING_FAILED.set(false);
|
||||
warnings.add(getString(R.string.native_library_not_supported));
|
||||
} else {
|
||||
osmandSettings.SAFE_MODE.set(false);
|
||||
osmandSettings.NATIVE_RENDERING_FAILED.set(true);
|
||||
startDialog.startTask(getString(R.string.init_native_library), -1);
|
||||
RenderingRulesStorage storage = rendererRegistry.getCurrentSelectedRenderer();
|
||||
boolean initialized = NativeOsmandLibrary.getLibrary(storage, this) != null;
|
||||
osmandSettings.NATIVE_RENDERING_FAILED.set(false);
|
||||
if (!initialized) {
|
||||
LOG.info("Native library could not be loaded!");
|
||||
}
|
||||
}
|
||||
}
|
||||
warnings.addAll(resourceManager.reloadIndexes(startDialog));
|
||||
player = null;
|
||||
if (savingTrackHelper.hasDataToSave()) {
|
||||
long timeUpdated = savingTrackHelper.getLastTrackPointTime();
|
||||
if (System.currentTimeMillis() - timeUpdated >= 45000) {
|
||||
startDialog.startTask(getString(R.string.saving_gpx_tracks), -1);
|
||||
try {
|
||||
warnings.addAll(savingTrackHelper.saveDataToGpx(appCustomization.getTracksDir()));
|
||||
} catch (RuntimeException e) {
|
||||
warnings.add(e.getMessage());
|
||||
}
|
||||
} else {
|
||||
savingTrackHelper.loadGpxFromDatabase();
|
||||
}
|
||||
}
|
||||
if(getSettings().SAVE_GLOBAL_TRACK_TO_GPX.get()){
|
||||
startNavigationService(NavigationService.USED_BY_GPX);
|
||||
}
|
||||
// restore backuped favorites to normal file
|
||||
final File appDir = getAppPath(null);
|
||||
File save = new File(appDir, FavouritesDbHelper.FILE_TO_SAVE);
|
||||
File bak = new File(appDir, FavouritesDbHelper.FILE_TO_BACKUP);
|
||||
if (bak.exists() && (!save.exists() || bak.lastModified() > save.lastModified())) {
|
||||
if (save.exists()) {
|
||||
save.delete();
|
||||
}
|
||||
bak.renameTo(save);
|
||||
}
|
||||
} catch (RuntimeException e) {
|
||||
e.printStackTrace();
|
||||
warnings.add(e.getMessage());
|
||||
} finally {
|
||||
synchronized (OsmandApplication.this) {
|
||||
final ProgressDialog toDismiss;
|
||||
final Runnable pb;
|
||||
if (startDialog != null) {
|
||||
toDismiss = startDialog.getDialog();
|
||||
pb = startDialog.getFinishRunnable();
|
||||
} else {
|
||||
toDismiss = null;
|
||||
pb = null;
|
||||
}
|
||||
startDialog = null;
|
||||
|
||||
if (toDismiss != null || pb != null) {
|
||||
uiHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if(pb != null) {
|
||||
pb.run();
|
||||
}
|
||||
if (toDismiss != null) {
|
||||
// TODO handling this dialog is bad, we need a better standard way
|
||||
toDismiss.dismiss();
|
||||
// toDismiss.getOwnerActivity().dismissDialog(PROGRESS_DIALOG);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
if (warnings != null && !warnings.isEmpty()) {
|
||||
showToastMessage(formatWarnings(warnings).toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private StringBuilder formatWarnings(List<String> warnings) {
|
||||
final StringBuilder b = new StringBuilder();
|
||||
boolean f = true;
|
||||
for (String w : warnings) {
|
||||
if (f) {
|
||||
f = false;
|
||||
} else {
|
||||
b.append('\n');
|
||||
}
|
||||
b.append(w);
|
||||
}
|
||||
return b;
|
||||
}
|
||||
|
||||
|
||||
private class DefaultExceptionHandler implements UncaughtExceptionHandler {
|
||||
|
||||
|
@ -692,7 +451,7 @@ public class OsmandApplication extends Application {
|
|||
defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
|
||||
intent = PendingIntent.getActivity(OsmandApplication.this.getBaseContext(), 0,
|
||||
new Intent(OsmandApplication.this.getBaseContext(),
|
||||
getAppCustomization().getMainMenuActivity()), 0);
|
||||
getAppCustomization().getMapActivity()), 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -844,23 +603,16 @@ public class OsmandApplication extends Application {
|
|||
}
|
||||
|
||||
public RoutingConfiguration.Builder getDefaultRoutingConfig() {
|
||||
if (defaultRoutingConfig == null) {
|
||||
File routingXml = getAppPath(IndexConstants.ROUTING_XML_FILE);
|
||||
if (routingXml.exists() && routingXml.canRead()) {
|
||||
try {
|
||||
defaultRoutingConfig = RoutingConfiguration.parseFromInputStream(new FileInputStream(routingXml));
|
||||
} catch (XmlPullParserException e) {
|
||||
throw new IllegalStateException(e);
|
||||
} catch (IOException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
} else {
|
||||
defaultRoutingConfig = RoutingConfiguration.getDefault();
|
||||
}
|
||||
if(defaultRoutingConfig == null) {
|
||||
defaultRoutingConfig = appInitializer.getLazyDefaultRoutingConfig();
|
||||
}
|
||||
return defaultRoutingConfig;
|
||||
}
|
||||
|
||||
public OsmandRegions getRegions() {
|
||||
return regions;
|
||||
}
|
||||
|
||||
public boolean accessibilityExtensions() {
|
||||
return (Build.VERSION.SDK_INT < 14) ? getSettings().ACCESSIBILITY_EXTENSIONS.get() : false;
|
||||
}
|
||||
|
|
|
@ -60,12 +60,6 @@ import android.widget.TextView;
|
|||
*/
|
||||
public class MainMenuActivity extends BaseDownloadActivity implements OsmAndLocationProvider.OsmAndCompassListener, OsmAndLocationProvider.OsmAndLocationListener {
|
||||
|
||||
private static final String FIRST_TIME_APP_RUN = "FIRST_TIME_APP_RUN"; //$NON-NLS-1$
|
||||
private static final String VECTOR_INDEXES_CHECK = "VECTOR_INDEXES_CHECK"; //$NON-NLS-1$
|
||||
private static final String TIPS_SHOW = "TIPS_SHOW"; //$NON-NLS-1$
|
||||
private static final String VERSION_INSTALLED = "VERSION_INSTALLED"; //$NON-NLS-1$
|
||||
private static final String EXCEPTION_FILE_SIZE = "EXCEPTION_FS"; //$NON-NLS-1$
|
||||
|
||||
private static final int HELP_ID = 0;
|
||||
private static final int SETTINGS_ID = 1;
|
||||
private static final int EXIT_ID = 2;
|
||||
|
@ -176,10 +170,8 @@ public class MainMenuActivity extends BaseDownloadActivity implements OsmAndLoca
|
|||
actionBarBackground.setCallback(mDrawableCallback);
|
||||
}
|
||||
|
||||
AppInitializer initializer = new AppInitializer();
|
||||
boolean firstTime = initializer.initApp(this, getMyApplication());
|
||||
if (getMyApplication().getAppCustomization().checkExceptionsOnStart()) {
|
||||
initializer.checkPreviousRunsForExceptions(this, firstTime);
|
||||
if (getMyApplication().getSettings().FOLLOW_THE_ROUTE.get() && !getMyApplication().getRoutingHelper().isRouteCalculated()) {
|
||||
startMapActivity();
|
||||
}
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
|
||||
|
|
|
@ -143,14 +143,7 @@ public class MapActivity extends AccessibleActivity {
|
|||
|
||||
dashboardOnMap = new DashboardOnMap(this);
|
||||
dashboardOnMap.createDashboardView();
|
||||
if (getMyApplication().isApplicationInitializing()) {
|
||||
AppInitializer initializer = new AppInitializer();
|
||||
boolean firstTime = initializer.initApp(this, getMyApplication());
|
||||
if (getMyApplication().getAppCustomization().checkExceptionsOnStart()) {
|
||||
if (initializer.checkPreviousRunsForExceptions(this, firstTime)) {
|
||||
dashboardOnMap.addErrorFragment();
|
||||
}
|
||||
}
|
||||
if (app.isApplicationInitializing()) {
|
||||
dashboardOnMap.setDashboardVisibility(true);
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import java.io.File;
|
|||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
@ -600,7 +601,8 @@ public class SettingsGeneralActivity extends SettingsBaseActivity {
|
|||
|
||||
@Override
|
||||
protected List<String> doInBackground(Void... params) {
|
||||
return getMyApplication().getResourceManager().reloadIndexes(IProgress.EMPTY_PROGRESS);
|
||||
return getMyApplication().getResourceManager().reloadIndexes(IProgress.EMPTY_PROGRESS,
|
||||
new ArrayList<String>());
|
||||
}
|
||||
|
||||
protected void onPostExecute(List<String> result) {
|
||||
|
|
|
@ -17,10 +17,13 @@ import net.osmand.data.LatLon;
|
|||
import net.osmand.data.MapObject;
|
||||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.data.Street;
|
||||
import net.osmand.plus.AppInitializer;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.AppInitializer.AppInitializeListener;
|
||||
import net.osmand.plus.AppInitializer.InitEvents;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.activities.OsmandListActivity;
|
||||
import net.osmand.plus.resources.RegionAddressRepository;
|
||||
|
@ -43,15 +46,22 @@ public class GeoIntentActivity extends OsmandListActivity {
|
|||
|
||||
private ProgressDialog progressDlg;
|
||||
private LatLon location;
|
||||
private ProgressDialog startProgressDialog;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.search_address_offline);
|
||||
getSupportActionBar().setTitle(R.string.search_osm_offline);
|
||||
startProgressDialog = new ProgressDialog(this);
|
||||
getMyApplication().checkApplicationIsBeingInitialized(this, startProgressDialog);
|
||||
|
||||
getMyApplication().checkApplicationIsBeingInitialized(this, new AppInitializeListener() {
|
||||
@Override
|
||||
public void onProgress(AppInitializer init, InitEvents event) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFinish(AppInitializer init) {
|
||||
}
|
||||
});
|
||||
location = getMyApplication().getSettings().getLastKnownMapLocation();
|
||||
|
||||
final Intent intent = getIntent();
|
||||
|
@ -135,14 +145,6 @@ public class GeoIntentActivity extends OsmandListActivity {
|
|||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Dialog onCreateDialog(int id) {
|
||||
if (id == OsmandApplication.PROGRESS_DIALOG) {
|
||||
return startProgressDialog;
|
||||
}
|
||||
return super.onCreateDialog(id);
|
||||
}
|
||||
|
||||
private class MapObjectAdapter extends ArrayAdapter<MapObject> {
|
||||
|
||||
public MapObjectAdapter(List<MapObject> places) {
|
||||
|
|
|
@ -1,26 +1,32 @@
|
|||
package net.osmand.plus.dashboard;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.ColorFilter;
|
||||
import android.graphics.Paint;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.*;
|
||||
import android.widget.ImageView;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.data.RotatedTileBox;
|
||||
import net.osmand.map.MapTileDownloader.DownloadRequest;
|
||||
import net.osmand.map.MapTileDownloader.IMapDownloaderCallback;
|
||||
import net.osmand.plus.AppInitializer;
|
||||
import net.osmand.plus.AppInitializer.AppInitializeListener;
|
||||
import net.osmand.plus.AppInitializer.InitEvents;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MainMenuActivity;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.render.MapRenderRepositories;
|
||||
import net.osmand.plus.resources.ResourceManager;
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.ColorFilter;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.widget.ProgressBar;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.Display;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
/**
|
||||
|
@ -119,17 +125,22 @@ public class DashMapFragment extends DashBaseFragment implements IMapDownloaderC
|
|||
public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
view.findViewById(R.id.map_image).setVisibility(View.GONE);
|
||||
if (getMyApplication().isApplicationInitializing()) {
|
||||
getMyApplication().checkApplicationIsBeingInitialized(getActivity(), (TextView) view.findViewById(R.id.ProgressMessage),
|
||||
(ProgressBar) view.findViewById(R.id.ProgressBar), new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
applicationInitialized(view);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
applicationInitialized(view);
|
||||
}
|
||||
|
||||
getMyApplication().checkApplicationIsBeingInitialized(getActivity(), new AppInitializeListener() {
|
||||
|
||||
@Override
|
||||
public void onProgress(AppInitializer init, InitEvents event) {
|
||||
String tn = init.getCurrentInitTaskName();
|
||||
if(tn != null) {
|
||||
((TextView) view.findViewById(R.id.ProgressMessage)).setText(tn);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFinish(AppInitializer init) {
|
||||
applicationInitialized(view);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void applicationInitialized(View view) {
|
||||
|
|
|
@ -133,9 +133,13 @@ public class DashboardOnMap {
|
|||
}
|
||||
|
||||
|
||||
private void addDashboardFragments(){
|
||||
FragmentManager manager =ma. getSupportFragmentManager();
|
||||
private void addDashboardFragments() {
|
||||
FragmentManager manager = ma.getSupportFragmentManager();
|
||||
FragmentTransaction fragmentTransaction = manager.beginTransaction();
|
||||
if (manager.findFragmentByTag(DashErrorFragment.TAG) == null && ma.getMyApplication().getAppInitializer().checkPreviousRunsForExceptions(ma)) {
|
||||
DashErrorFragment errorFragment = new DashErrorFragment();
|
||||
fragmentTransaction.add(R.id.content, errorFragment, DashErrorFragment.TAG);
|
||||
}
|
||||
if (manager.findFragmentByTag(DashSearchFragment.TAG) == null) {
|
||||
fragmentTransaction.add(R.id.content, new DashSearchFragment(), DashSearchFragment.TAG);
|
||||
}
|
||||
|
@ -151,23 +155,13 @@ public class DashboardOnMap {
|
|||
if (manager.findFragmentByTag(DashTrackFragment.TAG) == null) {
|
||||
fragmentTransaction.add(R.id.content, new DashTrackFragment(), DashTrackFragment.TAG);
|
||||
}
|
||||
//fragmentTransaction.add(R.id.content, new DashUpdatesFragment(), DashUpdatesFragment.TAG);
|
||||
// fragmentTransaction.add(R.id.content, new DashUpdatesFragment(), DashUpdatesFragment.TAG);
|
||||
if (manager.findFragmentByTag(DashPluginsFragment.TAG) == null) {
|
||||
fragmentTransaction.add(R.id.content, new DashPluginsFragment(), DashPluginsFragment.TAG);
|
||||
}
|
||||
|
||||
fragmentTransaction.commit();
|
||||
|
||||
}
|
||||
|
||||
public void addErrorFragment() {
|
||||
FragmentManager manager = ma.getSupportFragmentManager();
|
||||
FragmentTransaction fragmentTransaction = manager.beginTransaction();
|
||||
if (manager.findFragmentByTag(DashErrorFragment.TAG) == null) {
|
||||
DashErrorFragment errorFragment = new DashErrorFragment();
|
||||
fragmentTransaction.add(R.id.content, errorFragment, DashErrorFragment.TAG).commit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -322,7 +322,7 @@ public class BaseDownloadActivity extends ActionBarProgressActivity {
|
|||
if (result) {
|
||||
settings.setExternalStorageDirectory(newLoc);
|
||||
getMyApplication().getResourceManager().resetStoreDirectory();
|
||||
getMyApplication().getResourceManager().reloadIndexes(progress);
|
||||
getMyApplication().getResourceManager().reloadIndexes(progress, new ArrayList<String>());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -751,7 +751,9 @@ public class LocalIndexesFragment extends OsmandExpandableListFragment {
|
|||
}
|
||||
@Override
|
||||
protected List<String> doInBackground(Void... params) {
|
||||
return getMyApplication().getResourceManager().reloadIndexes(IProgress.EMPTY_PROGRESS);
|
||||
return getMyApplication().getResourceManager().reloadIndexes(IProgress.EMPTY_PROGRESS,
|
||||
new ArrayList<String>()
|
||||
);
|
||||
}
|
||||
|
||||
};
|
||||
|
|
|
@ -39,11 +39,9 @@ public class PoiFiltersHelper {
|
|||
private static final String UDF_PARKING = "parking";
|
||||
|
||||
private static final String[] DEL = new String[] {};
|
||||
private MapPoiTypes poiTypes;
|
||||
|
||||
public PoiFiltersHelper(OsmandApplication application){
|
||||
this.application = application;
|
||||
poiTypes = application.getPoiTypes();
|
||||
}
|
||||
public NameFinderPoiFilter getNameFinderPOIFilter() {
|
||||
if(nameFinderPOIFilter == null){
|
||||
|
@ -75,14 +73,19 @@ public class PoiFiltersHelper {
|
|||
return findPoiFilter(filterId, getUserDefinedPoiFilters(), getTopStandardFilters(), getOsmDefinedPoiFilters());
|
||||
}
|
||||
|
||||
|
||||
public MapPoiTypes getPoiTypes() {
|
||||
return application.getPoiTypes();
|
||||
}
|
||||
|
||||
private void putAll(Map<PoiCategory, LinkedHashSet<String>> types, String tp) {
|
||||
types.put(poiTypes.getPoiCategoryByName(tp), null);
|
||||
types.put(getPoiTypes().getPoiCategoryByName(tp), null);
|
||||
}
|
||||
|
||||
private void putValues(Map<PoiCategory, LinkedHashSet<String>> types, String p, String... vls) {
|
||||
LinkedHashSet<String> list = new LinkedHashSet<String>();
|
||||
Collections.addAll(list, vls);
|
||||
types.put(poiTypes.getPoiCategoryByName(p), list);
|
||||
types.put(getPoiTypes().getPoiCategoryByName(p), list);
|
||||
}
|
||||
|
||||
private List<PoiLegacyFilter> getUserDefinedDefaultFilters() {
|
||||
|
@ -221,7 +224,7 @@ public class PoiFiltersHelper {
|
|||
public List<PoiLegacyFilter> getOsmDefinedPoiFilters(){
|
||||
if(cacheOsmDefinedFilters == null){
|
||||
cacheOsmDefinedFilters = new ArrayList<PoiLegacyFilter>();
|
||||
for(PoiCategory t : poiTypes.getCategories()){
|
||||
for(PoiCategory t : getPoiTypes().getCategories()){
|
||||
cacheOsmDefinedFilters.add(new PoiLegacyFilter(t, application));
|
||||
}
|
||||
final Collator instance = Collator.getInstance();
|
||||
|
@ -432,7 +435,7 @@ public class PoiFiltersHelper {
|
|||
map.put(filterId, new LinkedHashMap<PoiCategory, LinkedHashSet<String>>());
|
||||
}
|
||||
Map<PoiCategory, LinkedHashSet<String>> m = map.get(filterId);
|
||||
PoiCategory a = poiTypes.getPoiCategoryByName(query.getString(1));
|
||||
PoiCategory a = getPoiTypes().getPoiCategoryByName(query.getString(1));
|
||||
String subCategory = query.getString(2);
|
||||
if(subCategory == null){
|
||||
m.put(a, null);
|
||||
|
|
|
@ -1,14 +1,10 @@
|
|||
package net.osmand.plus.resources;
|
||||
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.URLConnection;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Stack;
|
||||
|
|
|
@ -35,6 +35,8 @@ import net.osmand.map.MapTileDownloader;
|
|||
import net.osmand.map.MapTileDownloader.DownloadRequest;
|
||||
import net.osmand.map.OsmandRegions;
|
||||
import net.osmand.osm.PoiCategory;
|
||||
import net.osmand.plus.AppInitializer;
|
||||
import net.osmand.plus.AppInitializer.InitEvents;
|
||||
import net.osmand.plus.BusyIndicator;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
|
@ -127,8 +129,6 @@ public class ResourceManager {
|
|||
|
||||
protected final MapRenderRepositories renderer;
|
||||
|
||||
protected final OsmandRegions regions;
|
||||
|
||||
protected final MapTileDownloader tileDownloader;
|
||||
|
||||
public final AsyncLoadingThread asyncLoadingThread = new AsyncLoadingThread(this);
|
||||
|
@ -156,7 +156,6 @@ public class ResourceManager {
|
|||
float tiles = (dm.widthPixels / 256 + 2) * (dm.heightPixels / 256 + 2) * 3;
|
||||
log.info("Tiles to load in memory : " + tiles);
|
||||
maxImgCacheSize = (int) (tiles) ;
|
||||
regions = new OsmandRegions();
|
||||
}
|
||||
|
||||
public MapTileDownloader getMapTileDownloader() {
|
||||
|
@ -406,22 +405,26 @@ public class ResourceManager {
|
|||
|
||||
////////////////////////////////////////////// Working with indexes ////////////////////////////////////////////////
|
||||
|
||||
public List<String> reloadIndexes(IProgress progress){
|
||||
public List<String> reloadIndexesOnStart(AppInitializer progress, List<String> warnings){
|
||||
close();
|
||||
List<String> warnings = new ArrayList<String>();
|
||||
// check we have some assets to copy to sdcard
|
||||
warnings.addAll(checkAssets(progress));
|
||||
progress.notifyEvent(InitEvents.ASSETS_COPIED);
|
||||
initRenderers(progress);
|
||||
progress.notifyEvent(InitEvents.INIT_RENDERERS);
|
||||
reloadIndexes(progress, warnings);
|
||||
progress.notifyEvent(InitEvents.MAPS_INITIALIZED);
|
||||
return warnings;
|
||||
}
|
||||
|
||||
public List<String> reloadIndexes(IProgress progress, List<String> warnings) {
|
||||
geoidAltitudeCorrection = new GeoidAltitudeCorrection(context.getAppPath(null));
|
||||
indexRegionsBoundaries(progress, false);
|
||||
// do it lazy
|
||||
// indexingImageTiles(progress);
|
||||
context.getSelectedGpxHelper().loadGPXTracks(progress);
|
||||
warnings.addAll(indexingMaps(progress));
|
||||
warnings.addAll(indexVoiceFiles(progress));
|
||||
warnings.addAll(OsmandPlugin.onIndexingFiles(progress));
|
||||
warnings.addAll(indexAdditionalMaps(progress));
|
||||
|
||||
return warnings;
|
||||
}
|
||||
|
||||
|
@ -429,21 +432,6 @@ public class ResourceManager {
|
|||
return context.getAppCustomization().onIndexingFiles(progress, indexFileNames);
|
||||
}
|
||||
|
||||
private void indexRegionsBoundaries(IProgress progress, boolean overwrite) {
|
||||
try {
|
||||
File file = context.getAppPath("regions.ocbf");
|
||||
if (file != null) {
|
||||
if (!file.exists() || overwrite) {
|
||||
Algorithms.streamCopy(OsmandRegions.class.getResourceAsStream("regions.ocbf"),
|
||||
new FileOutputStream(file));
|
||||
}
|
||||
}
|
||||
regions.prepareFile(file.getAbsolutePath());
|
||||
} catch (IOException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public List<String> indexVoiceFiles(IProgress progress){
|
||||
File file = context.getAppPath(IndexConstants.VOICE_INDEX_DIR);
|
||||
|
@ -476,12 +464,10 @@ public class ResourceManager {
|
|||
if(applicationDataDir.canWrite()){
|
||||
try {
|
||||
progress.startTask(context.getString(R.string.installing_new_resources), -1);
|
||||
indexRegionsBoundaries(progress, true);
|
||||
AssetManager assetManager = context.getAssets();
|
||||
boolean isFirstInstall = context.getSettings().PREVIOUS_INSTALLED_VERSION.get().equals("");
|
||||
unpackBundledAssets(assetManager, applicationDataDir, progress, isFirstInstall);
|
||||
context.getSettings().PREVIOUS_INSTALLED_VERSION.set(Version.getFullVersion(context));
|
||||
|
||||
context.getPoiFilters().updateFilters(false);
|
||||
} catch (SQLiteException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
|
@ -1027,7 +1013,7 @@ public class ResourceManager {
|
|||
}
|
||||
|
||||
public OsmandRegions getOsmandRegions() {
|
||||
return regions;
|
||||
return context.getRegions();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ public class RoutingHelper {
|
|||
private ApplicationMode mode;
|
||||
private OsmandSettings settings;
|
||||
|
||||
private RouteProvider provider = new RouteProvider();
|
||||
private RouteProvider provider;
|
||||
private VoiceRouter voiceRouter;
|
||||
|
||||
private boolean isDeviatedFromRoute = false;
|
||||
|
@ -82,10 +82,11 @@ public class RoutingHelper {
|
|||
return isDeviatedFromRoute;
|
||||
}
|
||||
|
||||
public RoutingHelper(OsmandApplication context, CommandPlayer player){
|
||||
public RoutingHelper(OsmandApplication context){
|
||||
this.app = context;
|
||||
settings = context.getSettings();
|
||||
voiceRouter = new VoiceRouter(this, settings, player);
|
||||
voiceRouter = new VoiceRouter(this, settings);
|
||||
provider = new RouteProvider();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -76,9 +76,8 @@ public class VoiceRouter {
|
|||
}
|
||||
private ConcurrentHashMap<VoiceMessageListener, Integer> voiceMessageListeners;
|
||||
|
||||
public VoiceRouter(RoutingHelper router, final OsmandSettings settings, CommandPlayer player) {
|
||||
public VoiceRouter(RoutingHelper router, final OsmandSettings settings) {
|
||||
this.router = router;
|
||||
this.player = player;
|
||||
this.settings = settings;
|
||||
|
||||
empty = new Struct("");
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
package net.osmand.plus.sherpafy;
|
||||
|
||||
import android.support.v4.app.Fragment;
|
||||
import net.osmand.plus.AppInitializer;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.AppInitializer.AppInitializeListener;
|
||||
import net.osmand.plus.AppInitializer.InitEvents;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.ProgressBar;
|
||||
|
@ -27,19 +30,23 @@ public class SherpafyLoadingFragment extends Fragment {
|
|||
@Override
|
||||
public void onViewCreated(final View view, Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
if(app.isApplicationInitializing()) {
|
||||
app.checkApplicationIsBeingInitialized(getActivity(), (TextView) view.findViewById(R.id.ProgressMessage),
|
||||
(ProgressBar) view.findViewById(R.id.ProgressBar), new Runnable() {
|
||||
((OsmandApplication) getActivity().getApplication()).checkApplicationIsBeingInitialized(getActivity(),
|
||||
new AppInitializeListener() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
((TextView) view.findViewById(R.id.ProgressMessage)).setVisibility(View.GONE);
|
||||
view.findViewById(R.id.ProgressBar).setVisibility(View.GONE);
|
||||
((TourViewActivity)getActivity()).showSelectedItem();
|
||||
public void onProgress(AppInitializer init, InitEvents event) {
|
||||
String tn = init.getCurrentInitTaskName();
|
||||
if (tn != null) {
|
||||
((TextView) view.findViewById(R.id.ProgressMessage)).setText(tn);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFinish(AppInitializer init) {
|
||||
((TourViewActivity) getActivity()).showSelectedItem();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
((TourViewActivity)getActivity()).showSelectedItem();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue