/**
   * @param activity that supports onCreateDialog({@link #PROGRESS_DIALOG}) and returns @param
   *     progressdialog
   * @param progressDialog - it should be exactly the same as onCreateDialog
   * @return
   */
  public void checkApplicationIsBeingInitialized(Activity activity, ProgressDialog progressDialog) {
    // start application if it was previously closed
    startApplication();
    synchronized (OsmandApplication.this) {
      if (startDialog != null) {
        try {
          SpecialPhrases.setLanguage(this, osmandSettings);
        } catch (IOException e) {
          LOG.error("I/O exception", e);
          Toast error =
              Toast.makeText(
                  this,
                  "Error while reading the special phrases. Restart OsmAnd if possible",
                  Toast.LENGTH_LONG);
          error.show();
        }

        progressDialog.setTitle(getString(R.string.loading_data));
        progressDialog.setMessage(getString(R.string.reading_indexes));
        activity.showDialog(PROGRESS_DIALOG);
        startDialog.setDialog(progressDialog);
      } else if (startingWarnings != null) {
        showWarnings(startingWarnings, activity);
      }
    }
  }
 public void checkApplicationIsBeingInitialized(
     Activity activity, AppInitializeListener listener) {
   // start application if it was previously closed
   startApplication();
   if (listener != null) {
     appInitializer.addListener(listener);
   }
 }
  @Override
  public void onCreate() {
    long timeToStart = System.currentTimeMillis();
    super.onCreate();
    settingsAPI = new net.osmand.plus.api.SettingsAPIImpl(this);
    externalServiceAPI = new net.osmand.plus.api.ExternalServiceAPIImpl(this);
    internalToDoAPI = new net.osmand.plus.api.InternalToDoAPIImpl(this);
    internalOsmAndAPI = new net.osmand.plus.api.InternalOsmAndAPIImpl(this);
    sqliteAPI = new SQLiteAPIImpl(this);

    // settings used everywhere so they need to be created first
    osmandSettings = createOsmandSettingsInstance();
    // always update application mode to default
    osmandSettings.APPLICATION_MODE.set(osmandSettings.DEFAULT_APPLICATION_MODE.get());

    routingHelper = new RoutingHelper(this, player);
    taskManager = new OsmAndTaskManager(this);
    manager = new ResourceManager(this);
    daynightHelper = new DayNightHelper(this);
    locationProvider = new OsmAndLocationProvider(this);
    savingTrackHelper = new SavingTrackHelper(this);
    liveMonitoringHelper = new LiveMonitoringHelper(this);
    uiHandler = new Handler();
    rendererRegistry = new RendererRegistry();
    targetPointsHelper = new TargetPointsHelper(this);
    checkPrefferedLocale();
    startApplication();
    if (LOG.isDebugEnabled()) {
      LOG.debug(
          "Time to start application "
              + (System.currentTimeMillis() - timeToStart)
              + " ms. Should be less < 800 ms");
    }
    timeToStart = System.currentTimeMillis();
    OsmandPlugin.initPlugins(this);

    if (LOG.isDebugEnabled()) {
      LOG.debug(
          "Time to init plugins "
              + (System.currentTimeMillis() - timeToStart)
              + " ms. Should be less < 800 ms");
    }
  }
  @Override
  public void onCreate() {
    long timeToStart = System.currentTimeMillis();
    if (Version.getAppName(this).equals("OsmAnd~")) {
      if (android.os.Build.VERSION.SDK_INT >= 9) {
        try {
          Class.forName("net.osmand.plus.base.EnableStrictMode").newInstance();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    }
    super.onCreate();
    createInUiThread();
    uiHandler = new Handler();
    appCustomization = new OsmAndAppCustomization();
    appCustomization.setup(this);
    osmandSettings = appCustomization.getOsmandSettings();
    externalStorageDirectory = osmandSettings.getExternalStorageDirectory();

    checkPreferredLocale();
    appInitializer.onCreateApplication();
    //		if(!osmandSettings.FOLLOW_THE_ROUTE.get()) {
    //			targetPointsHelper.clearPointToNavigate(false);
    //		}
    startApplication();
    System.out.println(
        "Time to start application "
            + (System.currentTimeMillis() - timeToStart)
            + " ms. Should be less < 800 ms");
    timeToStart = System.currentTimeMillis();
    OsmandPlugin.initPlugins(this);
    System.out.println(
        "Time to init plugins "
            + (System.currentTimeMillis() - timeToStart)
            + " ms. Should be less < 800 ms");

    osmandSettings.NUMBER_OF_APPLICATION_STARTS.set(
        osmandSettings.NUMBER_OF_APPLICATION_STARTS.get() + 1);
  }