diff --git a/OsmAnd/res/layout/dash_first_time.xml b/OsmAnd/res/layout/dash_first_time.xml
new file mode 100644
index 0000000000..601d9986a1
--- /dev/null
+++ b/OsmAnd/res/layout/dash_first_time.xml
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OsmAnd/res/values/colors.xml b/OsmAnd/res/values/colors.xml
index 966380a86e..354e32d86f 100644
--- a/OsmAnd/res/values/colors.xml
+++ b/OsmAnd/res/values/colors.xml
@@ -1,6 +1,8 @@
+ #33B4E4
+
#f41a34
#2d383d
#b36d12
diff --git a/OsmAnd/res/values/sizes.xml b/OsmAnd/res/values/sizes.xml
index 84905aff11..5c9a9f1cbc 100644
--- a/OsmAnd/res/values/sizes.xml
+++ b/OsmAnd/res/values/sizes.xml
@@ -97,4 +97,5 @@
24sp
18sp
14sp
+ 22sp
\ No newline at end of file
diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml
index 764961df4a..18b3bf5a4d 100644
--- a/OsmAnd/res/values/strings.xml
+++ b/OsmAnd/res/values/strings.xml
@@ -9,6 +9,10 @@
3. All your modified/created strings are in the top of the file (to make easier find what\'s translated).
PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy
-->
+ Download maps
+ Select your region
+ OsmAnd allows you to use maps and offline navigation!
+ Welcome
Current route
OSM changes added to local changes
Mark to delete
diff --git a/OsmAnd/src/net/osmand/plus/AppInitializer.java b/OsmAnd/src/net/osmand/plus/AppInitializer.java
index 12d2ff4107..35ad45776e 100644
--- a/OsmAnd/src/net/osmand/plus/AppInitializer.java
+++ b/OsmAnd/src/net/osmand/plus/AppInitializer.java
@@ -1,14 +1,14 @@
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 android.app.Activity;
+import android.app.AlertDialog;
+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.IProgress;
import net.osmand.IndexConstants;
@@ -39,15 +39,16 @@ import net.osmand.util.Algorithms;
import org.xmlpull.v1.XmlPullParserException;
-import android.app.Activity;
-import android.app.AlertDialog;
-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 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 btools.routingapp.BRouterServiceConnection;
/**
@@ -123,9 +124,9 @@ public class AppInitializer implements IProgress {
initSettings = true;
}
- public boolean isFirstTime(Activity a) {
- initUiVars(a);
- return firstTime;
+ public boolean isFirstTime(Activity activity) {
+ SharedPreferences pref = activity.getPreferences(Context.MODE_WORLD_WRITEABLE);
+ return !pref.contains(FIRST_TIME_APP_RUN);
}
public boolean checkAppVersionChanged(Activity activity) {
diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java
index 67a2b7616a..f9a697686e 100644
--- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java
+++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java
@@ -101,6 +101,8 @@ public class MapActivity extends AccessibleActivity {
private OsmandApplication app;
private OsmandSettings settings;
+ boolean firstTime;
+
private Dialog progressDlg = null;
private List dialogProviders = new ArrayList(2);
@@ -123,6 +125,16 @@ public class MapActivity extends AccessibleActivity {
return notification;
}
+ public boolean isFirstTime(){
+ return firstTime;
+ }
+
+ public void userClosedWelcomeCard(){
+ firstTime = false;
+ dashboardOnMap.refreshDashboardFragments();
+
+ }
+
@Override
public void onCreate(Bundle savedInstanceState) {
long tm = System.currentTimeMillis();
@@ -141,6 +153,7 @@ public class MapActivity extends AccessibleActivity {
if (mapViewTrackingUtilities == null) {
mapViewTrackingUtilities = new MapViewTrackingUtilities(app);
}
+ firstTime = app.getAppInitializer().isFirstTime(this);
dashboardOnMap.createDashboardView();
checkAppInitialization();
parseLaunchIntentLocation();
@@ -191,6 +204,7 @@ public class MapActivity extends AccessibleActivity {
System.err.println("OnCreate for MapActivity took " + (System.currentTimeMillis() - tm) + " ms");
}
mapView.refreshMap(true);
+
}
private void checkAppInitialization() {
diff --git a/OsmAnd/src/net/osmand/plus/activities/actions/AppModeDialog.java b/OsmAnd/src/net/osmand/plus/activities/actions/AppModeDialog.java
index 68e21baf90..352c25caf3 100644
--- a/OsmAnd/src/net/osmand/plus/activities/actions/AppModeDialog.java
+++ b/OsmAnd/src/net/osmand/plus/activities/actions/AppModeDialog.java
@@ -253,7 +253,7 @@ public class AppModeDialog {
tb.setTextOn("");
tb.setTextOff("");
tb.setContentDescription(mode.toHumanString(ctx));
- tb.setCompoundDrawablesWithIntrinsicBounds(null, ctx.getIconsCache().getIcon(mode.getIconId(), R.color.dashboard_blue), null, null);
+ tb.setCompoundDrawablesWithIntrinsicBounds(null, ctx.getIconsCache().getIcon(mode.getIconId(), R.color.app_mode_icon_color), null, null);
tb.setPadding(0, padding, 0, 0);
LayoutParams lp = new LinearLayout.LayoutParams(metrics, metrics);
lp.setMargins(left, 0, 0, 0);
diff --git a/OsmAnd/src/net/osmand/plus/dashboard/DashErrorFragment.java b/OsmAnd/src/net/osmand/plus/dashboard/DashErrorFragment.java
index d429985dea..16cea2f34b 100644
--- a/OsmAnd/src/net/osmand/plus/dashboard/DashErrorFragment.java
+++ b/OsmAnd/src/net/osmand/plus/dashboard/DashErrorFragment.java
@@ -22,7 +22,8 @@ import android.widget.Button;
import android.widget.TextView;
/**
- * Created by Denis on 02.12.14.
+ * Created by Denis
+ * on 02.12.14.
*/
public class DashErrorFragment extends DashBaseFragment {
diff --git a/OsmAnd/src/net/osmand/plus/dashboard/DashFirstTimeFragment.java b/OsmAnd/src/net/osmand/plus/dashboard/DashFirstTimeFragment.java
new file mode 100644
index 0000000000..2aaab5660b
--- /dev/null
+++ b/OsmAnd/src/net/osmand/plus/dashboard/DashFirstTimeFragment.java
@@ -0,0 +1,91 @@
+package net.osmand.plus.dashboard;
+
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import net.osmand.plus.OsmandSettings;
+import net.osmand.plus.R;
+import net.osmand.plus.activities.MapActivity;
+import net.osmand.plus.download.DownloadActivity;
+
+/**
+ * Created by Denis on
+ * 26.03.2015.
+ */
+public class DashFirstTimeFragment extends DashBaseFragment {
+
+ public static final String TAG = "DASH_FIRST_TIME_FRAGMENT";
+
+
+ @Override
+ public void onOpenDash() {
+
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ View view = getActivity().getLayoutInflater().inflate(R.layout.dash_first_time, container, false);
+
+ view.findViewById(R.id.select_region).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ final OsmandSettings.DrivingRegion[] drs = OsmandSettings.DrivingRegion.values();
+
+ final OsmandSettings.DrivingRegion currentRegion = getMyApplication().getSettings().DRIVING_REGION.get();
+
+ String[] entries = new String[drs.length];
+ int currentIndex = 0;
+ for (int i = 0; i < entries.length; i++) {
+ if (currentRegion.equals(drs[i])){
+ currentIndex = i;
+ }
+ entries[i] = getString(drs[i].name); // + " (" + drs[i].defMetrics.toHumanString(this) +")" ;
+ }
+ builder.setSingleChoiceItems(entries, currentIndex, null);
+ builder.setNegativeButton(R.string.shared_string_cancel, null);
+ builder.setPositiveButton(R.string.shared_string_ok, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ int selectedPosition = ((AlertDialog)dialog).getListView().getCheckedItemPosition();
+ getMyApplication().getSettings().DRIVING_REGION.set(drs[selectedPosition]);
+ updateCurrentRegion(getView());
+ }
+ });
+ builder.show();
+ }
+ });
+
+ view.findViewById(R.id.hide).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ ((MapActivity)getActivity()).userClosedWelcomeCard();
+ }
+ });
+
+ view.findViewById(R.id.download_map).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(getActivity(), DownloadActivity.class);
+ intent.putExtra(DownloadActivity.TAB_TO_OPEN, DownloadActivity.DOWNLOAD_TAB);
+ getActivity().startActivity(intent);
+ }
+ });
+
+ updateCurrentRegion(view);
+ ((ImageView)view.findViewById(R.id.car_icon)).setImageDrawable(getMyApplication().getIconsCache().getContentIcon(R.drawable.ic_action_car_dark));
+ return view;
+ }
+
+ private void updateCurrentRegion(View view) {
+ ((TextView) view.findViewById(R.id.region)).setText(getMyApplication().getSettings().DRIVING_REGION.get().name);
+ }
+}
diff --git a/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java b/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java
index 57b3d8ab95..b2cff112a2 100644
--- a/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java
+++ b/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java
@@ -1,41 +1,9 @@
package net.osmand.plus.dashboard;
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-
-import net.osmand.data.LatLon;
-import net.osmand.plus.ContextMenuAdapter;
-import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick;
-import net.osmand.plus.ContextMenuAdapter.OnRowItemClick;
-import net.osmand.plus.IconsCache;
-import net.osmand.plus.OsmandApplication;
-import net.osmand.plus.OsmandPlugin;
-import net.osmand.plus.R;
-import net.osmand.plus.activities.IntermediatePointsDialog;
-import net.osmand.plus.activities.MapActivity;
-import net.osmand.plus.audionotes.DashAudioVideoNotesFragment;
-import net.osmand.plus.development.DashSimulateFragment;
-import net.osmand.plus.development.OsmandDevelopmentPlugin;
-import net.osmand.plus.dialogs.ConfigureMapMenu;
-import net.osmand.plus.download.DownloadActivity;
-import net.osmand.plus.helpers.ScreenOrientationHelper;
-import net.osmand.plus.helpers.WaypointDialogHelper;
-import net.osmand.plus.helpers.WaypointHelper.LocationPointWrapper;
-import net.osmand.plus.monitoring.DashTrackFragment;
-import net.osmand.plus.osmedit.DashOsmEditsFragment;
-import net.osmand.plus.osmo.DashOsMoFragment;
-import net.osmand.plus.parkingpoint.DashParkingFragment;
-import net.osmand.plus.routing.RoutingHelper;
-import net.osmand.plus.views.DownloadedRegionsLayer;
-import net.osmand.plus.views.OsmandMapTileView;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
-import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.v4.app.Fragment;
@@ -67,6 +35,38 @@ import com.github.ksoichiro.android.observablescrollview.ObservableScrollViewCal
import com.github.ksoichiro.android.observablescrollview.ScrollState;
import com.software.shell.fab.ActionButton;
+import net.osmand.data.LatLon;
+import net.osmand.plus.ContextMenuAdapter;
+import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick;
+import net.osmand.plus.ContextMenuAdapter.OnRowItemClick;
+import net.osmand.plus.IconsCache;
+import net.osmand.plus.OsmandApplication;
+import net.osmand.plus.OsmandPlugin;
+import net.osmand.plus.R;
+import net.osmand.plus.activities.IntermediatePointsDialog;
+import net.osmand.plus.activities.MapActivity;
+import net.osmand.plus.audionotes.DashAudioVideoNotesFragment;
+import net.osmand.plus.development.DashSimulateFragment;
+import net.osmand.plus.development.OsmandDevelopmentPlugin;
+import net.osmand.plus.dialogs.ConfigureMapMenu;
+import net.osmand.plus.download.DownloadActivity;
+import net.osmand.plus.helpers.ScreenOrientationHelper;
+import net.osmand.plus.helpers.WaypointDialogHelper;
+import net.osmand.plus.helpers.WaypointHelper.LocationPointWrapper;
+import net.osmand.plus.monitoring.DashTrackFragment;
+import net.osmand.plus.osmedit.DashOsmEditsFragment;
+import net.osmand.plus.osmo.DashOsMoFragment;
+import net.osmand.plus.parkingpoint.DashParkingFragment;
+import net.osmand.plus.routing.RoutingHelper;
+import net.osmand.plus.views.DownloadedRegionsLayer;
+import net.osmand.plus.views.OsmandMapTileView;
+
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
/**
*/
public class DashboardOnMap implements ObservableScrollViewCallbacks {
@@ -373,6 +373,11 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks {
public void setDashboardVisibility(boolean visible, DashboardType type, boolean animation) {
setDashboardVisibility(visible, type, this.visible ? visibleType : null, animation);
}
+
+ public void refreshDashboardFragments(){
+ addOrUpdateDashboardFragments(mapActivity.isFirstTime());
+ }
+
public void setDashboardVisibility(boolean visible, DashboardType type, DashboardType prevItem, boolean animation) {
if(visible == this.visible && type == visibleType) {
return;
@@ -395,7 +400,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks {
View listViewLayout = dashboardView.findViewById(R.id.dash_list_view_layout);
ScrollView scrollView = (ScrollView) dashboardView.findViewById(R.id.main_scroll);
if(visibleType == DashboardType.DASHBOARD) {
- addOrUpdateDashboardFragments();
+ addOrUpdateDashboardFragments(mapActivity.isFirstTime());
scrollView.setVisibility(View.VISIBLE);
listViewLayout.setVisibility(View.GONE);
updateTopButton(scrollView.getScrollY());
@@ -431,7 +436,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks {
}
}
-
+
private void updateListAdapter() {
ContextMenuAdapter cm = null;
if (DashboardType.WAYPOINTS == visibleType || DashboardType.WAYPOINTS_FLAT == visibleType) {
@@ -614,16 +619,16 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks {
}
- private void addOrUpdateDashboardFragments() {
+ private void addOrUpdateDashboardFragments(boolean firstTime) {
// boolean showCards = mapActivity.getMyApplication().getSettings().USE_DASHBOARD_INSTEAD_OF_DRAWER.get();
- boolean showCards = true;
+ boolean showCards = !firstTime;
FragmentManager manager = mapActivity.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = manager.beginTransaction();
-
-
+ showFragment(manager, fragmentTransaction, DashFirstTimeFragment.TAG, DashFirstTimeFragment.class, firstTime);
+
showFragment(manager, fragmentTransaction, DashErrorFragment.TAG, DashErrorFragment.class,
mapActivity.getMyApplication().getAppInitializer().checkPreviousRunsForExceptions(mapActivity) && showCards);
showFragment(manager, fragmentTransaction, DashNavigationFragment.TAG, DashNavigationFragment.class, showCards);