diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml
index 8262e318de..1b0e3972c0 100644
--- a/android/AndroidManifest.xml
+++ b/android/AndroidManifest.xml
@@ -36,7 +36,6 @@
-
+ -
+
+
+
+
+
+
+
diff --git a/android/res/drawable/ic_storage_permission.xml b/android/res/drawable/ic_storage_permission.xml
new file mode 100644
index 0000000000..89b8b60d32
--- /dev/null
+++ b/android/res/drawable/ic_storage_permission.xml
@@ -0,0 +1,17 @@
+
+ -
+
+
+
+
+
+
+
diff --git a/android/res/layout-land/info_page.xml b/android/res/layout-land/info_page.xml
new file mode 100644
index 0000000000..01bc9edafd
--- /dev/null
+++ b/android/res/layout-land/info_page.xml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/res/layout-sw600dp-land/info_page.xml b/android/res/layout-sw600dp-land/info_page.xml
new file mode 100644
index 0000000000..01bc9edafd
--- /dev/null
+++ b/android/res/layout-sw600dp-land/info_page.xml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/res/layout-sw600dp/info_page.xml b/android/res/layout-sw600dp/info_page.xml
new file mode 100644
index 0000000000..60ccda04a6
--- /dev/null
+++ b/android/res/layout-sw600dp/info_page.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
diff --git a/android/res/layout/activity_splash.xml b/android/res/layout/activity_splash.xml
index 076596ab23..e40493d687 100644
--- a/android/res/layout/activity_splash.xml
+++ b/android/res/layout/activity_splash.xml
@@ -1,14 +1,32 @@
-
+ android:layout_height="match_parent">
+
+
-
+ android:src="@drawable/img_logo"
+ android:layout_above="@id/anchor_center"
+ android:layout_centerHorizontal="true"/>
+
+
+
diff --git a/android/res/layout/fragment_detail_permissions.xml b/android/res/layout/fragment_detail_permissions.xml
new file mode 100644
index 0000000000..eef07f8754
--- /dev/null
+++ b/android/res/layout/fragment_detail_permissions.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
diff --git a/android/res/layout/fragment_permissions.xml b/android/res/layout/fragment_permissions.xml
new file mode 100644
index 0000000000..300ee0ed24
--- /dev/null
+++ b/android/res/layout/fragment_permissions.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
diff --git a/android/res/layout/fragment_storage_permissions.xml b/android/res/layout/fragment_storage_permissions.xml
new file mode 100644
index 0000000000..77143b7775
--- /dev/null
+++ b/android/res/layout/fragment_storage_permissions.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
diff --git a/android/res/layout/fragment_welcome.xml b/android/res/layout/fragment_welcome.xml
new file mode 100644
index 0000000000..d50f9c01c5
--- /dev/null
+++ b/android/res/layout/fragment_welcome.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
diff --git a/android/res/layout/info_page.xml b/android/res/layout/info_page.xml
new file mode 100644
index 0000000000..8ca2138dac
--- /dev/null
+++ b/android/res/layout/info_page.xml
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
diff --git a/android/res/layout/item_permission.xml b/android/res/layout/item_permission.xml
new file mode 100644
index 0000000000..21428487f8
--- /dev/null
+++ b/android/res/layout/item_permission.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
diff --git a/android/res/layout/item_permissions_note.xml b/android/res/layout/item_permissions_note.xml
new file mode 100644
index 0000000000..c86857c7b6
--- /dev/null
+++ b/android/res/layout/item_permissions_note.xml
@@ -0,0 +1,17 @@
+
+
+
+
diff --git a/android/res/layout/item_permissions_title.xml b/android/res/layout/item_permissions_title.xml
new file mode 100644
index 0000000000..6265a2c3a8
--- /dev/null
+++ b/android/res/layout/item_permissions_title.xml
@@ -0,0 +1,21 @@
+
+
+
+
diff --git a/android/res/values-fr/strings.xml b/android/res/values-fr/strings.xml
index f7203d00a8..592d4bcaab 100644
--- a/android/res/values-fr/strings.xml
+++ b/android/res/values-fr/strings.xml
@@ -248,7 +248,7 @@
Nous espérons que vous appréciez l\'utilisation de MAPS.ME ! Si oui, veuillez évaluer l\'appli ou laisser une critique sur l\'App Store. Cela prend moins d\'une minute, mais peut vraiment nous aider. Merci pour votre soutien !
- Non, merci
+ Hé, regarde mon épingle sur MAPS.ME ! %1$s ou %2$s. Les cartes hors ligne ne sont pas installées ? Les télécharger ici : http://maps.me/get
Hé, regarde mon épingle sur MAPS.ME ! %1$s ou %2$s. Les cartes hors ligne ne sont pas installées ? Les télécharger ici : http://maps.me/get
diff --git a/android/res/values-land/dimens.xml b/android/res/values-land/dimens.xml
index 709766d3ef..cc97cfdd29 100644
--- a/android/res/values-land/dimens.xml
+++ b/android/res/values-land/dimens.xml
@@ -18,4 +18,10 @@
334dp
128dp
-
\ No newline at end of file
+
+ 52dp
+ @dimen/margin_half
+ @dimen/margin_half
+ @dimen/margin_half
+ 200dp
+
diff --git a/android/res/values-pt/strings.xml b/android/res/values-pt/strings.xml
index 02debf709e..5dce2125e7 100644
--- a/android/res/values-pt/strings.xml
+++ b/android/res/values-pt/strings.xml
@@ -133,6 +133,8 @@
%s descarga falhou
Adicionar novo conjunto
+
+ Adicionar aos Favoritos
Cor de favoritos
diff --git a/android/res/values-ru/strings.xml b/android/res/values-ru/strings.xml
index e45b7e3504..8fb28b8f42 100644
--- a/android/res/values-ru/strings.xml
+++ b/android/res/values-ru/strings.xml
@@ -911,7 +911,7 @@
Последнее обновление: %s
заезд: %s
выезд: %s
- Добавить на карту
+ Добавить место на карту
Отправить всем пользователям?
@@ -962,6 +962,7 @@
Что-то не работает
Принять
+ Принять и продолжить
Отклонить
Умный в гору не пойдет
@@ -1110,4 +1111,6 @@
Более подробная информация — в этом руководстве.
Латинская транслитерация
Если у улицы или объекта нет названия на вашем языке, то мы покажем его латиницей.
+ Узнать больше
+ Выход
diff --git a/android/res/values-sw600dp-land/dimens.xml b/android/res/values-sw600dp-land/dimens.xml
new file mode 100644
index 0000000000..da53b2d1d0
--- /dev/null
+++ b/android/res/values-sw600dp-land/dimens.xml
@@ -0,0 +1,4 @@
+
+
+ 360dp
+
diff --git a/android/res/values-sw600dp/dimens.xml b/android/res/values-sw600dp/dimens.xml
index b32a2a74bb..e12c25c085 100644
--- a/android/res/values-sw600dp/dimens.xml
+++ b/android/res/values-sw600dp/dimens.xml
@@ -7,4 +7,7 @@
40dp
36dp
80dp
+
+ 480dp
+ 360dp
diff --git a/android/res/values-w1020dp-land/strings.xml b/android/res/values-w1020dp-land/strings.xml
new file mode 100644
index 0000000000..75eb6cbcc6
--- /dev/null
+++ b/android/res/values-w1020dp-land/strings.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/res/values/colors.xml b/android/res/values/colors.xml
index 44afeee8d2..c9b72d0a7e 100644
--- a/android/res/values/colors.xml
+++ b/android/res/values/colors.xml
@@ -20,6 +20,7 @@
#DE000000
#8A000000
#61000000
+ #0A000000
#14000000
#1E000000
#3D000000
diff --git a/android/res/values/dimens.xml b/android/res/values/dimens.xml
index 47dbcd4d5a..ba530841e0 100644
--- a/android/res/values/dimens.xml
+++ b/android/res/values/dimens.xml
@@ -1,5 +1,6 @@
+ - -1
40dp
@@ -188,4 +189,12 @@
20dp
72dp
+
+ 80dp
+ @dimen/margin_base
+ @dimen/margin_base
+ @dimen/margin_base
+ @dimen/match_parent
+ 40dp
+ 240dp
diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml
index 746bce1972..2c1c66d2dc 100644
--- a/android/res/values/strings.xml
+++ b/android/res/values/strings.xml
@@ -806,6 +806,19 @@
Enable updates notifications
Help us find you
In order for you to use navigation and the other app functions, MAPS.ME needs access to your geoposition.
+ Allow MAPS.ME access to storage and location
+ So you can download maps, see places and traffic near you and use navigation.
+ Grant access
+ Change permissions settings in your device. Needs a storage access to use MAPS.ME.
+ MAPS.ME needs access to
+ Storage
+ To save and use downloaded maps offline and save bookmarks.
+ Location
+ To see places and traffic near you and use navigation.
+ You can also change a destination to save downloaded maps.
+ Welcome to MAPS.ME
+ Free, fast, detailed and entirely offline maps with turn-by-turn navigation.
+ By launching the application, you agree to <a href=\"http://legal.my.com/us/maps/tou/\">Terms</a> of Use and <a href=\"https://legal.my.com/us/maps/privacy/\">Privacy Policy</a>.
Change location
No object can be located here
Log in so other users can see the changes that you have made
@@ -966,6 +979,7 @@
Something is not working
Accept
+ Accept and continue
Decline
Better go about than fall into the ditch
@@ -1122,4 +1136,6 @@
For more information please check this guide.
Transliteration into Latin
If a street or an object doesn\'t have a name in your language, it will be spelt using the Latin alphabet.
+ Learn more
+ Exit
diff --git a/android/src/com/mapswithme/maps/MapFragment.java b/android/src/com/mapswithme/maps/MapFragment.java
index 5222840e11..9450701c0a 100644
--- a/android/src/com/mapswithme/maps/MapFragment.java
+++ b/android/src/com/mapswithme/maps/MapFragment.java
@@ -16,8 +16,9 @@ import android.view.View;
import android.view.ViewGroup;
import com.mapswithme.maps.base.BaseMwmFragment;
+import com.mapswithme.maps.location.LocationHelper;
import com.mapswithme.util.UiUtils;
-import com.mapswithme.util.statistics.PushwooshHelper;
+import com.mapswithme.util.concurrency.UiThread;
public class MapFragment extends BaseMwmFragment
implements View.OnTouchListener,
@@ -166,12 +167,25 @@ public class MapFragment extends BaseMwmFragment
getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
final float exactDensityDpi = metrics.densityDpi;
- if (!nativeCreateEngine(surface, (int) exactDensityDpi, SplashActivity.isFirstStart()))
+ final boolean firstStart = SplashActivity.isFirstStart();
+ if (!nativeCreateEngine(surface, (int) exactDensityDpi, firstStart))
{
reportUnsupported();
return;
}
+ if (firstStart)
+ {
+ UiThread.runLater(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ LocationHelper.INSTANCE.onExitFromFirstRun();
+ }
+ });
+ }
+
mContextCreated = true;
onRenderingInitialized();
}
diff --git a/android/src/com/mapswithme/maps/MwmActivity.java b/android/src/com/mapswithme/maps/MwmActivity.java
index 6b1fab373f..3689fedc74 100644
--- a/android/src/com/mapswithme/maps/MwmActivity.java
+++ b/android/src/com/mapswithme/maps/MwmActivity.java
@@ -27,6 +27,7 @@ import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.ImageButton;
+import android.widget.Toast;
import com.mapswithme.maps.Framework.MapObjectListener;
import com.mapswithme.maps.activity.CustomNavigateUpListener;
@@ -88,11 +89,13 @@ import com.mapswithme.util.Animations;
import com.mapswithme.util.BottomSheetHelper;
import com.mapswithme.util.Counters;
import com.mapswithme.util.InputUtils;
+import com.mapswithme.util.PermissionsUtils;
import com.mapswithme.util.ThemeSwitcher;
import com.mapswithme.util.ThemeUtils;
import com.mapswithme.util.UiUtils;
import com.mapswithme.util.Utils;
import com.mapswithme.util.concurrency.UiThread;
+import com.mapswithme.util.permissions.PermissionsResult;
import com.mapswithme.util.sharing.ShareOption;
import com.mapswithme.util.sharing.SharingHelper;
import com.mapswithme.util.statistics.AlohaHelper;
@@ -131,6 +134,8 @@ public class MwmActivity extends BaseMwmFragmentActivity
private static final String STATE_MAP_OBJECT = "MapObject";
private static final String EXTRA_LOCATION_DIALOG_IS_ANNOYING = "LOCATION_DIALOG_IS_ANNOYING";
+ private static final int LOCATION_REQUEST = 1;
+
// Map tasks that we run AFTER rendering initialized
private final Stack mTasks = new Stack<>();
private final StoragePathManager mPathManager = new StoragePathManager();
@@ -186,11 +191,20 @@ public class MwmActivity extends BaseMwmFragmentActivity
@Override
public void onClick(View v)
{
- mLocationErrorDialogAnnoying = false;
- LocationHelper.INSTANCE.switchToNextMode();
- LocationHelper.INSTANCE.restart();
Statistics.INSTANCE.trackEvent(Statistics.EventName.TOOLBAR_MY_POSITION);
AlohaHelper.logClick(AlohaHelper.TOOLBAR_MY_POSITION);
+
+ if (!PermissionsUtils.isLocationGranted())
+ {
+ if (PermissionsUtils.isLocationExplanationNeeded(MwmActivity.this))
+ PermissionsUtils.requestLocationPermission(MwmActivity.this, LOCATION_REQUEST);
+ else
+ Toast.makeText(MwmActivity.this, R.string.enable_location_services, Toast.LENGTH_SHORT)
+ .show();
+ return;
+ }
+
+ myPositionClick();
}
};
@@ -309,6 +323,13 @@ public class MwmActivity extends BaseMwmFragmentActivity
runTasks();
}
+ private void myPositionClick()
+ {
+ mLocationErrorDialogAnnoying = false;
+ LocationHelper.INSTANCE.switchToNextMode();
+ LocationHelper.INSTANCE.restart();
+ }
+
private void runTasks()
{
while (!mTasks.isEmpty())
@@ -961,6 +982,19 @@ public class MwmActivity extends BaseMwmFragmentActivity
mFilterController.onRestoreState(savedInstanceState);
}
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
+ @NonNull int[] grantResults)
+ {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+ if (requestCode != LOCATION_REQUEST || grantResults.length == 0)
+ return;
+
+ PermissionsResult result = PermissionsUtils.computePermissionsResult(permissions, grantResults);
+ if (result.isLocationGranted())
+ myPositionClick();
+ }
+
@Override
protected void onNewIntent(Intent intent)
{
diff --git a/android/src/com/mapswithme/maps/SplashActivity.java b/android/src/com/mapswithme/maps/SplashActivity.java
index bb3024bb32..d1fe3946a3 100644
--- a/android/src/com/mapswithme/maps/SplashActivity.java
+++ b/android/src/com/mapswithme/maps/SplashActivity.java
@@ -7,13 +7,16 @@ import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.support.v4.app.DialogFragment;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import com.mapswithme.maps.editor.ViralFragment;
import com.mapswithme.maps.news.BaseNewsFragment;
-import com.mapswithme.maps.news.FirstStartFragment;
import com.mapswithme.maps.news.NewsFragment;
+import com.mapswithme.maps.news.WelcomeDialogFragment;
+import com.mapswithme.maps.permissions.PermissionsDialogFragment;
+import com.mapswithme.maps.permissions.StoragePermissionsDialogFragment;
import com.mapswithme.util.Config;
import com.mapswithme.util.Counters;
import com.mapswithme.util.PermissionsUtils;
@@ -27,18 +30,31 @@ public class SplashActivity extends AppCompatActivity
public static final String EXTRA_INTENT = "extra_intent";
private static final String EXTRA_ACTIVITY_TO_START = "extra_activity_to_start";
private static final int REQUEST_PERMISSIONS = 1;
+ private static final long FIRST_START_DELAY = 1000;
private static final long DELAY = 100;
// The first launch of application ever - onboarding screen will be shown.
private static boolean sFirstStart;
private View mIvLogo;
+ private View mAppName;
private boolean mPermissionsGranted;
+ private boolean mNeedStoragePermission;
private boolean mCanceled;
@NonNull
- private final Runnable mDelayedTask = new Runnable()
+ private final Runnable mPermissionsDelayedTask = new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ PermissionsDialogFragment.show(SplashActivity.this, REQUEST_PERMISSIONS);
+ }
+ };
+
+ @NonNull
+ private final Runnable mInitCoreDelayedTask = new Runnable()
{
@Override
public void run()
@@ -47,11 +63,11 @@ public class SplashActivity extends AppCompatActivity
// Run delayed task because resumeDialogs() must see the actual value of mCanceled flag,
// since onPause() callback can be blocked because of UI thread is busy with framework
// initialization.
- UiThread.runLater(mFinalTask);
+ UiThread.runLater(mFinalDelayedTask);
}
};
@NonNull
- private final Runnable mFinalTask = new Runnable()
+ private final Runnable mFinalDelayedTask = new Runnable()
{
@Override
public void run()
@@ -79,8 +95,9 @@ public class SplashActivity extends AppCompatActivity
protected void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
- UiThread.cancelDelayedTasks(mDelayedTask);
- UiThread.cancelDelayedTasks(mFinalTask);
+ UiThread.cancelDelayedTasks(mPermissionsDelayedTask);
+ UiThread.cancelDelayedTasks(mInitCoreDelayedTask);
+ UiThread.cancelDelayedTasks(mFinalDelayedTask);
Counters.initCounters(this);
initView();
}
@@ -91,43 +108,60 @@ public class SplashActivity extends AppCompatActivity
super.onResume();
mCanceled = false;
mPermissionsGranted = PermissionsUtils.isExternalStorageGranted();
+ DialogFragment storagePermissionsDialog = StoragePermissionsDialogFragment.find(this);
+ DialogFragment permissionsDialog = PermissionsDialogFragment.find(this);
if (!mPermissionsGranted)
{
-// TODO requestPermissions after Permissions dialog
- PermissionsUtils.requestPermissions(this, REQUEST_PERMISSIONS);
+ if (mNeedStoragePermission || storagePermissionsDialog != null)
+ {
+ if (permissionsDialog != null)
+ permissionsDialog.dismiss();
+ if (storagePermissionsDialog == null)
+ StoragePermissionsDialogFragment.show(this);
+ return;
+ }
+ permissionsDialog = PermissionsDialogFragment.find(this);
+ if (permissionsDialog == null)
+ UiThread.runLater(mPermissionsDelayedTask, FIRST_START_DELAY);
+
return;
}
- UiThread.runLater(mDelayedTask, DELAY);
+ if (permissionsDialog != null)
+ permissionsDialog.dismiss();
+
+ if (storagePermissionsDialog != null)
+ storagePermissionsDialog.dismiss();
+
+ UiThread.runLater(mInitCoreDelayedTask, DELAY);
}
@Override
protected void onPause()
{
mCanceled = true;
- UiThread.cancelDelayedTasks(mDelayedTask);
- UiThread.cancelDelayedTasks(mFinalTask);
+ UiThread.cancelDelayedTasks(mPermissionsDelayedTask);
+ UiThread.cancelDelayedTasks(mInitCoreDelayedTask);
+ UiThread.cancelDelayedTasks(mFinalDelayedTask);
super.onPause();
}
private void resumeDialogs()
{
- // TODO show permissions dialog if Permissions is not granted
- if (!mPermissionsGranted || mCanceled)
+ if (mCanceled)
return;
if (Counters.isMigrationNeeded())
{
Config.migrateCountersToSharedPrefs();
Counters.setMigrationExecuted();
- Counters.initCounters(this);
}
- sFirstStart = FirstStartFragment.showOn(this, this);
+ sFirstStart = WelcomeDialogFragment.showOn(this);
if (sFirstStart)
{
PushwooshHelper.nativeProcessFirstLaunch();
- UiUtils.hide(mIvLogo);
+ UiUtils.hide(mIvLogo, mAppName);
return;
}
@@ -136,7 +170,7 @@ public class SplashActivity extends AppCompatActivity
{
if (ViralFragment.shouldDisplay())
{
- UiUtils.hide(mIvLogo);
+ UiUtils.hide(mIvLogo, mAppName);
ViralFragment dialog = new ViralFragment();
dialog.onDismiss(new DialogInterface()
{
@@ -161,7 +195,7 @@ public class SplashActivity extends AppCompatActivity
}
else
{
- UiUtils.hide(mIvLogo);
+ UiUtils.hide(mIvLogo, mAppName);
}
}
@@ -175,16 +209,7 @@ public class SplashActivity extends AppCompatActivity
mPermissionsGranted = PermissionsUtils.computePermissionsResult(permissions, grantResults)
.isExternalStorageGranted();
-
- if (mPermissionsGranted)
- {
- init();
- resumeDialogs();
- }
- else
- {
- finish();
- }
+ mNeedStoragePermission = !mPermissionsGranted;
}
@Override
@@ -198,6 +223,7 @@ public class SplashActivity extends AppCompatActivity
UiUtils.setupStatusBar(this);
setContentView(R.layout.activity_splash);
mIvLogo = findViewById(R.id.iv__logo);
+ mAppName = findViewById(R.id.tv__app_name);
}
private void init()
diff --git a/android/src/com/mapswithme/maps/base/BaseMwmDialogFragment.java b/android/src/com/mapswithme/maps/base/BaseMwmDialogFragment.java
index d8833f9694..95ffff2549 100644
--- a/android/src/com/mapswithme/maps/base/BaseMwmDialogFragment.java
+++ b/android/src/com/mapswithme/maps/base/BaseMwmDialogFragment.java
@@ -5,6 +5,7 @@ import android.support.annotation.Nullable;
import android.support.annotation.StyleRes;
import android.support.v4.app.DialogFragment;
+import com.mapswithme.maps.MwmApplication;
import com.mapswithme.maps.R;
import com.mapswithme.util.ThemeUtils;
diff --git a/android/src/com/mapswithme/maps/news/FirstStartFragment.java b/android/src/com/mapswithme/maps/news/FirstStartFragment.java
deleted file mode 100644
index 26c29cc8a4..0000000000
--- a/android/src/com/mapswithme/maps/news/FirstStartFragment.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.mapswithme.maps.news;
-
-import android.app.Dialog;
-import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.app.FragmentActivity;
-import android.support.v4.app.FragmentManager;
-
-import com.mapswithme.maps.BuildConfig;
-import com.mapswithme.maps.R;
-import com.mapswithme.maps.location.LocationHelper;
-import com.mapswithme.util.Counters;
-
-public class FirstStartFragment extends BaseNewsFragment
-{
- private class Adapter extends BaseNewsFragment.Adapter
- {
- @Override
- int getTitles()
- {
- return R.array.first_start_titles;
- }
-
- @Override
- int getSubtitles1()
- {
- return R.array.first_start_subtitles;
- }
-
- @Override
- int getSubtitles2()
- {
- return 0;
- }
-
- @Override
- int getSwitchTitles()
- {
- return R.array.first_start_switch_titles;
- }
-
- @Override
- int getSwitchSubtitles()
- {
- return R.array.first_start_switch_subtitles;
- }
-
- @Override
- int getImages()
- {
- return R.array.first_start_images;
- }
- }
-
- @Override
- BaseNewsFragment.Adapter createAdapter()
- {
- return new Adapter();
- }
-
- @NonNull
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState)
- {
- LocationHelper.INSTANCE.onEnteredIntoFirstRun();
- return super.onCreateDialog(savedInstanceState);
- }
-
- @Override
- protected void onDoneClick()
- {
- super.onDoneClick();
- LocationHelper.INSTANCE.onExitFromFirstRun();
- }
-
- public static boolean showOn(@NonNull FragmentActivity activity,
- @Nullable NewsDialogListener listener)
- {
- if (Counters.getFirstInstallVersion() < BuildConfig.VERSION_CODE)
- return false;
-
- FragmentManager fm = activity.getSupportFragmentManager();
- if (fm.isDestroyed())
- return false;
-
- if (Counters.isFirstStartDialogSeen() &&
- !recreate(activity, FirstStartFragment.class))
- return false;
-
- create(activity, FirstStartFragment.class, listener);
-
- Counters.setFirstStartDialogSeen();
- return true;
- }
-}
diff --git a/android/src/com/mapswithme/maps/news/WelcomeDialogFragment.java b/android/src/com/mapswithme/maps/news/WelcomeDialogFragment.java
new file mode 100644
index 0000000000..8eb73fced7
--- /dev/null
+++ b/android/src/com/mapswithme/maps/news/WelcomeDialogFragment.java
@@ -0,0 +1,135 @@
+package com.mapswithme.maps.news;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.FragmentManager;
+import android.text.Html;
+import android.text.method.LinkMovementMethod;
+import android.view.View;
+import android.view.Window;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.mapswithme.maps.BuildConfig;
+import com.mapswithme.maps.R;
+import com.mapswithme.maps.base.BaseMwmDialogFragment;
+import com.mapswithme.maps.location.LocationHelper;
+import com.mapswithme.util.Counters;
+import com.mapswithme.util.UiUtils;
+
+public class WelcomeDialogFragment extends BaseMwmDialogFragment implements View.OnClickListener
+{
+ @Nullable
+ private BaseNewsFragment.NewsDialogListener mListener;
+
+ public static boolean showOn(@NonNull FragmentActivity activity)
+ {
+ if (Counters.getFirstInstallVersion() < BuildConfig.VERSION_CODE)
+ return false;
+
+ FragmentManager fm = activity.getSupportFragmentManager();
+ if (fm.isDestroyed())
+ return false;
+
+ if (Counters.isFirstStartDialogSeen() &&
+ !recreate(activity))
+ return false;
+
+ create(activity);
+
+ Counters.setFirstStartDialogSeen();
+ return true;
+ }
+
+ private static void create(@NonNull FragmentActivity activity)
+ {
+ final WelcomeDialogFragment fragment = new WelcomeDialogFragment();
+ activity.getSupportFragmentManager()
+ .beginTransaction()
+ .add(fragment, WelcomeDialogFragment.class.getName())
+ .commitAllowingStateLoss();
+ }
+
+ private static boolean recreate(@NonNull FragmentActivity activity)
+ {
+ FragmentManager fm = activity.getSupportFragmentManager();
+ Fragment f = fm.findFragmentByTag(WelcomeDialogFragment.class.getName());
+ if (f == null)
+ return false;
+
+ // If we're here, it means that the user has rotated the screen.
+ // We use different dialog themes for landscape and portrait modes on tablets,
+ // so the fragment should be recreated to be displayed correctly.
+ fm.beginTransaction()
+ .remove(f)
+ .commitAllowingStateLoss();
+ fm.executePendingTransactions();
+ return true;
+ }
+
+ @Override
+ public void onAttach(Activity activity)
+ {
+ super.onAttach(activity);
+ if (activity instanceof BaseNewsFragment.NewsDialogListener)
+ mListener = (BaseNewsFragment.NewsDialogListener) activity;
+ }
+
+ @Override
+ public void onDetach()
+ {
+ mListener = null;
+ super.onDetach();
+ }
+
+ @Override
+ protected int getCustomTheme()
+ {
+ return getFullscreenTheme();
+ }
+
+ @NonNull
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState)
+ {
+ LocationHelper.INSTANCE.onEnteredIntoFirstRun();
+ if (!LocationHelper.INSTANCE.isActive())
+ LocationHelper.INSTANCE.start();
+
+ Dialog res = super.onCreateDialog(savedInstanceState);
+ res.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ res.setCancelable(false);
+
+ View content = View.inflate(getActivity(), R.layout.fragment_welcome, null);
+ res.setContentView(content);
+ content.findViewById(R.id.btn__continue).setOnClickListener(this);
+ ImageView image = (ImageView) content.findViewById(R.id.iv__image);
+ image.setImageResource(R.drawable.img_welcome);
+ TextView title = (TextView) content.findViewById(R.id.tv__title);
+ title.setText(R.string.onboarding_welcome_title);
+ TextView subtitle = (TextView) content.findViewById(R.id.tv__subtitle1);
+ subtitle.setText(R.string.onboarding_welcome_first_subtitle);
+ TextView terms = (TextView) content.findViewById(R.id.tv__subtitle2);
+ UiUtils.show(terms);
+ terms.setText(Html.fromHtml(getString(R.string.onboarding_welcome_second_subtitle)));
+ terms.setMovementMethod(LinkMovementMethod.getInstance());
+
+ return res;
+ }
+
+ @Override
+ public void onClick(View v)
+ {
+ if (v.getId() != R.id.btn__continue)
+ return;
+
+ if (mListener != null)
+ mListener.onDialogDone();
+ dismiss();
+ }
+}
diff --git a/android/src/com/mapswithme/maps/permissions/BasePermissionsDialogFragment.java b/android/src/com/mapswithme/maps/permissions/BasePermissionsDialogFragment.java
new file mode 100644
index 0000000000..7e2958a1f1
--- /dev/null
+++ b/android/src/com/mapswithme/maps/permissions/BasePermissionsDialogFragment.java
@@ -0,0 +1,160 @@
+package com.mapswithme.maps.permissions;
+
+import android.app.Dialog;
+import android.os.Bundle;
+import android.support.annotation.DrawableRes;
+import android.support.annotation.IdRes;
+import android.support.annotation.LayoutRes;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.StringRes;
+import android.support.v4.app.DialogFragment;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.FragmentManager;
+import android.view.View;
+import android.view.Window;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.mapswithme.maps.R;
+import com.mapswithme.maps.base.BaseMwmDialogFragment;
+import com.mapswithme.util.PermissionsUtils;
+import com.mapswithme.util.log.Logger;
+import com.mapswithme.util.log.LoggerFactory;
+
+abstract class BasePermissionsDialogFragment extends BaseMwmDialogFragment
+ implements View.OnClickListener
+{
+ private static final String TAG = BasePermissionsDialogFragment.class.getName();
+ private static final Logger LOGGER = LoggerFactory.INSTANCE.getLogger(LoggerFactory.Type.MISC);
+ private static final String ARG_REQUEST_CODE = "arg_request_code";
+
+ private int mRequestCode;
+
+ @SuppressWarnings("TryWithIdenticalCatches")
+ @Nullable
+ public static DialogFragment show(@NonNull FragmentActivity activity, int requestCode,
+ @NonNull Class extends BaseMwmDialogFragment> dialogClass)
+ {
+ final FragmentManager fm = activity.getSupportFragmentManager();
+ if (fm.isDestroyed())
+ return null;
+
+ Fragment f = fm.findFragmentByTag(dialogClass.getName());
+ if (f != null)
+ return (DialogFragment) f;
+
+ BaseMwmDialogFragment dialog = null;
+ try
+ {
+ dialog = dialogClass.newInstance();
+ final Bundle args = new Bundle();
+ args.putInt(ARG_REQUEST_CODE, requestCode);
+ dialog.setArguments(args);
+ dialog.show(fm, dialogClass.getName());
+ }
+ catch (java.lang.InstantiationException e)
+ {
+ LOGGER.e(TAG, "Can't instantiate " + dialogClass.getName() + " fragment", e);
+ }
+ catch (IllegalAccessException e)
+ {
+ LOGGER.e(TAG, "Can't instantiate " + dialogClass.getName() + " fragment", e);
+ }
+
+ return dialog;
+ }
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ Bundle args = getArguments();
+ if (args != null)
+ mRequestCode = args.getInt(ARG_REQUEST_CODE);
+ }
+
+ @Override
+ protected int getCustomTheme()
+ {
+ // We can't read actual theme, because permissions are not granted yet.
+ return R.style.MwmTheme_DialogFragment_Fullscreen;
+ }
+
+ @NonNull
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState)
+ {
+ Dialog res = super.onCreateDialog(savedInstanceState);
+ res.requestWindowFeature(Window.FEATURE_NO_TITLE);
+
+ View content = View.inflate(getActivity(), getLayoutRes(), null);
+ res.setContentView(content);
+ View button = content.findViewById(getFirstActionButton());
+ if (button != null)
+ button.setOnClickListener(this);
+ button = content.findViewById(getContinueActionButton());
+ if (button != null)
+ button.setOnClickListener(this);
+
+ ImageView image = (ImageView) content.findViewById(R.id.iv__image);
+ if (image != null)
+ image.setImageResource(getImageRes());
+ TextView title = (TextView) content.findViewById(R.id.tv__title);
+ if (title != null)
+ title.setText(getTitleRes());
+ TextView subtitle = (TextView) content.findViewById(R.id.tv__subtitle1);
+ if (subtitle != null)
+ subtitle.setText(getSubtitleRes());
+
+ return res;
+ }
+
+ @DrawableRes
+ protected int getImageRes()
+ {
+ return 0;
+ }
+
+ @StringRes
+ protected int getTitleRes()
+ {
+ return 0;
+ }
+
+ @StringRes
+ protected int getSubtitleRes()
+ {
+ return 0;
+ }
+
+ @LayoutRes
+ abstract protected int getLayoutRes();
+
+ @IdRes
+ protected abstract int getFirstActionButton();
+
+ protected abstract void onFirstActionClick();
+
+ @IdRes
+ protected abstract int getContinueActionButton();
+
+ @Override
+ public void onClick(@NonNull View v)
+ {
+ if (v.getId() == getFirstActionButton())
+ {
+ onFirstActionClick();
+ return;
+ }
+
+ if (v.getId() == getContinueActionButton())
+ PermissionsUtils.requestPermissions(getActivity(), mRequestCode);
+ }
+
+ protected int getRequestCode()
+ {
+ return mRequestCode;
+ }
+}
diff --git a/android/src/com/mapswithme/maps/permissions/PermissionsAdapter.java b/android/src/com/mapswithme/maps/permissions/PermissionsAdapter.java
new file mode 100644
index 0000000000..5106f9ac3e
--- /dev/null
+++ b/android/src/com/mapswithme/maps/permissions/PermissionsAdapter.java
@@ -0,0 +1,176 @@
+package com.mapswithme.maps.permissions;
+
+import android.support.annotation.DrawableRes;
+import android.support.annotation.IntDef;
+import android.support.annotation.NonNull;
+import android.support.annotation.StringRes;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.mapswithme.maps.R;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+class PermissionsAdapter extends RecyclerView.Adapter
+{
+ static final int TYPE_TITLE = 0;
+ static final int TYPE_PERMISSION = 1;
+ static final int TYPE_NOTE = 2;
+
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({ TYPE_TITLE, TYPE_PERMISSION, TYPE_NOTE})
+ @interface ViewHolderType {}
+
+ private static final List ITEMS;
+ static {
+ ArrayList items = new ArrayList<>();
+ items.add(new PermissionItem(TYPE_TITLE, R.string.onboarding_detail_permissions_title, 0, 0));
+ items.add(new PermissionItem(TYPE_PERMISSION,
+ R.string.onboarding_detail_permissions_storage_title,
+ R.string.onboarding_detail_permissions_storage_message,
+ R.drawable.ic_storage_permission));
+ items.add(new PermissionItem(TYPE_PERMISSION,
+ R.string.onboarding_detail_permissions_location_title,
+ R.string.onboarding_detail_permissions_location_message,
+ R.drawable.ic_navigation_permission));
+ items.add(new PermissionItem(TYPE_NOTE, 0,
+ R.string.onboarding_detail_permissions_storage_path_message, 0));
+ ITEMS = Collections.unmodifiableList(items);
+ }
+
+ @ViewHolderType
+ @Override
+ public int getItemViewType(int position)
+ {
+ return ITEMS.get(position).mType;
+ }
+
+ @Override
+ public ViewHolder onCreateViewHolder(ViewGroup parent, @ViewHolderType int viewType)
+ {
+ switch (viewType)
+ {
+ case TYPE_NOTE:
+ return new NoteViewHolder(LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.item_permissions_note, parent, false));
+ case TYPE_PERMISSION:
+ return new PermissionViewHolder(LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.item_permission, parent,
+ false));
+ case TYPE_TITLE:
+ return new TitleViewHolder(LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.item_permissions_title, parent,
+ false));
+ default:
+ return null;
+ }
+ }
+
+ @Override
+ public void onBindViewHolder(ViewHolder holder, int position)
+ {
+ holder.bind(ITEMS.get(position));
+ }
+
+ @Override
+ public int getItemCount()
+ {
+ return ITEMS.size();
+ }
+
+ private static final class PermissionItem
+ {
+ @ViewHolderType
+ private final int mType;
+ @StringRes
+ private final int mTitle;
+ @StringRes
+ private final int mMessage;
+ @DrawableRes
+ private final int mIcon;
+
+ PermissionItem(@ViewHolderType int type, @StringRes int title, @StringRes int message, int icon)
+ {
+ mType = type;
+ mTitle = title;
+ mMessage = message;
+ mIcon = icon;
+ }
+ }
+
+ static abstract class ViewHolder extends RecyclerView.ViewHolder
+ {
+ public ViewHolder(@NonNull View itemView)
+ {
+ super(itemView);
+ }
+
+ abstract void bind(@NonNull PermissionItem item);
+ }
+
+ private static class TitleViewHolder extends ViewHolder
+ {
+ private final TextView mTitle;
+
+ TitleViewHolder(@NonNull View itemView)
+ {
+ super(itemView);
+
+ mTitle = (TextView) itemView.findViewById(R.id.tv__title);
+ }
+
+ @Override
+ void bind(@NonNull PermissionItem item)
+ {
+ mTitle.setText(item.mTitle);
+ }
+ }
+
+ private static class PermissionViewHolder extends ViewHolder
+ {
+ private final ImageView mIcon;
+ private final TextView mTitle;
+ private final TextView mMessage;
+
+ PermissionViewHolder(@NonNull View itemView)
+ {
+ super(itemView);
+ mIcon = (ImageView) itemView.findViewById(R.id.iv__permission_icon);
+ mTitle = (TextView) itemView.findViewById(R.id.tv__permission_title);
+ mMessage = (TextView) itemView.findViewById(R.id.tv__permission_message);
+ }
+
+ @Override
+ void bind(@NonNull PermissionItem item)
+ {
+ mIcon.setImageResource(item.mIcon);
+ mTitle.setText(item.mTitle);
+ mMessage.setText(item.mMessage);
+ }
+ }
+
+ private static class NoteViewHolder extends ViewHolder
+ {
+ private final TextView mMessage;
+
+ NoteViewHolder(@NonNull View itemView)
+ {
+ super(itemView);
+ mMessage = (TextView) itemView.findViewById(R.id.tv__note);
+ }
+
+ @Override
+ void bind(@NonNull PermissionItem item)
+ {
+ mMessage.setText(item.mMessage);
+ }
+ }
+}
diff --git a/android/src/com/mapswithme/maps/permissions/PermissionsDetailDialogFragment.java b/android/src/com/mapswithme/maps/permissions/PermissionsDetailDialogFragment.java
new file mode 100644
index 0000000000..ab7e5136b0
--- /dev/null
+++ b/android/src/com/mapswithme/maps/permissions/PermissionsDetailDialogFragment.java
@@ -0,0 +1,80 @@
+package com.mapswithme.maps.permissions;
+
+import android.app.Dialog;
+import android.os.Bundle;
+import android.support.annotation.IdRes;
+import android.support.annotation.LayoutRes;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.app.DialogFragment;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.FragmentManager;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+
+import com.mapswithme.maps.R;
+
+public class PermissionsDetailDialogFragment extends BasePermissionsDialogFragment
+{
+ @Nullable
+ public static DialogFragment show(@NonNull FragmentActivity activity, int requestCode)
+ {
+ DialogFragment dialog = BasePermissionsDialogFragment.show(activity, requestCode,
+ PermissionsDetailDialogFragment.class);
+ if (dialog != null)
+ dialog.setCancelable(true);
+ return dialog;
+ }
+
+ @Nullable
+ public static DialogFragment find(@NonNull FragmentActivity activity)
+ {
+ final FragmentManager fm = activity.getSupportFragmentManager();
+ if (fm.isDestroyed())
+ return null;
+
+ Fragment f = fm.findFragmentByTag(PermissionsDetailDialogFragment.class.getName());
+ return (DialogFragment) f;
+ }
+
+ @NonNull
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState)
+ {
+ Dialog res = super.onCreateDialog(savedInstanceState);
+ RecyclerView permissions = (RecyclerView) res.findViewById(R.id.rv__permissions);
+ permissions.setLayoutManager(new LinearLayoutManager(getContext(),
+ LinearLayoutManager.VERTICAL, false));
+ permissions.setAdapter(new PermissionsAdapter());
+
+ return res;
+ }
+
+ @LayoutRes
+ @Override
+ protected int getLayoutRes()
+ {
+ return R.layout.fragment_detail_permissions;
+ }
+
+ @IdRes
+ @Override
+ protected int getFirstActionButton()
+ {
+ return R.id.btn__back;
+ }
+
+ @Override
+ protected void onFirstActionClick()
+ {
+ dismiss();
+ }
+
+ @IdRes
+ @Override
+ protected int getContinueActionButton()
+ {
+ return R.id.btn__continue;
+ }
+}
diff --git a/android/src/com/mapswithme/maps/permissions/PermissionsDialogFragment.java b/android/src/com/mapswithme/maps/permissions/PermissionsDialogFragment.java
new file mode 100644
index 0000000000..1ad2ff2ae8
--- /dev/null
+++ b/android/src/com/mapswithme/maps/permissions/PermissionsDialogFragment.java
@@ -0,0 +1,98 @@
+package com.mapswithme.maps.permissions;
+
+import android.content.DialogInterface;
+import android.support.annotation.DrawableRes;
+import android.support.annotation.IdRes;
+import android.support.annotation.LayoutRes;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.StringRes;
+import android.support.v4.app.DialogFragment;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.FragmentManager;
+
+import com.mapswithme.maps.R;
+
+public class PermissionsDialogFragment extends BasePermissionsDialogFragment
+{
+ @Nullable
+ public static DialogFragment show(@NonNull FragmentActivity activity, int requestCode)
+ {
+ return BasePermissionsDialogFragment.show(activity, requestCode, PermissionsDialogFragment.class);
+ }
+
+ public static DialogFragment find(@NonNull FragmentActivity activity)
+ {
+ final FragmentManager fm = activity.getSupportFragmentManager();
+ if (fm.isDestroyed())
+ return null;
+
+ Fragment f = fm.findFragmentByTag(PermissionsDialogFragment.class.getName());
+ return (DialogFragment) f;
+ }
+
+ @DrawableRes
+ @Override
+ protected int getImageRes()
+ {
+ return R.drawable.img_permissions;
+ }
+
+ @StringRes
+ @Override
+ protected int getTitleRes()
+ {
+ return R.string.onboarding_permissions_title;
+ }
+
+ @StringRes
+ @Override
+ protected int getSubtitleRes()
+ {
+ return R.string.onboarding_permissions_message;
+ }
+
+ @LayoutRes
+ @Override
+ protected int getLayoutRes()
+ {
+ return R.layout.fragment_permissions;
+ }
+
+ @IdRes
+ @Override
+ protected int getFirstActionButton()
+ {
+ return R.id.btn__learn_more;
+ }
+
+ @Override
+ protected void onFirstActionClick()
+ {
+ PermissionsDetailDialogFragment.show(getActivity(), getRequestCode());
+ }
+
+ @IdRes
+ @Override
+ protected int getContinueActionButton()
+ {
+ return R.id.btn__continue;
+ }
+
+ @Override
+ public void dismiss()
+ {
+ DialogFragment dialog = PermissionsDetailDialogFragment.find(getActivity());
+ if (dialog != null)
+ dialog.dismiss();
+ super.dismiss();
+ }
+
+ @Override
+ public void onCancel(DialogInterface dialog)
+ {
+ super.onCancel(dialog);
+ getActivity().finish();
+ }
+}
diff --git a/android/src/com/mapswithme/maps/permissions/StoragePermissionsDialogFragment.java b/android/src/com/mapswithme/maps/permissions/StoragePermissionsDialogFragment.java
new file mode 100644
index 0000000000..f6e4f1c9f9
--- /dev/null
+++ b/android/src/com/mapswithme/maps/permissions/StoragePermissionsDialogFragment.java
@@ -0,0 +1,106 @@
+package com.mapswithme.maps.permissions;
+
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.Settings;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.app.DialogFragment;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.FragmentManager;
+import android.view.View;
+import android.view.Window;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.mapswithme.maps.R;
+import com.mapswithme.maps.SplashActivity;
+import com.mapswithme.maps.base.BaseMwmDialogFragment;
+
+public class StoragePermissionsDialogFragment extends BaseMwmDialogFragment implements View.OnClickListener
+{
+ @Nullable
+ public static DialogFragment show(@NonNull FragmentActivity activity)
+ {
+ final FragmentManager fm = activity.getSupportFragmentManager();
+ if (fm.isDestroyed())
+ return null;
+
+ Fragment f = fm.findFragmentByTag(StoragePermissionsDialogFragment.class.getName());
+ if (f != null)
+ return (DialogFragment) f;
+
+ StoragePermissionsDialogFragment dialog = new StoragePermissionsDialogFragment();
+ dialog.show(fm, StoragePermissionsDialogFragment.class.getName());
+
+ return dialog;
+ }
+
+ public static DialogFragment find(SplashActivity activity)
+ {
+ final FragmentManager fm = activity.getSupportFragmentManager();
+ if (fm.isDestroyed())
+ return null;
+
+ Fragment f = fm.findFragmentByTag(StoragePermissionsDialogFragment.class.getName());
+ return (DialogFragment) f;
+ }
+
+ @Override
+ protected int getCustomTheme()
+ {
+ // We can't read actual theme, because permissions are not granted yet.
+ return R.style.MwmTheme_DialogFragment_Fullscreen;
+ }
+
+ @NonNull
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState)
+ {
+ Dialog res = super.onCreateDialog(savedInstanceState);
+ res.requestWindowFeature(Window.FEATURE_NO_TITLE);
+
+ View content = View.inflate(getActivity(), R.layout.fragment_storage_permissions, null);
+ res.setContentView(content);
+ content.findViewById(R.id.btn__exit).setOnClickListener(this);
+ content.findViewById(R.id.btn__settings).setOnClickListener(this);
+ ImageView image = (ImageView) content.findViewById(R.id.iv__image);
+ image.setImageResource(R.drawable.img_no_storage_permission);
+ TextView title = (TextView) content.findViewById(R.id.tv__title);
+ title.setText(R.string.onboarding_storage_permissions_title);
+ TextView subtitle = (TextView) content.findViewById(R.id.tv__subtitle1);
+ subtitle.setText(R.string.onboarding_storage_permissions_message);
+
+ return res;
+ }
+
+ @Override
+ public void onClick(@NonNull View v)
+ {
+ switch (v.getId())
+ {
+ case R.id.btn__exit:
+ getActivity().finish();
+ break;
+
+ case R.id.btn__settings:
+ Intent intent = new Intent();
+ intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
+ Uri uri = Uri.fromParts("package", getContext().getPackageName(), null);
+ intent.setData(uri);
+ startActivity(intent);
+ break;
+ }
+ }
+
+ @Override
+ public void onCancel(DialogInterface dialog)
+ {
+ super.onCancel(dialog);
+ getActivity().finish();
+ }
+}
diff --git a/android/src/com/mapswithme/util/Config.java b/android/src/com/mapswithme/util/Config.java
index 77f9bebdce..007643f131 100644
--- a/android/src/com/mapswithme/util/Config.java
+++ b/android/src/com/mapswithme/util/Config.java
@@ -2,6 +2,7 @@ package com.mapswithme.util;
import android.support.annotation.NonNull;
+import com.mapswithme.maps.BuildConfig;
import com.mapswithme.maps.MwmApplication;
import static com.mapswithme.util.Counters.KEY_APP_FIRST_INSTALL_FLAVOR;
@@ -104,14 +105,16 @@ public final class Config
public static void migrateCountersToSharedPrefs()
{
+ int version = getInt(KEY_APP_FIRST_INSTALL_VERSION, BuildConfig.VERSION_CODE);
MwmApplication.prefs()
.edit()
.putInt(KEY_APP_LAUNCH_NUMBER, getInt(KEY_APP_LAUNCH_NUMBER))
- .putInt(KEY_APP_FIRST_INSTALL_VERSION, getInt(KEY_APP_FIRST_INSTALL_VERSION))
+ .putInt(KEY_APP_FIRST_INSTALL_VERSION, version)
.putString(KEY_APP_FIRST_INSTALL_FLAVOR, getString(KEY_APP_FIRST_INSTALL_FLAVOR))
.putLong(KEY_APP_LAST_SESSION_TIMESTAMP, getLong(KEY_APP_LAST_SESSION_TIMESTAMP))
.putInt(KEY_APP_SESSION_NUMBER, getInt(KEY_APP_SESSION_NUMBER))
- .putBoolean(KEY_MISC_FIRST_START_DIALOG_SEEN, getBool(KEY_MISC_FIRST_START_DIALOG_SEEN))
+ .putBoolean(KEY_MISC_FIRST_START_DIALOG_SEEN,
+ getBool(KEY_MISC_FIRST_START_DIALOG_SEEN))
.putInt(KEY_MISC_NEWS_LAST_VERSION, getInt(KEY_MISC_NEWS_LAST_VERSION))
.putInt(KEY_LIKES_LAST_RATED_SESSION, getInt(KEY_LIKES_LAST_RATED_SESSION))
.apply();
diff --git a/android/src/com/mapswithme/util/PermissionsUtils.java b/android/src/com/mapswithme/util/PermissionsUtils.java
index 220da3cee7..18b1ea444b 100644
--- a/android/src/com/mapswithme/util/PermissionsUtils.java
+++ b/android/src/com/mapswithme/util/PermissionsUtils.java
@@ -15,8 +15,8 @@ import java.util.Map;
import static android.Manifest.permission.ACCESS_COARSE_LOCATION;
import static android.Manifest.permission.ACCESS_FINE_LOCATION;
-import static android.Manifest.permission.GET_ACCOUNTS;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
+import static android.support.v4.app.ActivityCompat.shouldShowRequestPermissionRationale;
public final class PermissionsUtils
{
@@ -24,8 +24,13 @@ public final class PermissionsUtils
{
WRITE_EXTERNAL_STORAGE,
ACCESS_COARSE_LOCATION,
- ACCESS_FINE_LOCATION,
- GET_ACCOUNTS
+ ACCESS_FINE_LOCATION
+ };
+
+ private static final String[] LOCATION_PERMISSIONS = new String[]
+ {
+ ACCESS_COARSE_LOCATION,
+ ACCESS_FINE_LOCATION
};
private PermissionsUtils() {}
@@ -48,16 +53,17 @@ public final class PermissionsUtils
return checkPermissions().isLocationGranted();
}
+ public static boolean isLocationExplanationNeeded(@NonNull Activity activity)
+ {
+ return shouldShowRequestPermissionRationale(activity, ACCESS_COARSE_LOCATION)
+ || shouldShowRequestPermissionRationale(activity, ACCESS_FINE_LOCATION);
+ }
+
public static boolean isExternalStorageGranted()
{
return checkPermissions().isExternalStorageGranted();
}
- public static boolean isGetAccountsGranted()
- {
- return checkPermissions().isGetAccountsGranted();
- }
-
@NonNull
private static PermissionsResult checkPermissions()
{
@@ -82,13 +88,16 @@ public final class PermissionsUtils
? result.get(ACCESS_COARSE_LOCATION) : false)
|| (result.containsKey(ACCESS_FINE_LOCATION)
? result.get(ACCESS_FINE_LOCATION) : false);
- boolean getAccountsGranted = result.containsKey(GET_ACCOUNTS)
- ? result.get(GET_ACCOUNTS) : false;
- return new PermissionsResult(externalStorageGranted, locationGranted, getAccountsGranted);
+ return new PermissionsResult(externalStorageGranted, locationGranted);
}
public static void requestPermissions(@NonNull Activity activity, int code)
{
ActivityCompat.requestPermissions(activity, PERMISSIONS, code);
}
+
+ public static void requestLocationPermission(@NonNull Activity activity, int code)
+ {
+ ActivityCompat.requestPermissions(activity, LOCATION_PERMISSIONS, code);
+ }
}
diff --git a/android/src/com/mapswithme/util/permissions/PermissionsResult.java b/android/src/com/mapswithme/util/permissions/PermissionsResult.java
index 8f214405b6..9708bbe15c 100644
--- a/android/src/com/mapswithme/util/permissions/PermissionsResult.java
+++ b/android/src/com/mapswithme/util/permissions/PermissionsResult.java
@@ -4,14 +4,11 @@ public final class PermissionsResult
{
private final boolean mExternalStorageGranted;
private final boolean mLocationGranted;
- private final boolean mGetAccountsGranted;
- public PermissionsResult(boolean externalStorageGranted, boolean locationGranted,
- boolean getAccountsGranted)
+ public PermissionsResult(boolean externalStorageGranted, boolean locationGranted)
{
mExternalStorageGranted = externalStorageGranted;
mLocationGranted = locationGranted;
- mGetAccountsGranted = getAccountsGranted;
}
public boolean isExternalStorageGranted()
@@ -23,9 +20,4 @@ public final class PermissionsResult
{
return mLocationGranted;
}
-
- public boolean isGetAccountsGranted()
- {
- return mGetAccountsGranted;
- }
}
diff --git a/iphone/Maps/LocalizedStrings/ar.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/ar.lproj/Localizable.strings
index 3bab91a1ed..be7d98a4bc 100644
--- a/iphone/Maps/LocalizedStrings/ar.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/ar.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "لاستخدام الملاحة والميزات الأخرى، فنحن بحاجة إلى تحديد موقعك الجغرافي.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "تغيير الموقع";
"message_invalid_feature_position" = "لا يمكن تحديد موقع الكائن هنا";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "قبول";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "رفض";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "كتابة بالحروف اللاتينية";
"whatsnew_transliteration_message" = "إذا كان الشارع أو الهدف ليس له اسم بلغتك. فسيتم هجاؤه بالحروف اللاتينية.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/cs.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/cs.lproj/Localizable.strings
index db3cad4635..262855d0d1 100644
--- a/iphone/Maps/LocalizedStrings/cs.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/cs.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "Chcete-li používat navigaci a další funkce, pak potřebujeme přístup k vaší zeměpisné poloze.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Změnit umístění";
"message_invalid_feature_position" = "Objekt zde nemůže být umístěn";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Přijmout";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "Odmítnout";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Transliterace do latinky";
"whatsnew_transliteration_message" = "Pokud ulice nebo objekt nemá název ve vašem jazyce, bude zobrazeno latinkou.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/da.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/da.lproj/Localizable.strings
index 9d10ea3f63..6951f3f3a4 100644
--- a/iphone/Maps/LocalizedStrings/da.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/da.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "For at bruge navigering og andre funktioner skal vi have adgang til din geolokation.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Skift lokation";
"message_invalid_feature_position" = "Et objekt kan ikke placeres her";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Accepter";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "Afvis";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Translitteration til latinsk";
"whatsnew_transliteration_message" = "Hvis en gade eller et objekt ikke har et navn på dit sprog, vil det blive stavet ved hjælp af det latinske alfabet.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/de.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/de.lproj/Localizable.strings
index 0a3348ea44..609712ffca 100644
--- a/iphone/Maps/LocalizedStrings/de.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/de.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "Um Navigation und andere Funktionen zu verwenden, brauchen wir Zugriff auf Ihren Geo-Standort.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Standort wechseln";
"message_invalid_feature_position" = "Ein Objekt kann hier nicht positioniert werden";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Annehmen";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "Ablehnen";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Transliteration ins Lateinische";
"whatsnew_transliteration_message" = "Wenn eine Straße oder ein Objekt in Ihrer Sprache keinen Namen hat, wird er mit lateinischen Buchstaben geschrieben.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/el.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/el.lproj/Localizable.strings
index 5944859ecf..47f8bdd21e 100644
--- a/iphone/Maps/LocalizedStrings/el.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/el.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "Προκειμένου να χρησιμοποιήσετε την πλοήγηση και τις άλλες λειτουργίες του MAPS.ME χρειάζεται πρόσβαση στη γεωγραφική σας θέση.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Αλλαγή τοποθεσίας";
"message_invalid_feature_position" = "Δε μπορεί να εντοπιστεί αντικείμενο εδώ";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Συμφωνώ";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "Διαφωνώ";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Μεταγραφή στα Λατινικά";
"whatsnew_transliteration_message" = "Εάν ένας δρόμος ή ένα αντικείμενο δεν έχει όνομα στη γλώσσα σας, θα διατυπωθεί χρησιμοποιώντας το λατινικό αλφάβητο.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/en-GB.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/en-GB.lproj/Localizable.strings
index a2ea012ff0..73c2995663 100644
--- a/iphone/Maps/LocalizedStrings/en-GB.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/en-GB.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "In order for you to use navigation and the other app functions, MAPS.ME needs access to your geoposition.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Change location";
"message_invalid_feature_position" = "No object can be located here";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Accept";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "Decline";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Transliteration into Latin";
"whatsnew_transliteration_message" = "If a street or an object doesn't have a name in your language, it will be spelt using the Latin alphabet.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/en.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/en.lproj/Localizable.strings
index 409b05ea83..4eb296e4f7 100644
--- a/iphone/Maps/LocalizedStrings/en.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/en.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "In order for you to use navigation and the other app functions, MAPS.ME needs access to your geoposition.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Change location";
"message_invalid_feature_position" = "No object can be located here";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Accept";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "Decline";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Transliteration into Latin";
"whatsnew_transliteration_message" = "If a street or an object doesn't have a name in your language, it will be spelt using the Latin alphabet.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/es.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/es.lproj/Localizable.strings
index 3abe9fd47a..92c05c09b2 100644
--- a/iphone/Maps/LocalizedStrings/es.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/es.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "Para utilizar la navegación y otras funciones, necesitamos acceso a tu geolocalización.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Cambiar ubicación";
"message_invalid_feature_position" = "No se puede ubicar ningún objeto aquí";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Aceptar";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "Declinar";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Transliteración al alfabeto latino";
"whatsnew_transliteration_message" = "Si una calle o un objeto no tiene nombre en su idioma, se escribirá con el alfabeto latino.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/fi.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/fi.lproj/Localizable.strings
index 17251e876f..5e5bfc37ac 100644
--- a/iphone/Maps/LocalizedStrings/fi.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/fi.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "Tarvitsemme sijaintisi käyttääksemme navigointia ja muita ominaisuuksia.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Vaihda sijaintia";
"message_invalid_feature_position" = "Kohdetta ei voida asettaa tänne";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Hyväksy";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "Hylkää";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Translitterointi latinaksi";
"whatsnew_transliteration_message" = "Jos kadulla tai kohteella ei ole nimeä kielelläsi, se kirjoitetetaan latinalaisilla kirjaimilla.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/fr.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/fr.lproj/Localizable.strings
index a50dc14260..eedd689b8e 100644
--- a/iphone/Maps/LocalizedStrings/fr.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/fr.lproj/Localizable.strings
@@ -389,7 +389,7 @@
"appStore_message" = "Nous espérons que vous appréciez l'utilisation de MAPS.ME ! Si oui, veuillez évaluer l'appli ou laisser une critique sur l'App Store. Cela prend moins d'une minute, mais peut vraiment nous aider. Merci pour votre soutien !";
/* No, thanks */
-"no_thanks" = "Non, merci";
+"no_thanks" = "Hé, regarde mon épingle sur MAPS.ME ! %1$@ ou %2$@. Les cartes hors ligne ne sont pas installées ? Les télécharger ici : http://maps.me/get";
/* Share one specific bookmark using SMS, %1$@ contains ge0:// and %2$@ http://ge0.me link. @NOTE non-ascii symbols in the link will make 70 bytes sms instead of 140 */
"bookmark_share_sms" = "Hé, regarde mon épingle sur MAPS.ME ! %1$@ ou %2$@. Les cartes hors ligne ne sont pas installées ? Les télécharger ici : http://maps.me/get";
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "Pour utiliser la navigation et d'autres fonctionnalités, nous devons pouvoir accéder à votre position géographique.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Modifier l'emplacement";
"message_invalid_feature_position" = "Aucun objet ne peut être localisé ici";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Accepter";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "Refuser";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Translittération en latin";
"whatsnew_transliteration_message" = "Si une rue ou un objet n’a pas de nom dans votre langue, l’alphabet latin sera utilisé pour l'écrire.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/hu.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/hu.lproj/Localizable.strings
index 12fd9ed0bb..c31dee67d9 100644
--- a/iphone/Maps/LocalizedStrings/hu.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/hu.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "A navigáció és egyéb funkciók használatához hozzá kell férnünk a geolokációdhoz.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Helyszín megváltoztatása";
"message_invalid_feature_position" = "Célpont áthelyezése ide nem lehetséges";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Elfogadja";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "Elutasítja";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Átírás latin nyelvre";
"whatsnew_transliteration_message" = "Ha egy utcának vagy egy objektumnak nincs neve az Ön nyelvén, latin ábécével kerül átírásra.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/id.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/id.lproj/Localizable.strings
index 721586b67c..aa49e225e1 100644
--- a/iphone/Maps/LocalizedStrings/id.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/id.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "Untuk menggunakan navigasi dan fitur-fitur lainnya, kami perlu mengakses geolokasi Anda.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Ubah lokasi";
"message_invalid_feature_position" = "Objek tidak dapat diletakkan di sini";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Terima";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "Tolak";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Transliterasi ke dalam bahasa Latin";
"whatsnew_transliteration_message" = "Jika jalan atau objek tidak memiliki nama dalam bahasa Anda, namanya akan dieja menggunakan alfabet Latin.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/it.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/it.lproj/Localizable.strings
index 9c873ee70e..5dcd23a896 100644
--- a/iphone/Maps/LocalizedStrings/it.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/it.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "Per usare la navigazione e altri strumenti, dobbiamo accedere alla tua geolocalizzazione.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Cambia posizione";
"message_invalid_feature_position" = "Un oggetto non può essere posizionato qui";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Accetta";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "Rifiuta";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Traslitterazione in latino";
"whatsnew_transliteration_message" = "Se una strada o un oggetto non ha un nome nella tua lingua, tale nome sarà scritto utilizzando l'alfabeto latino.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/ja.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/ja.lproj/Localizable.strings
index 3636e24011..54e4f19cd1 100644
--- a/iphone/Maps/LocalizedStrings/ja.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/ja.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "ナビゲーションやその他の機能の使用のために、アプリがGeolocationにアクセスする必要があります";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "位置を変更してください";
"message_invalid_feature_position" = "ここにはオブジェクトを配置できません";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "了解";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "拒否";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "ラテン文字への字訳";
"whatsnew_transliteration_message" = "通り名や物件名をあなたの言語で表示できない場合、ラテン文字のアルファベットで綴られます。";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/ko.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/ko.lproj/Localizable.strings
index 0ed8e4ff77..657bb5ba6c 100644
--- a/iphone/Maps/LocalizedStrings/ko.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/ko.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "탐색 및 기타 기능을 사용하려면, 위치 정보에 액세스해야 합니다.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "위치 변경";
"message_invalid_feature_position" = "목적지를 이곳에서 찾을 수 없습니다";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "동의";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "거부";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "라틴어로 음역";
"whatsnew_transliteration_message" = "거리 또는 개체에 사용자 언어로 된 이름이 없는 경우, 라틴 알파벳을 사용하여 나옵니다.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/nb.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/nb.lproj/Localizable.strings
index 6c4aa7c5a2..9b45fb71fe 100644
--- a/iphone/Maps/LocalizedStrings/nb.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/nb.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "For å bruke navigering og andre funksjoner må vi ha tilgang til posisjonen din.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Endre plassering";
"message_invalid_feature_position" = "Et objekt kan ikke plasseres her";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Godta";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "Avvis";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Omskrivning til latin";
"whatsnew_transliteration_message" = "Hvis en gate eller et element ikke har et navn på ditt språk, vil det bli skrevet med det latinske alfabetet.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/nl.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/nl.lproj/Localizable.strings
index f12f0a8eb1..2d32072503 100644
--- a/iphone/Maps/LocalizedStrings/nl.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/nl.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "Om de navigatie en andere functies te kunnen gebruiken, hebben we toegang tot je geolocatie nodig.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Locatie wijzigen";
"message_invalid_feature_position" = "Hier kan geen object worden geplaatst";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Aanvaarden";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "Weigeren";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Transliteratie in het Latijn";
"whatsnew_transliteration_message" = "Indien een straat of object geen naam heeft in uw taal, wordt deze gespeld door gebruik van het Latijns alfabet.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/pl.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/pl.lproj/Localizable.strings
index 694006b8dc..a68789cf6b 100644
--- a/iphone/Maps/LocalizedStrings/pl.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/pl.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "Abyś mógł korzystać z nawigacji i innych funkcji, musimy uzyskać dostęp do twojej geolokalizacji.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Zmień lokalizację";
"message_invalid_feature_position" = "Obiekt nie może znajdować się tutaj";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Zaakceptuj";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "Odrzuć";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Transkrypcja na alfabet łaciński";
"whatsnew_transliteration_message" = "Jeśli dana ulica lub obiekt nie posiada nazwy w twoim języku, ich nazwa zapisana zostanie w alfabecie łacińskim.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/pt.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/pt.lproj/Localizable.strings
index a7f072022a..a7902c828c 100644
--- a/iphone/Maps/LocalizedStrings/pt.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/pt.lproj/Localizable.strings
@@ -224,7 +224,7 @@
"add_new_set" = "Adicionar novo conjunto";
/* Place Page - Add To Bookmarks button */
-"add_to_bookmarks" = "Add to Bookmarks";
+"add_to_bookmarks" = "Adicionar aos Favoritos";
/* Bookmark Color dialog title */
"bookmark_color" = "Cor de favoritos";
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "Para utilizar a navegação e outros recursos, precisamos de aceder à sua localização geográfica.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Mudar o local";
"message_invalid_feature_position" = "Um objeto não pode ser localizado aqui";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Aceitar";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "Declinar";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Transliteração para o latim";
"whatsnew_transliteration_message" = "Se uma rua ou um objeto não tiver nome na sua língua, será utilizado o alfabeto latino.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/ro.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/ro.lproj/Localizable.strings
index 26e5b49b2a..5a1af98080 100644
--- a/iphone/Maps/LocalizedStrings/ro.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/ro.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "Ca să puteți naviga și folosi alte funcții, trebuie să accesăm poziționarea dvs. geografică.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Schimbare locație";
"message_invalid_feature_position" = "În acest loc nu poate fi localizat un obiect";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Acceptați";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "Refuzați";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Transcriere în alfabet latin";
"whatsnew_transliteration_message" = "Dacă o stradă sau un obiect nu are un nume în limba dvs., va fi exprimat utilizând alfabetul latin.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/ru.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/ru.lproj/Localizable.strings
index edd8beaa2d..70173f5ac8 100644
--- a/iphone/Maps/LocalizedStrings/ru.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/ru.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "Чтобы пользоваться навигацией и другими функциями приложения, нам необходим доступ к вашей геопозиции.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Измените местоположение";
"message_invalid_feature_position" = "Объект не может находиться в этом месте";
@@ -1535,7 +1561,7 @@
"booking_checkout" = "выезд: %s";
-"placepage_add_place_button" = "Добавить на карту";
+"placepage_add_place_button" = "Добавить место на карту";
/* Displayed when saving some edits to the map to warn against publishing personal data */
"editor_share_to_all_dialog_title" = "Отправить всем пользователям?";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Принять";
+"accept_and_continue" = "Принять и продолжить";
+
/* For the first routing */
"decline" = "Отклонить";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Латинская транслитерация";
"whatsnew_transliteration_message" = "Если у улицы или объекта нет названия на вашем языке, то мы покажем его латиницей.";
+
+"learn_more" = "Узнать больше";
+
+"exit" = "Выход";
diff --git a/iphone/Maps/LocalizedStrings/sk.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/sk.lproj/Localizable.strings
index 987f8fc9cf..5a27e6480b 100644
--- a/iphone/Maps/LocalizedStrings/sk.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/sk.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "Ak chcete používať navigáciu a ostatné funkcie, potrebujeme prístup k vašej aktuálnej polohe.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Zmeniť polohu";
"message_invalid_feature_position" = "Objekt sa tu nedá umiestniť";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Prijať";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "Odmietnuť";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Prepis do latinčiny";
"whatsnew_transliteration_message" = "Ak ulica alebo objekt nemá názov vo vašom jazyku, prepíše sa tento názov latinkou.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/sv.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/sv.lproj/Localizable.strings
index 55155ea565..d8ecda3546 100644
--- a/iphone/Maps/LocalizedStrings/sv.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/sv.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "För att använda navigering och andra funktioner behöver vi tillgång till din geografiska plats.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Ändra placering";
"message_invalid_feature_position" = "Ett objekt kan inte placeras här";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Acceptera";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "Neka";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Transkribering till latin";
"whatsnew_transliteration_message" = "Om en gata eller ett objekt saknar ett namn på ditt språk kommer det att stavas med det latinska alfabetet.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/th.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/th.lproj/Localizable.strings
index f3d6e358dc..199acefd4b 100644
--- a/iphone/Maps/LocalizedStrings/th.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/th.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "เพื่อใช้การนำทางและฟีเจอร์อื่น ๆ เราต้องการเข้าถึงตำแหน่งทางภูมิศาสตร์ของคุณ";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "เปลี่ยนสถานที่ตั้ง";
"message_invalid_feature_position" = "ไม่สามารถตั้งวัตถุได้ที่นี่";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "ยอมรับ";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "ปฏิเสธ";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "การทับศัพท์เป็นภาษาละติน";
"whatsnew_transliteration_message" = "หากถนนหรือเป้าหมายไม่มีชื่อในภาษาของคุณก็จะสะกดโดยใช้ตัวอักษรละติน";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/tr.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/tr.lproj/Localizable.strings
index 6fbc79b15b..c7924e5680 100644
--- a/iphone/Maps/LocalizedStrings/tr.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/tr.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "Navigasyon ve diğer özellikleri kullanmak için konum belirlemenize erişmeye ihtiyacımız var.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Konumu değiştir";
"message_invalid_feature_position" = "Buraya bir nesne konumlandırılamıyor";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Kabul";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "Ret";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Latince alfabesine çevirme";
"whatsnew_transliteration_message" = "Bir caddenin veya bir nesnenin adının kendi dilinizde mevcut olmaması durumunda, Latin alfabesi kullanılarak yazılır.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/uk.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/uk.lproj/Localizable.strings
index 8418981b06..53d53bfc64 100644
--- a/iphone/Maps/LocalizedStrings/uk.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/uk.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "Щоб користуватися навігацією та іншими функціями додатку, нам необхідний доступ до вашого місцезнаходження.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Змініть розташування";
"message_invalid_feature_position" = "Об'єкт не може перебувати в цьому місцезнаходженні";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Прийняти";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "Відхилити";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Транслітерація латинськими літерами";
"whatsnew_transliteration_message" = "Якщо для вулиці чи об\\'єкта відсутня назва українською мовою, використовуватиметься назва, транслітерована латинськими літерами.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/vi.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/vi.lproj/Localizable.strings
index f802f4bba7..77e146bb34 100644
--- a/iphone/Maps/LocalizedStrings/vi.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/vi.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "Để sử dụng tính năng dẫn đường và các tính năng khác, chúng tôi cần truy cập vị trí địa lý của bạn.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "Thay đổi địa điểm";
"message_invalid_feature_position" = "Một đối tượng không thể đặt được ở đây";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "Chấp nhận";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "Từ chối";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "Chuyển ngữ sang chữ Latinh";
"whatsnew_transliteration_message" = "Nếu một đường phố hoặc đối tượng không có tên trong ngôn ngữ của bạn, nó sẽ được đánh vần sử dụng bảng chữ cái alphabet.";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/zh-Hans.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/zh-Hans.lproj/Localizable.strings
index 4a325cadea..dc6eb2d527 100644
--- a/iphone/Maps/LocalizedStrings/zh-Hans.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/zh-Hans.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "为了使用导航和其他功能,我们需要访问您的地理位置信息.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "改变位置";
"message_invalid_feature_position" = "对象无法设置在这里";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "接受";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "拒绝";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "直译成拉丁文";
"whatsnew_transliteration_message" = "如果某条街道或者某个对象在您的语言中没有对应的名称,它将使用拉丁字母拼写。";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/iphone/Maps/LocalizedStrings/zh-Hant.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/zh-Hant.lproj/Localizable.strings
index 61e267fd7d..9435f7c43a 100644
--- a/iphone/Maps/LocalizedStrings/zh-Hant.lproj/Localizable.strings
+++ b/iphone/Maps/LocalizedStrings/zh-Hant.lproj/Localizable.strings
@@ -1326,6 +1326,32 @@
"onboarding_location_message" = "如要使用導航和其他功能,我們需要能獲取您的地理位置.";
+"onboarding_permissions_title" = "Allow MAPS.ME access to storage and location";
+
+"onboarding_permissions_message" = "So you can download maps, see places and traffic near you and use navigation.";
+
+"onboarding_storage_permissions_title" = "Grant access";
+
+"onboarding_storage_permissions_message" = "Change permissions settings in your device. Needs a storage access to use MAPS.ME.";
+
+"onboarding_detail_permissions_title" = "MAPS.ME needs access to";
+
+"onboarding_detail_permissions_storage_title" = "Storage";
+
+"onboarding_detail_permissions_storage_message" = "To save and use downloaded maps offline and save bookmarks.";
+
+"onboarding_detail_permissions_location_title" = "Location";
+
+"onboarding_detail_permissions_location_message" = "To see places and traffic near you and use navigation.";
+
+"onboarding_detail_permissions_storage_path_message" = "You can also change a destination to save downloaded maps.";
+
+"onboarding_welcome_title" = "Welcome to MAPS.ME";
+
+"onboarding_welcome_first_subtitle" = "Free, fast, detailed and entirely offline maps with turn-by-turn navigation.";
+
+"onboarding_welcome_second_subtitle" = "By launching the application, you agree to Terms of Use and Privacy Policy.";
+
"dialog_incorrect_feature_position" = "改變位置";
"message_invalid_feature_position" = "物件無法設置在這裡";
@@ -1622,6 +1648,8 @@
/* For the first routing */
"accept" = "接受";
+"accept_and_continue" = "Accept and continue";
+
/* For the first routing */
"decline" = "拒絕";
@@ -1900,3 +1928,7 @@
"whatsnew_transliteration_title" = "音譯為拉丁文";
"whatsnew_transliteration_message" = "若街道或物件沒有您語言的名稱,會使用拉丁字母拼出。";
+
+"learn_more" = "Learn more";
+
+"exit" = "Exit";
diff --git a/strings.txt b/strings.txt
index 2230a4b972..97b9227273 100644
--- a/strings.txt
+++ b/strings.txt
@@ -16657,6 +16657,45 @@
el = Προκειμένου να χρησιμοποιήσετε την πλοήγηση και τις άλλες λειτουργίες του MAPS.ME χρειάζεται πρόσβαση στη γεωγραφική σας θέση.
sk = Ak chcete používať navigáciu a ostatné funkcie, potrebujeme prístup k vašej aktuálnej polohe.
+ [onboarding_permissions_title]
+ en = Allow MAPS.ME access to storage and location
+
+ [onboarding_permissions_message]
+ en = So you can download maps, see places and traffic near you and use navigation.
+
+ [onboarding_storage_permissions_title]
+ en = Grant access
+
+ [onboarding_storage_permissions_message]
+ en = Change permissions settings in your device. Needs a storage access to use MAPS.ME.
+
+ [onboarding_detail_permissions_title]
+ en = MAPS.ME needs access to
+
+ [onboarding_detail_permissions_storage_title]
+ en = Storage
+
+ [onboarding_detail_permissions_storage_message]
+ en = To save and use downloaded maps offline and save bookmarks.
+
+ [onboarding_detail_permissions_location_title]
+ en = Location
+
+ [onboarding_detail_permissions_location_message]
+ en = To see places and traffic near you and use navigation.
+
+ [onboarding_detail_permissions_storage_path_message]
+ en = You can also change a destination to save downloaded maps.
+
+ [onboarding_welcome_title]
+ en = Welcome to MAPS.ME
+
+ [onboarding_welcome_first_subtitle]
+ en = Free, fast, detailed and entirely offline maps with turn-by-turn navigation.
+
+ [onboarding_welcome_second_subtitle]
+ en = By launching the application, you agree to Terms of Use and Privacy Policy.
+
[dialog_incorrect_feature_position]
en = Change location
ru = Измените местоположение
@@ -20787,6 +20826,10 @@
el = Συμφωνώ
sk = Prijať
+ [accept_and_continue]
+ en = Accept and continue
+ ru = Принять и продолжить
+
[decline]
comment = For the first routing
en = Decline
@@ -24510,3 +24553,11 @@
pt_BR = Se uma rua ou um objeto não possui um nome em seu idioma, ele será soletrado usando o alfabeto latino.
sk = Ak ulica alebo objekt nemá názov vo vašom jazyku, prepíše sa tento názov latinkou.
sw = Ikiwa mtaa au kipengee hakina jina kwa lugha yako, kitaandikwa kwa herufi za alfabeti ya Kilatini.
+
+ [learn_more]
+ en = Learn more
+ ru = Узнать больше
+
+ [exit]
+ en = Exit
+ ru = Выход