diff --git a/OsmAnd/AndroidManifest.xml b/OsmAnd/AndroidManifest.xml
index 69a3d2dcef..982b04fd3b 100644
--- a/OsmAnd/AndroidManifest.xml
+++ b/OsmAnd/AndroidManifest.xml
@@ -59,13 +59,7 @@
-
-
-
-
-
-
-
+
@@ -77,6 +71,12 @@
+
+
+
+
+
+
diff --git a/OsmAnd/src/net/osmand/plus/AppInitializer.java b/OsmAnd/src/net/osmand/plus/AppInitializer.java
new file mode 100644
index 0000000000..a3b9fce13a
--- /dev/null
+++ b/OsmAnd/src/net/osmand/plus/AppInitializer.java
@@ -0,0 +1,178 @@
+package net.osmand.plus;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+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.TipsAndTricksActivity;
+import net.osmand.plus.download.DownloadActivity;
+import net.osmand.plus.render.MapRenderRepositories;
+
+import java.io.File;
+import java.util.Random;
+
+/**
+ * Created by Denis
+ * on 03.03.15.
+ */
+public class AppInitializer {
+
+ 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()) {
+ startMapActivity(activity);
+ return false;
+ }
+
+
+ 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();
+ pref.edit().putString(VERSION_INSTALLED, Version.getFullVersion(app)).commit();
+ } else if (!Version.getFullVersion(app).equals(pref.getString(VERSION_INSTALLED, ""))) {
+ 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);
+ }
+ }
+ }
+ }
+ }
+
+ return firstTime;
+ }
+
+ 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());
+ 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();
+ } else {
+ if (size > 0) {
+ ctx.getPreferences(Context.MODE_WORLD_WRITEABLE).edit().putLong(EXCEPTION_FILE_SIZE, 0).commit();
+ }
+ }
+ return false;
+ }
+
+ public void checkVectorIndexesDownloaded(final Activity ctx) {
+ OsmandApplication app = (OsmandApplication)ctx.getApplication();
+ MapRenderRepositories maps = app.getResourceManager().getRenderer();
+ SharedPreferences pref = ctx.getPreferences(Context.MODE_WORLD_WRITEABLE);
+ boolean check = pref.getBoolean(VECTOR_INDEXES_CHECK, true);
+ // do not show each time
+ if (check && new Random().nextInt() % 5 == 1) {
+ AlertDialog.Builder builder = new AccessibleAlertBuilder(ctx);
+ if (maps.isEmpty()) {
+ builder.setMessage(R.string.vector_data_missing);
+ } else if (!maps.basemapExists()) {
+ builder.setMessage(R.string.basemap_missing);
+ } else {
+ return;
+ }
+ builder.setPositiveButton(R.string.download_files, new DialogInterface.OnClickListener() {
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ ctx.startActivity(new Intent(ctx, DownloadActivity.class));
+ }
+
+ });
+ builder.setNeutralButton(R.string.vector_map_not_needed, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ ctx.getPreferences(Context.MODE_WORLD_WRITEABLE).edit().putBoolean(VECTOR_INDEXES_CHECK, false).commit();
+ }
+ });
+ builder.setNegativeButton(R.string.first_time_continue, null);
+ builder.show();
+ }
+
+ }
+
+ public void startMapActivity(final Activity ctx) {
+ final Intent mapIndent = new Intent(ctx, ((OsmandApplication)ctx.getApplication()).getAppCustomization().getMapActivity());
+ ctx.startActivityForResult(mapIndent, 0);
+ }
+
+ private void applicationInstalledFirstTime(final Activity ctx) {
+ final OsmandApplication app = (OsmandApplication)ctx.getApplication();
+ boolean netOsmandWasInstalled = false;
+ try {
+ ApplicationInfo applicationInfo = ctx.getPackageManager().getApplicationInfo("net.osmand", PackageManager.GET_META_DATA);
+ netOsmandWasInstalled = applicationInfo != null && !Version.isFreeVersion(app);
+ } catch (PackageManager.NameNotFoundException e) {
+ netOsmandWasInstalled = false;
+ }
+
+ if (netOsmandWasInstalled) {
+// Builder builder = new AccessibleAlertBuilder(this);
+// builder.setMessage(R.string.osmand_net_previously_installed);
+// builder.setPositiveButton(R.string.default_buttons_ok, null);
+// builder.show();
+ } else {
+ AlertDialog.Builder builder = new AccessibleAlertBuilder(ctx);
+ builder.setMessage(R.string.first_time_msg);
+ builder.setPositiveButton(R.string.first_time_download, new DialogInterface.OnClickListener() {
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ ctx.startActivity(new Intent(ctx, app.getAppCustomization().getDownloadIndexActivity()));
+ }
+
+ });
+ builder.setNegativeButton(R.string.first_time_continue, null);
+ builder.show();
+ }
+ }
+
+
+
+}
diff --git a/OsmAnd/src/net/osmand/plus/activities/MainMenuActivity.java b/OsmAnd/src/net/osmand/plus/activities/MainMenuActivity.java
index 2f967f7d68..c7a12f2e32 100644
--- a/OsmAnd/src/net/osmand/plus/activities/MainMenuActivity.java
+++ b/OsmAnd/src/net/osmand/plus/activities/MainMenuActivity.java
@@ -8,6 +8,7 @@ import java.util.Random;
import net.osmand.Location;
import net.osmand.access.AccessibleAlertBuilder;
+import net.osmand.plus.AppInitializer;
import net.osmand.plus.OsmAndAppCustomization;
import net.osmand.plus.OsmAndLocationProvider;
import net.osmand.plus.OsmandApplication;
@@ -58,10 +59,6 @@ import android.widget.TextView;
/**
*/
public class MainMenuActivity extends BaseDownloadActivity implements OsmAndLocationProvider.OsmAndCompassListener, OsmAndLocationProvider.OsmAndLocationListener {
- private static final String LATEST_CHANGES_URL = "changes-1.9.html";
- public static final boolean TIPS_AND_TRICKS = false;
- public static final int APP_EXIT_CODE = 4;
- public static final String APP_EXIT_KEY = "APP_EXIT_KEY";
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$
@@ -150,7 +147,7 @@ public class MainMenuActivity extends BaseDownloadActivity implements OsmAndLoca
haveHomeButton = false;
if (getIntent() != null) {
Intent intent = getIntent();
- if (intent.getExtras() != null && intent.getExtras().containsKey(APP_EXIT_KEY)) {
+ if (intent.getExtras() != null && intent.getExtras().containsKey(AppInitializer.APP_EXIT_KEY)) {
getMyApplication().closeApplication(this);
return;
}
@@ -179,9 +176,10 @@ public class MainMenuActivity extends BaseDownloadActivity implements OsmAndLoca
actionBarBackground.setCallback(mDrawableCallback);
}
- boolean firstTime = initApp(this, getMyApplication());
+ AppInitializer initializer = new AppInitializer();
+ boolean firstTime = initializer.initApp(this, getMyApplication());
if (getMyApplication().getAppCustomization().checkExceptionsOnStart()) {
- checkPreviousRunsForExceptions(firstTime);
+ initializer.checkPreviousRunsForExceptions(this, firstTime);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
@@ -223,7 +221,7 @@ public class MainMenuActivity extends BaseDownloadActivity implements OsmAndLoca
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
- if (resultCode == APP_EXIT_CODE) {
+ if (resultCode == AppInitializer.APP_EXIT_CODE) {
getMyApplication().closeApplication(this);
}
}
@@ -238,104 +236,11 @@ public class MainMenuActivity extends BaseDownloadActivity implements OsmAndLoca
}
- protected 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()) {
- startMapActivity();
- return false;
- }
- boolean firstTime = false;
- SharedPreferences pref = getPreferences(MODE_WORLD_WRITEABLE);
- boolean appVersionChanged = false;
- if (!pref.contains(FIRST_TIME_APP_RUN)) {
- firstTime = true;
- pref.edit().putBoolean(FIRST_TIME_APP_RUN, true).commit();
- pref.edit().putString(VERSION_INSTALLED, Version.getFullVersion(app)).commit();
- } else if (!Version.getFullVersion(app).equals(pref.getString(VERSION_INSTALLED, ""))) {
- pref.edit().putString(VERSION_INSTALLED, Version.getFullVersion(app)).commit();
- appVersionChanged = true;
- }
- if (appCustomization.showFirstTimeRunAndTips(firstTime, appVersionChanged)) {
- if (firstTime) {
- applicationInstalledFirstTime();
- } 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(this);
- 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(getMyApplication()));
- helpIntent.putExtra(HelpActivity.URL, LATEST_CHANGES_URL);
- activity.startActivity(helpIntent);
- }
- }
- }
- }
- }
-
- return firstTime;
- }
-
private void startMapActivity() {
final Intent mapIndent = new Intent(this, getMyApplication().getAppCustomization().getMapActivity());
startActivityForResult(mapIndent, 0);
}
- private void applicationInstalledFirstTime() {
- boolean netOsmandWasInstalled = false;
- try {
- ApplicationInfo applicationInfo = getPackageManager().getApplicationInfo("net.osmand", PackageManager.GET_META_DATA);
- netOsmandWasInstalled = applicationInfo != null && !Version.isFreeVersion(getMyApplication());
- } catch (NameNotFoundException e) {
- netOsmandWasInstalled = false;
- }
-
- if (netOsmandWasInstalled) {
-// Builder builder = new AccessibleAlertBuilder(this);
-// builder.setMessage(R.string.osmand_net_previously_installed);
-// builder.setPositiveButton(R.string.default_buttons_ok, null);
-// builder.show();
- } else {
- Builder builder = new AccessibleAlertBuilder(this);
- builder.setMessage(R.string.first_time_msg);
- builder.setPositiveButton(R.string.first_time_download, new DialogInterface.OnClickListener() {
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
- startActivity(new Intent(MainMenuActivity.this, getMyApplication().getAppCustomization().getDownloadIndexActivity()));
- }
-
- });
- builder.setNegativeButton(R.string.first_time_continue, null);
- builder.show();
- }
- }
-
- public void checkPreviousRunsForExceptions(boolean firstTime) {
- long size = getPreferences(MODE_WORLD_READABLE).getLong(EXCEPTION_FILE_SIZE, 0);
- final OsmandApplication app = ((OsmandApplication) getApplication());
- final File file = app.getAppPath(OsmandApplication.EXCEPTION_PATH);
- if (file.exists() && file.length() > 0) {
- if (size != file.length() && !firstTime) {
- addErrorFragment();
- }
- getPreferences(MODE_WORLD_WRITEABLE).edit().putLong(EXCEPTION_FILE_SIZE, file.length()).commit();
- } else {
- if (size > 0) {
- getPreferences(MODE_WORLD_WRITEABLE).edit().putLong(EXCEPTION_FILE_SIZE, 0).commit();
- }
- }
- }
-
-
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem menuItem = menu.add(0, HELP_ID, 0, R.string.tips_and_tricks).setIcon(R.drawable.ic_ac_help);
@@ -357,7 +262,7 @@ public class MainMenuActivity extends BaseDownloadActivity implements OsmAndLoca
public boolean onOptionsItemSelected(MenuItem item) {
OsmAndAppCustomization appCustomization = getMyApplication().getAppCustomization();
if (item.getItemId() == HELP_ID) {
- if (TIPS_AND_TRICKS) {
+ if (AppInitializer.TIPS_AND_TRICKS) {
TipsAndTricksActivity activity = new TipsAndTricksActivity(this);
Dialog dlg = activity.getDialogToShowTips(false, true);
dlg.show();
@@ -374,54 +279,6 @@ public class MainMenuActivity extends BaseDownloadActivity implements OsmAndLoca
return true;
}
- protected void checkVectorIndexesDownloaded() {
- MapRenderRepositories maps = getMyApplication().getResourceManager().getRenderer();
- SharedPreferences pref = getPreferences(MODE_WORLD_WRITEABLE);
- boolean check = pref.getBoolean(VECTOR_INDEXES_CHECK, true);
- // do not show each time
- if (check && new Random().nextInt() % 5 == 1) {
- Builder builder = new AccessibleAlertBuilder(this);
- if (maps.isEmpty()) {
- builder.setMessage(R.string.vector_data_missing);
- } else if (!maps.basemapExists()) {
- builder.setMessage(R.string.basemap_missing);
- } else {
- return;
- }
- builder.setPositiveButton(R.string.download_files, new DialogInterface.OnClickListener() {
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
- startActivity(new Intent(MainMenuActivity.this, DownloadActivity.class));
- }
-
- });
- builder.setNeutralButton(R.string.vector_map_not_needed, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- getPreferences(MODE_WORLD_WRITEABLE).edit().putBoolean(VECTOR_INDEXES_CHECK, false).commit();
- }
- });
- builder.setNegativeButton(R.string.first_time_continue, null);
- builder.show();
- }
-
- }
-
-// private static void enableLink(final Activity activity, String textVersion, TextView textVersionView) {
-// SpannableString content = new SpannableString(textVersion);
-// content.setSpan(new ClickableSpan() {
-//
-// @Override
-// public void onClick(View widget) {
-// final Intent mapIntent = new Intent(activity, ContributionVersionActivity.class);
-// activity.startActivityForResult(mapIntent, 0);
-// }
-// }, 0, content.length(), 0);
-// textVersionView.setText(content);
-// textVersionView.setMovementMethod(LinkMovementMethod.getInstance());
-// }
-
@Override
public void updateProgress(boolean updateOnlyProgress) {
BasicProgressAsyncTask, ?, ?> basicProgressAsyncTask = BaseDownloadActivity.downloadListIndexThread.getCurrentRunningTask();
diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java
index 270d4f8e86..9a328e9720 100644
--- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java
+++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java
@@ -41,6 +41,7 @@ import net.osmand.data.QuadPoint;
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.ApplicationMode;
import net.osmand.plus.BusyIndicator;
import net.osmand.plus.OsmAndConstants;
@@ -141,6 +142,14 @@ public class MapActivity extends AccessibleActivity {
mapActions = new MapActivityActions(this);
mapLayers = new MapActivityLayers(this);
+ AppInitializer initializer = new AppInitializer();
+ boolean firstTime = initializer.initApp(this, getMyApplication());
+ if (getMyApplication().getAppCustomization().checkExceptionsOnStart()) {
+ if (initializer.checkPreviousRunsForExceptions(this, firstTime)){
+ dashboardOnMap.addErrorFragment();
+ }
+ }
+
startProgressDialog = new ProgressDialog(this);
startProgressDialog.setCancelable(true);
app.checkApplicationIsBeingInitialized(this, startProgressDialog);
diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java
index 22a5826dd9..aaadf4a4f8 100644
--- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java
+++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java
@@ -19,6 +19,7 @@ import net.osmand.data.PointDescription;
import net.osmand.data.QuadRect;
import net.osmand.data.RotatedTileBox;
import net.osmand.map.ITileSource;
+import net.osmand.plus.AppInitializer;
import net.osmand.plus.ApplicationMode;
import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick;
@@ -921,7 +922,7 @@ public class MapActivityActions implements DialogProvider {
Intent newIntent = new Intent(mapActivity, mapActivity.getMyApplication().getAppCustomization().getMainMenuActivity());
newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// not exit
- newIntent.putExtra(MainMenuActivity.APP_EXIT_KEY, MainMenuActivity.APP_EXIT_CODE);
+ newIntent.putExtra(AppInitializer.APP_EXIT_KEY, AppInitializer.APP_EXIT_CODE);
mapActivity.startActivity(newIntent);
// In future when map will be main screen this should change
// app.closeApplication(mapActivity);
diff --git a/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java b/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java
index 73b2e296bd..4721f83655 100644
--- a/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java
+++ b/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java
@@ -86,12 +86,6 @@ public class DashboardOnMap {
}
open(dashboardView.findViewById(R.id.content));
ma.getMapActions().disableDrawer();
- //View close = dashboardView.findViewById(R.id.close_dashboard);
- if (ScreenOrientationHelper.isOrientationPortrait(ma)) {
- //close.setVisibility(View.VISIBLE);
- } else {
- //close.setVisibility(View.GONE);
- }
ma.findViewById(R.id.MapInfoControls).setVisibility(View.GONE);
ma.findViewById(R.id.MapButtons).setVisibility(View.GONE);
} else {
@@ -147,7 +141,7 @@ public class DashboardOnMap {
}
- private void addErrorFragment() {
+ public void addErrorFragment() {
FragmentManager manager = ma.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = manager.beginTransaction();
if (manager.findFragmentByTag(DashErrorFragment.TAG) == null) {