Compare commits
1 Commits
test/2025.
...
release/20
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c6709b34c1 |
@@ -8,8 +8,6 @@ CoMaps contributors:
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
clover sage
|
||||
Harry Bond <me@hbond.xyz>
|
||||
vikiawv
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
Organic Maps (formerly OMaps) contributors:
|
||||
|
||||
@@ -1 +1 @@
|
||||
CoMaps - Navi mit Datenschutz
|
||||
CoMaps - Navigation mit Datenschutz
|
||||
|
||||
@@ -44,7 +44,6 @@ import androidx.fragment.app.FragmentManager;
|
||||
import androidx.fragment.app.FragmentTransaction;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import app.organicmaps.api.Const;
|
||||
import app.organicmaps.backup.PeriodicBackupRunner;
|
||||
import app.organicmaps.base.BaseMwmFragmentActivity;
|
||||
import app.organicmaps.base.OnBackPressListener;
|
||||
import app.organicmaps.bookmarks.BookmarkCategoriesActivity;
|
||||
@@ -140,7 +139,6 @@ import static app.organicmaps.leftbutton.LeftButtonsHolder.BUTTON_HELP_CODE;
|
||||
import static app.organicmaps.leftbutton.LeftButtonsHolder.BUTTON_RECORD_TRACK_CODE;
|
||||
import static app.organicmaps.leftbutton.LeftButtonsHolder.BUTTON_SETTINGS_CODE;
|
||||
import static app.organicmaps.util.PowerManagment.POWER_MANAGEMENT_TAG;
|
||||
import static app.organicmaps.util.concurrency.UiThread.runLater;
|
||||
|
||||
public class MwmActivity extends BaseMwmFragmentActivity
|
||||
implements PlacePageActivationListener,
|
||||
@@ -255,8 +253,6 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
@NonNull
|
||||
private DisplayManager mDisplayManager;
|
||||
|
||||
private PeriodicBackupRunner backupRunner;
|
||||
|
||||
ManageRouteBottomSheet mManageRouteBottomSheet;
|
||||
|
||||
private boolean mRemoveDisplayListener = true;
|
||||
@@ -611,8 +607,6 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
*/
|
||||
if (Map.isEngineCreated())
|
||||
onRenderingInitializationFinished();
|
||||
|
||||
backupRunner = new PeriodicBackupRunner(this);
|
||||
}
|
||||
|
||||
private void onSettingsResult(ActivityResult activityResult)
|
||||
@@ -844,7 +838,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
@Override
|
||||
public String getPrefsName()
|
||||
{
|
||||
return getString(R.string.about_help);
|
||||
return getString(R.string.help);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1358,11 +1352,6 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
final String backUrl = Framework.nativeGetParsedBackUrl();
|
||||
if (!TextUtils.isEmpty(backUrl))
|
||||
Utils.openUri(this, Uri.parse(backUrl), null);
|
||||
|
||||
if (backupRunner != null && !backupRunner.isAlreadyChecked() && backupRunner.isTimeToBackup())
|
||||
{
|
||||
backupRunner.doBackup();
|
||||
}
|
||||
}
|
||||
|
||||
@CallSuper
|
||||
@@ -2595,28 +2584,20 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
{
|
||||
if (id.equals(MAIN_MENU_ID))
|
||||
{
|
||||
final String activeLeftButton = buttonsHolder.getActiveButtonCode();
|
||||
ArrayList<MenuBottomSheetItem> items = new ArrayList<>();
|
||||
|
||||
if (!BUTTON_ADD_PLACE_CODE.equals(activeLeftButton))
|
||||
items.add(new MenuBottomSheetItem(R.string.placepage_add_place_button, R.drawable.ic_plus, this::onAddPlaceOptionSelected));
|
||||
|
||||
items.add(new MenuBottomSheetItem(R.string.download_maps, R.drawable.ic_download, getDownloadMapsCounter(), this::onDownloadMapsOptionSelected));
|
||||
|
||||
if (!Config.getDonateUrl(getApplicationContext()).isEmpty())
|
||||
items.add(new MenuBottomSheetItem(R.string.placepage_add_place_button, R.drawable.ic_plus, this::onAddPlaceOptionSelected));
|
||||
items.add(new MenuBottomSheetItem(
|
||||
R.string.download_maps,
|
||||
R.drawable.ic_download,
|
||||
getDownloadMapsCounter(),
|
||||
this::onDownloadMapsOptionSelected
|
||||
));
|
||||
mDonatesUrl = Config.getDonateUrl(getApplicationContext());
|
||||
if (!TextUtils.isEmpty(mDonatesUrl))
|
||||
items.add(new MenuBottomSheetItem(R.string.donate, R.drawable.ic_donate, this::onDonateOptionSelected));
|
||||
|
||||
if (!BUTTON_SETTINGS_CODE.equals(activeLeftButton))
|
||||
items.add(new MenuBottomSheetItem(R.string.settings, R.drawable.ic_settings, this::onSettingsOptionSelected));
|
||||
|
||||
if (!BUTTON_RECORD_TRACK_CODE.equals(activeLeftButton))
|
||||
items.add(new MenuBottomSheetItem(R.string.start_track_recording, R.drawable.ic_track_recording_off, -1, this::onTrackRecordingOptionSelected));
|
||||
|
||||
items.add(new MenuBottomSheetItem(R.string.settings, R.drawable.ic_settings, this::onSettingsOptionSelected));
|
||||
items.add(new MenuBottomSheetItem(R.string.start_track_recording, R.drawable.ic_track_recording_off, -1, this::onTrackRecordingOptionSelected));
|
||||
items.add(new MenuBottomSheetItem(R.string.share_my_location, R.drawable.ic_share, this::onShareLocationOptionSelected));
|
||||
|
||||
if (!BUTTON_HELP_CODE.equals(activeLeftButton))
|
||||
items.add(new MenuBottomSheetItem(R.string.about_help, R.drawable.ic_question_mark, this::showHelp));
|
||||
|
||||
return items;
|
||||
}
|
||||
return null;
|
||||
|
||||
@@ -1,114 +0,0 @@
|
||||
package app.organicmaps.backup;
|
||||
|
||||
import static app.organicmaps.settings.BackupSettingsFragment.MAX_BACKUPS_DEFAULT_COUNT;
|
||||
import static app.organicmaps.settings.BackupSettingsFragment.MAX_BACKUPS_KEY;
|
||||
import static app.organicmaps.util.StorageUtils.isFolderWritable;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.net.Uri;
|
||||
import android.provider.DocumentsContract;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.Spanned;
|
||||
import android.text.TextUtils;
|
||||
import android.text.style.AbsoluteSizeSpan;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.documentfile.provider.DocumentFile;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.util.log.Logger;
|
||||
|
||||
public class BackupUtils
|
||||
{
|
||||
private static final String BACKUP_PREFIX = "backup_";
|
||||
private static final String BACKUP_EXTENSION = ".kmz";
|
||||
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm-ss").withLocale(Locale.US);
|
||||
private static final String TAG = BackupUtils.class.getSimpleName();
|
||||
|
||||
public static CharSequence formatReadableFolderPath(Context context, @NonNull Uri uri)
|
||||
{
|
||||
String docId = DocumentsContract.getTreeDocumentId(uri);
|
||||
String volumeId;
|
||||
String subPath = "";
|
||||
|
||||
int colonIndex = docId.indexOf(':');
|
||||
if (colonIndex >= 0)
|
||||
{
|
||||
volumeId = docId.substring(0, colonIndex);
|
||||
subPath = docId.substring(colonIndex + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
volumeId = docId;
|
||||
}
|
||||
|
||||
String volumeName;
|
||||
if ("primary".equalsIgnoreCase(volumeId))
|
||||
volumeName = context.getString(R.string.maps_storage_shared);
|
||||
else
|
||||
volumeName = context.getString(R.string.maps_storage_removable);
|
||||
|
||||
SpannableStringBuilder sb = new SpannableStringBuilder();
|
||||
sb.append(volumeName + ": \n", new AbsoluteSizeSpan(UiUtils.dimen(context, R.dimen.text_size_body_3)), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
sb.append("/" + subPath, new AbsoluteSizeSpan(UiUtils.dimen(context, R.dimen.text_size_body_4)), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
return sb;
|
||||
}
|
||||
|
||||
public static int getMaxBackups(SharedPreferences prefs)
|
||||
{
|
||||
String rawValue = prefs.getString(MAX_BACKUPS_KEY, String.valueOf(MAX_BACKUPS_DEFAULT_COUNT));
|
||||
try
|
||||
{
|
||||
return Integer.parseInt(rawValue);
|
||||
} catch (NumberFormatException e)
|
||||
{
|
||||
Logger.e(TAG, "Failed to parse max backups count, raw value: " + rawValue + " set to default: " + MAX_BACKUPS_DEFAULT_COUNT, e);
|
||||
prefs.edit()
|
||||
.putString(MAX_BACKUPS_KEY, String.valueOf(MAX_BACKUPS_DEFAULT_COUNT))
|
||||
.apply();
|
||||
return MAX_BACKUPS_DEFAULT_COUNT;
|
||||
}
|
||||
}
|
||||
|
||||
public static DocumentFile createUniqueBackupFolder(@NonNull DocumentFile parentDir, LocalDateTime backupTime)
|
||||
{
|
||||
String folderName = BACKUP_PREFIX + backupTime.format(DATE_FORMATTER);
|
||||
return parentDir.createDirectory(folderName);
|
||||
}
|
||||
|
||||
public static String getBackupName(LocalDateTime backupTime)
|
||||
{
|
||||
String formattedBackupTime = backupTime.format(DATE_FORMATTER);
|
||||
return BACKUP_PREFIX + formattedBackupTime + BACKUP_EXTENSION;
|
||||
}
|
||||
|
||||
public static DocumentFile[] getBackupFolders(DocumentFile parentDir)
|
||||
{
|
||||
List<DocumentFile> backupFolders = new ArrayList<>();
|
||||
for (DocumentFile file : parentDir.listFiles())
|
||||
{
|
||||
if (file.isDirectory() && file.getName() != null && file.getName().startsWith(BACKUP_PREFIX))
|
||||
backupFolders.add(file);
|
||||
}
|
||||
return backupFolders.toArray(new DocumentFile[0]);
|
||||
}
|
||||
|
||||
public static boolean isBackupFolderAvailable(Context context, String storedFolderPath)
|
||||
{
|
||||
return !TextUtils.isEmpty(storedFolderPath) && isFolderWritable(context, storedFolderPath);
|
||||
}
|
||||
}
|
||||
@@ -1,189 +0,0 @@
|
||||
package app.organicmaps.backup;
|
||||
|
||||
import static app.organicmaps.backup.BackupUtils.getBackupName;
|
||||
import static app.organicmaps.backup.BackupUtils.getBackupFolders;
|
||||
import static app.organicmaps.util.StorageUtils.copyFileToDocumentFile;
|
||||
import static app.organicmaps.util.StorageUtils.deleteDirectoryRecursive;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.net.Uri;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.documentfile.provider.DocumentFile;
|
||||
|
||||
import java.io.File;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
import app.organicmaps.bookmarks.data.BookmarkCategory;
|
||||
import app.organicmaps.bookmarks.data.BookmarkManager;
|
||||
import app.organicmaps.bookmarks.data.BookmarkSharingResult;
|
||||
import app.organicmaps.bookmarks.data.KmlFileType;
|
||||
import app.organicmaps.util.concurrency.ThreadPool;
|
||||
import app.organicmaps.util.concurrency.UiThread;
|
||||
import app.organicmaps.util.log.Logger;
|
||||
|
||||
public class LocalBackupManager implements BookmarkManager.BookmarksSharingListener
|
||||
{
|
||||
public static final String TAG = LocalBackupManager.class.getSimpleName();
|
||||
|
||||
private final Activity activity;
|
||||
private final String backupFolderPath;
|
||||
private final int maxBackups;
|
||||
private Listener listener;
|
||||
|
||||
public LocalBackupManager(@NonNull Activity activity, @NonNull String backupFolderPath, int maxBackups)
|
||||
{
|
||||
this.activity = activity;
|
||||
this.backupFolderPath = backupFolderPath;
|
||||
this.maxBackups = maxBackups;
|
||||
}
|
||||
|
||||
public void doBackup()
|
||||
{
|
||||
BookmarkManager.INSTANCE.addSharingListener(this);
|
||||
|
||||
prepareBookmarkCategoriesForSharing();
|
||||
|
||||
if (listener != null)
|
||||
listener.onBackupStarted();
|
||||
}
|
||||
|
||||
public void setListener(@NonNull Listener listener)
|
||||
{
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPreparedFileForSharing(@NonNull BookmarkSharingResult result)
|
||||
{
|
||||
BookmarkManager.INSTANCE.removeSharingListener(this);
|
||||
|
||||
ThreadPool.getWorker().execute(() -> {
|
||||
ErrorCode errorCode = null;
|
||||
switch (result.getCode())
|
||||
{
|
||||
case BookmarkSharingResult.SUCCESS ->
|
||||
{
|
||||
if (!saveBackup(result))
|
||||
{
|
||||
Logger.e(TAG, "Failed to save backup. See system log above");
|
||||
errorCode = ErrorCode.FILE_ERROR;
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.i(TAG, "Backup was created and saved successfully");
|
||||
}
|
||||
}
|
||||
case BookmarkSharingResult.EMPTY_CATEGORY ->
|
||||
{
|
||||
errorCode = ErrorCode.EMPTY_CATEGORY;
|
||||
Logger.e(TAG, "Failed to create backup. Category is empty");
|
||||
}
|
||||
case BookmarkSharingResult.ARCHIVE_ERROR ->
|
||||
{
|
||||
errorCode = ErrorCode.ARCHIVE_ERROR;
|
||||
Logger.e(TAG, "Failed to create archive of bookmarks");
|
||||
}
|
||||
case BookmarkSharingResult.FILE_ERROR ->
|
||||
{
|
||||
errorCode = ErrorCode.FILE_ERROR;
|
||||
Logger.e(TAG, "Failed create file for archive");
|
||||
}
|
||||
default ->
|
||||
{
|
||||
errorCode = ErrorCode.UNSUPPORTED;
|
||||
Logger.e(TAG, "Failed to create backup. Unknown error");
|
||||
}
|
||||
}
|
||||
|
||||
ErrorCode finalErrorCode = errorCode;
|
||||
UiThread.run(() -> {
|
||||
if (listener != null)
|
||||
{
|
||||
if (finalErrorCode == null)
|
||||
listener.onBackupFinished();
|
||||
else
|
||||
listener.onBackupFailed(finalErrorCode);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
private boolean saveBackup(@NonNull BookmarkSharingResult result)
|
||||
{
|
||||
boolean isSuccess = false;
|
||||
Uri folderUri = Uri.parse(backupFolderPath);
|
||||
try
|
||||
{
|
||||
DocumentFile parentFolder = DocumentFile.fromTreeUri(activity, folderUri);
|
||||
if (parentFolder != null && parentFolder.canWrite())
|
||||
{
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
DocumentFile backupFolder = BackupUtils.createUniqueBackupFolder(parentFolder, now);
|
||||
if (backupFolder != null)
|
||||
{
|
||||
String backupName = getBackupName(now);
|
||||
DocumentFile backupFile = backupFolder.createFile(result.getMimeType(), backupName);
|
||||
if (backupFile != null && copyFileToDocumentFile(activity, new File(result.getSharingPath()), backupFile))
|
||||
{
|
||||
Logger.i(TAG, "Backup saved to " + backupFile.getUri());
|
||||
isSuccess = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.e(TAG, "Failed to create backup folder");
|
||||
}
|
||||
}
|
||||
cleanOldBackups(parentFolder);
|
||||
|
||||
} catch (Exception e)
|
||||
{
|
||||
Logger.e(TAG, "Failed to save backup", e);
|
||||
}
|
||||
return isSuccess;
|
||||
}
|
||||
|
||||
public void cleanOldBackups(DocumentFile parentDir)
|
||||
{
|
||||
DocumentFile[] backupFolders = getBackupFolders(parentDir);
|
||||
if (backupFolders.length > maxBackups)
|
||||
{
|
||||
Arrays.sort(backupFolders, Comparator.comparing(DocumentFile::getName));
|
||||
for (int i = 0; i < backupFolders.length - maxBackups; i++)
|
||||
{
|
||||
Logger.i(TAG, "Delete old backup " + backupFolders[i].getUri());
|
||||
deleteDirectoryRecursive(backupFolders[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void prepareBookmarkCategoriesForSharing()
|
||||
{
|
||||
List<BookmarkCategory> categories = BookmarkManager.INSTANCE.getCategories();
|
||||
long[] categoryIds = new long[categories.size()];
|
||||
for (int i = 0; i < categories.size(); i++)
|
||||
categoryIds[i] = categories.get(i).getId();
|
||||
BookmarkManager.INSTANCE.prepareCategoriesForSharing(categoryIds, KmlFileType.Text);
|
||||
}
|
||||
|
||||
public interface Listener
|
||||
{
|
||||
void onBackupStarted();
|
||||
|
||||
void onBackupFinished();
|
||||
|
||||
void onBackupFailed(ErrorCode errorCode);
|
||||
}
|
||||
|
||||
public enum ErrorCode
|
||||
{
|
||||
EMPTY_CATEGORY,
|
||||
ARCHIVE_ERROR,
|
||||
FILE_ERROR,
|
||||
UNSUPPORTED,
|
||||
}
|
||||
}
|
||||
@@ -1,104 +0,0 @@
|
||||
package app.organicmaps.backup;
|
||||
|
||||
import static app.organicmaps.backup.BackupUtils.getMaxBackups;
|
||||
import static app.organicmaps.backup.BackupUtils.isBackupFolderAvailable;
|
||||
import static app.organicmaps.settings.BackupSettingsFragment.BACKUP_FOLDER_PATH_KEY;
|
||||
import static app.organicmaps.settings.BackupSettingsFragment.BACKUP_INTERVAL_KEY;
|
||||
import static app.organicmaps.settings.BackupSettingsFragment.LAST_BACKUP_TIME_KEY;
|
||||
import static app.organicmaps.util.StorageUtils.isFolderWritable;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.SharedPreferences;
|
||||
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
import app.organicmaps.util.log.Logger;
|
||||
|
||||
public class PeriodicBackupRunner
|
||||
{
|
||||
private final Activity activity;
|
||||
private static final String TAG = PeriodicBackupRunner.class.getSimpleName();
|
||||
private final SharedPreferences prefs;
|
||||
private boolean alreadyChecked = false;
|
||||
|
||||
public PeriodicBackupRunner(Activity activity)
|
||||
{
|
||||
this.activity = activity;
|
||||
this.prefs = PreferenceManager.getDefaultSharedPreferences(activity);
|
||||
}
|
||||
|
||||
public boolean isAlreadyChecked()
|
||||
{
|
||||
return alreadyChecked;
|
||||
}
|
||||
|
||||
public boolean isTimeToBackup()
|
||||
{
|
||||
long intervalMs = getBackupIntervalMs();
|
||||
|
||||
if (intervalMs <= 0)
|
||||
return false;
|
||||
|
||||
long lastBackupTime = prefs.getLong(LAST_BACKUP_TIME_KEY, 0);
|
||||
long now = System.currentTimeMillis();
|
||||
|
||||
alreadyChecked = true;
|
||||
|
||||
return (now - lastBackupTime) >= intervalMs;
|
||||
}
|
||||
|
||||
public void doBackup()
|
||||
{
|
||||
String storedFolderPath = prefs.getString(BACKUP_FOLDER_PATH_KEY, null);
|
||||
|
||||
if (isBackupFolderAvailable(activity, storedFolderPath))
|
||||
{
|
||||
Logger.i(TAG, "Performing periodic backup");
|
||||
performBackup(storedFolderPath, getMaxBackups(prefs));
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.w(TAG, "Backup folder is not writable, passed path: " + storedFolderPath);
|
||||
}
|
||||
}
|
||||
|
||||
private long getBackupIntervalMs()
|
||||
{
|
||||
String defaultValue = "0";
|
||||
try
|
||||
{
|
||||
return Long.parseLong(prefs.getString(BACKUP_INTERVAL_KEY, defaultValue));
|
||||
} catch (NumberFormatException e)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
private void performBackup(String backupFolderPath, int maxBackups)
|
||||
{
|
||||
LocalBackupManager backupManager = new LocalBackupManager(activity, backupFolderPath, maxBackups);
|
||||
backupManager.setListener(new LocalBackupManager.Listener()
|
||||
{
|
||||
@Override
|
||||
public void onBackupStarted()
|
||||
{
|
||||
Logger.i(TAG, "Periodic backup started");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackupFinished()
|
||||
{
|
||||
prefs.edit().putLong(LAST_BACKUP_TIME_KEY, System.currentTimeMillis()).apply();
|
||||
Logger.i(TAG, "Periodic backup finished");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackupFailed(LocalBackupManager.ErrorCode errorCode)
|
||||
{
|
||||
Logger.e(TAG, "Periodic backup was failed with code: " + errorCode);
|
||||
}
|
||||
});
|
||||
|
||||
backupManager.doBackup();
|
||||
}
|
||||
}
|
||||
@@ -69,8 +69,7 @@ public class Metadata implements Parcelable
|
||||
FMD_OUTDOOR_SEATING(48),
|
||||
FMD_NETWORK(49),
|
||||
FMD_CONTACT_FEDIVERSE(50),
|
||||
FMD_CONTACT_BLUESKY(51),
|
||||
FMD_PANORAMAX(52);
|
||||
FMD_CONTACT_BLUESKY(51);
|
||||
private final int mMetaType;
|
||||
|
||||
MetadataType(int metadataType)
|
||||
|
||||
@@ -41,7 +41,7 @@ public class HelpScreen extends BaseMapScreen
|
||||
{
|
||||
final Header.Builder builder = new Header.Builder();
|
||||
builder.setStartHeaderAction(Action.BACK);
|
||||
builder.setTitle(getCarContext().getString(R.string.about_help));
|
||||
builder.setTitle(getCarContext().getString(R.string.help));
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@ public class SettingsScreen extends BaseMapScreen
|
||||
private Item createHelpItem()
|
||||
{
|
||||
final Row.Builder builder = new Row.Builder();
|
||||
builder.setTitle(getCarContext().getString(R.string.about_help));
|
||||
builder.setTitle(getCarContext().getString(R.string.help));
|
||||
builder.setOnClickListener(() -> getScreenManager().push(new HelpScreen(getCarContext(), getSurfaceRenderer())));
|
||||
builder.setBrowsable(true);
|
||||
return builder.build();
|
||||
|
||||
@@ -11,6 +11,7 @@ import android.text.style.StyleSpan;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.LayoutRes;
|
||||
import androidx.annotation.NonNull;
|
||||
@@ -27,7 +28,6 @@ import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.util.bottomsheet.MenuBottomSheetFragment;
|
||||
import app.organicmaps.util.bottomsheet.MenuBottomSheetItem;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
@@ -362,10 +362,10 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
|
||||
private class ItemViewHolder extends BaseInnerViewHolder<CountryItem>
|
||||
{
|
||||
private final DownloaderStatusIcon mStatusIcon;
|
||||
private final MaterialTextView mName;
|
||||
private final MaterialTextView mSubtitle;
|
||||
private final MaterialTextView mFoundName;
|
||||
private final MaterialTextView mSize;
|
||||
private final TextView mName;
|
||||
private final TextView mSubtitle;
|
||||
private final TextView mFoundName;
|
||||
private final TextView mSize;
|
||||
|
||||
private void processClick(boolean clickOnStatus)
|
||||
{
|
||||
@@ -510,7 +510,7 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
|
||||
static class HeaderViewHolder extends BaseInnerViewHolder<String>
|
||||
{
|
||||
@NonNull
|
||||
private final MaterialTextView mTitle;
|
||||
private final TextView mTitle;
|
||||
|
||||
HeaderViewHolder(@NonNull View frame)
|
||||
{
|
||||
|
||||
@@ -2,12 +2,11 @@ package app.organicmaps.downloader;
|
||||
|
||||
import android.util.SparseIntArray;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import androidx.annotation.AttrRes;
|
||||
import androidx.annotation.DrawableRes;
|
||||
|
||||
import com.google.android.material.imageview.ShapeableImageView;
|
||||
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.widget.WheelProgressView;
|
||||
import app.organicmaps.util.ThemeUtils;
|
||||
@@ -16,7 +15,7 @@ import app.organicmaps.util.UiUtils;
|
||||
public class DownloaderStatusIcon
|
||||
{
|
||||
private final View mFrame;
|
||||
protected final ShapeableImageView mIcon;
|
||||
protected final ImageView mIcon;
|
||||
private final WheelProgressView mProgress;
|
||||
|
||||
private static final SparseIntArray sIconsCache = new SparseIntArray();
|
||||
|
||||
@@ -43,7 +43,7 @@ public class CopyrightFragment extends BaseMwmFragment
|
||||
{
|
||||
if (!mDelegate.onBackPressed())
|
||||
{
|
||||
((HelpActivity) requireActivity()).stackFragment(HelpFragment.class, getString(R.string.about_help), null);
|
||||
((HelpActivity) requireActivity()).stackFragment(HelpFragment.class, getString(R.string.help), null);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -43,21 +43,15 @@ public class LeftButtonsHolder
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String getActiveButtonCode()
|
||||
public LeftButton getActiveButton()
|
||||
{
|
||||
String activeButtonCode = prefs.getString(leftButtonPreferenceKey, DEFAULT_BUTTON_CODE);
|
||||
if (!TextUtils.isEmpty(activeButtonCode))
|
||||
return activeButtonCode;
|
||||
return availableButtons.get(activeButtonCode);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public LeftButton getActiveButton()
|
||||
{
|
||||
return availableButtons.get(getActiveButtonCode());
|
||||
}
|
||||
|
||||
public Collection<LeftButton> getAllButtons()
|
||||
{
|
||||
return availableButtons.values();
|
||||
|
||||
@@ -213,7 +213,7 @@ public class MapButtonsController extends Fragment
|
||||
)
|
||||
{
|
||||
leftButtonView.setImageResource(R.drawable.ic_christmas_tree);
|
||||
leftButtonView.setContentDescription(getString(R.string.about_help));
|
||||
leftButtonView.setContentDescription(getString(R.string.help));
|
||||
leftButtonView.setOnClickListener((v) -> mMapButtonClickListener.onMapButtonClick(MapButtons.help));
|
||||
}
|
||||
else
|
||||
|
||||
@@ -266,8 +266,7 @@ public class NavigationController implements TrafficManager.TrafficCallback,
|
||||
mSpeedLimit.setSpeedLimit(0, false);
|
||||
return;
|
||||
}
|
||||
final int fSpeedLimit = StringUtils.nativeFormatSpeed(info.speedLimitMps);
|
||||
final boolean speedLimitExceeded = fSpeedLimit < StringUtils.nativeFormatSpeed(location.getSpeed());
|
||||
mSpeedLimit.setSpeedLimit(fSpeedLimit, speedLimitExceeded);
|
||||
final boolean speedLimitExceeded = info.speedLimitMps < location.getSpeed();
|
||||
mSpeedLimit.setSpeedLimit(StringUtils.nativeFormatSpeed(info.speedLimitMps), speedLimitExceeded);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,384 +0,0 @@
|
||||
package app.organicmaps.settings;
|
||||
|
||||
import static app.organicmaps.backup.BackupUtils.formatReadableFolderPath;
|
||||
import static app.organicmaps.backup.BackupUtils.getMaxBackups;
|
||||
import static app.organicmaps.backup.BackupUtils.isBackupFolderAvailable;
|
||||
import static app.organicmaps.util.StorageUtils.isFolderWritable;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.activity.result.contract.ActivityResultContracts;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.preference.ListPreference;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
|
||||
import java.text.DateFormat;
|
||||
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.backup.LocalBackupManager;
|
||||
import app.organicmaps.util.log.Logger;
|
||||
|
||||
|
||||
public class BackupSettingsFragment
|
||||
extends BaseXmlSettingsFragment
|
||||
{
|
||||
private ActivityResultLauncher<Intent> folderPickerLauncher;
|
||||
|
||||
private static final String TAG = LocalBackupManager.class.getSimpleName();
|
||||
public static final String BACKUP_FOLDER_PATH_KEY = "backup_location";
|
||||
public static final String LAST_BACKUP_TIME_KEY = "last_backup_time";
|
||||
private static final String BACKUP_NOW_KEY = "backup_now";
|
||||
public static final String BACKUP_INTERVAL_KEY = "backup_history_interval";
|
||||
public static final String MAX_BACKUPS_KEY = "backup_history_count";
|
||||
public static final int MAX_BACKUPS_DEFAULT_COUNT = 10;
|
||||
public static final String DEFAULT_BACKUP_INTERVAL = "86400000"; // 24 hours in ms
|
||||
|
||||
private LocalBackupManager mBackupManager;
|
||||
private SharedPreferences prefs;
|
||||
|
||||
@Override
|
||||
protected int getXmlResources()
|
||||
{
|
||||
return R.xml.prefs_backup;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@SuppressWarnings("NotNullFieldNotInitialized")
|
||||
Preference backupLocationOption;
|
||||
@NonNull
|
||||
@SuppressWarnings("NotNullFieldNotInitialized")
|
||||
ListPreference backupIntervalOption;
|
||||
@NonNull
|
||||
@SuppressWarnings("NotNullFieldNotInitialized")
|
||||
Preference maxBackupsOption;
|
||||
@NonNull
|
||||
@SuppressWarnings("NotNullFieldNotInitialized")
|
||||
Preference backupNowOption;
|
||||
@NonNull
|
||||
@SuppressWarnings("NotNullFieldNotInitialized")
|
||||
Preference advancedCategory;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState)
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
folderPickerLauncher = registerForActivityResult(
|
||||
new ActivityResultContracts.StartActivityForResult(),
|
||||
result -> {
|
||||
boolean isSuccess = false;
|
||||
|
||||
String lastFolderPath = prefs.getString(BACKUP_FOLDER_PATH_KEY, null);
|
||||
|
||||
if (result.getResultCode() == Activity.RESULT_OK)
|
||||
{
|
||||
Intent data = result.getData();
|
||||
Logger.i(TAG, "Folder selection result: " + data);
|
||||
if (data == null)
|
||||
return;
|
||||
|
||||
Uri uri = data.getData();
|
||||
if (uri != null)
|
||||
{
|
||||
takePersistableUriPermission(uri);
|
||||
Logger.i(TAG, "Backup location changed to " + uri);
|
||||
prefs.edit().putString(BACKUP_FOLDER_PATH_KEY, uri.toString()).apply();
|
||||
setFormattedBackupPath(uri);
|
||||
|
||||
runBackup();
|
||||
|
||||
isSuccess = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.w(TAG, "Folder selection result is null");
|
||||
}
|
||||
}
|
||||
else if (result.getResultCode() == Activity.RESULT_CANCELED)
|
||||
{
|
||||
Logger.w(TAG, "User canceled folder selection");
|
||||
if (TextUtils.isEmpty(lastFolderPath))
|
||||
{
|
||||
prefs.edit().putString(BACKUP_FOLDER_PATH_KEY, null).apply();
|
||||
Logger.i(TAG, "Backup settings reset");
|
||||
initBackupLocationOption();
|
||||
}
|
||||
else if (isFolderWritable(requireActivity(), lastFolderPath))
|
||||
{
|
||||
Logger.i(TAG, "Backup location not changed, using previous value " + lastFolderPath);
|
||||
isSuccess = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.e(TAG, "Backup location not changed, but last folder is not writable: " + lastFolderPath);
|
||||
}
|
||||
}
|
||||
|
||||
resetLastBackupTime();
|
||||
updateStatusSummaryOption();
|
||||
|
||||
Logger.i(TAG, "Folder selection result: " + isSuccess);
|
||||
applyAdvancedSettings(isSuccess);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
|
||||
{
|
||||
super.onCreatePreferences(savedInstanceState, rootKey);
|
||||
|
||||
prefs = PreferenceManager.getDefaultSharedPreferences(requireContext());
|
||||
backupLocationOption = findPreference(BACKUP_FOLDER_PATH_KEY);
|
||||
backupIntervalOption = findPreference(BACKUP_INTERVAL_KEY);
|
||||
maxBackupsOption = findPreference(MAX_BACKUPS_KEY);
|
||||
backupNowOption = findPreference(BACKUP_NOW_KEY);
|
||||
|
||||
initBackupLocationOption();
|
||||
initBackupIntervalOption();
|
||||
initMaxBackupsOption();
|
||||
initBackupNowOption();
|
||||
}
|
||||
|
||||
|
||||
private void initBackupLocationOption()
|
||||
{
|
||||
String storedFolderPath = prefs.getString(BACKUP_FOLDER_PATH_KEY, null);
|
||||
boolean isEnabled = false;
|
||||
if (!TextUtils.isEmpty(storedFolderPath))
|
||||
{
|
||||
if (isFolderWritable(requireContext(), storedFolderPath))
|
||||
{
|
||||
setFormattedBackupPath(Uri.parse(storedFolderPath));
|
||||
isEnabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.e(TAG, "Backup location is not available, path: " + storedFolderPath);
|
||||
showBackupErrorAlertDialog(requireContext().getString(R.string.dialog_report_error_missing_folder));
|
||||
backupLocationOption.setSummary(requireContext().getString(R.string.pref_backup_now_summary_folder_unavailable));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
backupLocationOption.setSummary(requireContext().getString(R.string.pref_backup_location_summary_initial));
|
||||
}
|
||||
|
||||
applyAdvancedSettings(isEnabled);
|
||||
|
||||
backupLocationOption.setOnPreferenceClickListener(preference -> {
|
||||
launchFolderPicker();
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
private void setFormattedBackupPath(@NonNull Uri uri)
|
||||
{
|
||||
backupLocationOption.setSummary(formatReadableFolderPath(requireContext(), uri));
|
||||
}
|
||||
|
||||
private void initBackupIntervalOption()
|
||||
{
|
||||
String backupInterval = prefs.getString(BACKUP_INTERVAL_KEY, DEFAULT_BACKUP_INTERVAL);
|
||||
|
||||
CharSequence entry = getEntryForValue(backupIntervalOption, backupInterval);
|
||||
if (entry != null)
|
||||
backupIntervalOption.setSummary(entry);
|
||||
|
||||
backupIntervalOption.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||
CharSequence newEntry = getEntryForValue(backupIntervalOption, newValue.toString());
|
||||
Logger.i(TAG, "auto backup interval changed to " + newEntry);
|
||||
if (newEntry != null)
|
||||
backupIntervalOption.setSummary(newEntry);
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
private void initMaxBackupsOption()
|
||||
{
|
||||
maxBackupsOption.setSummary(String.valueOf(getMaxBackups(prefs)));
|
||||
|
||||
maxBackupsOption.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||
maxBackupsOption.setSummary(newValue.toString());
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
private void initBackupNowOption()
|
||||
{
|
||||
updateStatusSummaryOption();
|
||||
backupNowOption.setOnPreferenceClickListener(preference -> {
|
||||
runBackup();
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
private void updateStatusSummaryOption()
|
||||
{
|
||||
long lastBackupTime = prefs.getLong(LAST_BACKUP_TIME_KEY, 0L);
|
||||
|
||||
String summary;
|
||||
if (lastBackupTime > 0)
|
||||
{
|
||||
String time = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(lastBackupTime);
|
||||
summary = requireContext().getString(R.string.pref_backup_status_summary_success) + ": " + time;
|
||||
}
|
||||
else
|
||||
{
|
||||
summary = requireContext().getString(R.string.pref_backup_now_summary);
|
||||
}
|
||||
|
||||
backupNowOption.setSummary(summary);
|
||||
}
|
||||
|
||||
private void resetLastBackupTime()
|
||||
{
|
||||
prefs.edit().remove(LAST_BACKUP_TIME_KEY).apply();
|
||||
}
|
||||
|
||||
private void applyAdvancedSettings(boolean isBackupEnabled)
|
||||
{
|
||||
backupIntervalOption.setVisible(isBackupEnabled);
|
||||
maxBackupsOption.setVisible(isBackupEnabled);
|
||||
backupNowOption.setVisible(isBackupEnabled);
|
||||
}
|
||||
|
||||
|
||||
private void runBackup()
|
||||
{
|
||||
String currentFolderPath = prefs.getString(BACKUP_FOLDER_PATH_KEY, null);
|
||||
if (!TextUtils.isEmpty(currentFolderPath))
|
||||
{
|
||||
if (isFolderWritable(requireContext(), currentFolderPath))
|
||||
{
|
||||
mBackupManager = new LocalBackupManager(requireActivity(), currentFolderPath, getMaxBackups(prefs));
|
||||
mBackupManager.setListener(new LocalBackupManager.Listener()
|
||||
{
|
||||
@Override
|
||||
public void onBackupStarted()
|
||||
{
|
||||
Logger.i(TAG, "Manual backup started");
|
||||
|
||||
backupNowOption.setEnabled(false);
|
||||
backupNowOption.setSummary(R.string.pref_backup_now_summary_progress);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackupFinished()
|
||||
{
|
||||
Logger.i(TAG, "Manual backup successful");
|
||||
|
||||
backupNowOption.setEnabled(true);
|
||||
backupNowOption.setSummary(R.string.pref_backup_now_summary_ok);
|
||||
|
||||
prefs.edit().putLong(LAST_BACKUP_TIME_KEY, System.currentTimeMillis()).apply();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackupFailed(LocalBackupManager.ErrorCode errorCode)
|
||||
{
|
||||
String errorMessage = switch (errorCode)
|
||||
{
|
||||
case EMPTY_CATEGORY -> requireContext().getString(R.string.pref_backup_now_summary_empty_lists);
|
||||
default -> requireContext().getString(R.string.pref_backup_now_summary_failed);
|
||||
};
|
||||
|
||||
Logger.e(TAG, "Manual backup was failed with code: " + errorCode);
|
||||
|
||||
backupNowOption.setEnabled(true);
|
||||
backupNowOption.setSummary(errorMessage);
|
||||
|
||||
showBackupErrorAlertDialog(requireContext().getString(R.string.dialog_report_error_with_logs));
|
||||
}
|
||||
});
|
||||
|
||||
mBackupManager.doBackup();
|
||||
}
|
||||
else
|
||||
{
|
||||
backupNowOption.setSummary(R.string.pref_backup_now_summary_folder_unavailable);
|
||||
showBackupErrorAlertDialog(requireContext().getString(R.string.dialog_report_error_missing_folder));
|
||||
Logger.e(TAG, "Manual backup error: folder " + currentFolderPath + " unavailable");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
backupNowOption.setSummary(R.string.pref_backup_now_summary_folder_unavailable);
|
||||
Logger.e(TAG, "Manual backup error: no folder selected");
|
||||
}
|
||||
}
|
||||
|
||||
private void launchFolderPicker()
|
||||
{
|
||||
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
|
||||
intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
|
||||
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
|
||||
intent.putExtra("android.content.extra.SHOW_ADVANCED", true);
|
||||
|
||||
PackageManager packageManager = requireActivity().getPackageManager();
|
||||
if (intent.resolveActivity(packageManager) != null)
|
||||
folderPickerLauncher.launch(intent);
|
||||
else
|
||||
showNoFileManagerError();
|
||||
}
|
||||
|
||||
private void showNoFileManagerError()
|
||||
{
|
||||
new MaterialAlertDialogBuilder(requireActivity())
|
||||
.setMessage(R.string.error_no_file_manager_app)
|
||||
.setPositiveButton(android.R.string.ok, (dialog, which) -> dialog.dismiss())
|
||||
.show();
|
||||
}
|
||||
|
||||
private void showBackupErrorAlertDialog(String message)
|
||||
{
|
||||
requireActivity().runOnUiThread(() -> {
|
||||
new MaterialAlertDialogBuilder(requireActivity())
|
||||
.setTitle(R.string.pref_backup_now_summary_failed)
|
||||
.setMessage(message)
|
||||
.setPositiveButton(android.R.string.ok, (dialog, which) -> dialog.dismiss())
|
||||
.show();
|
||||
});
|
||||
}
|
||||
|
||||
private void takePersistableUriPermission(Uri uri)
|
||||
{
|
||||
requireContext().getContentResolver().takePersistableUriPermission(
|
||||
uri,
|
||||
Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
|
||||
);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static CharSequence getEntryForValue(@NonNull ListPreference listPref, @NonNull CharSequence value)
|
||||
{
|
||||
CharSequence[] entryValues = listPref.getEntryValues();
|
||||
CharSequence[] entries = listPref.getEntries();
|
||||
|
||||
if (entryValues == null || entries == null)
|
||||
return null;
|
||||
|
||||
for (int i = 0; i < entryValues.length; i++)
|
||||
{
|
||||
if (entryValues[i].equals(value))
|
||||
return entries[i];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -184,15 +184,15 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La
|
||||
{
|
||||
getSettingsActivity().stackFragment(VoiceInstructionsSettingsFragment.class, getString(R.string.pref_tts_enable_title), null);
|
||||
}
|
||||
else if (key.equals(getString(R.string.pref_help)))
|
||||
{
|
||||
startActivity(new Intent(requireActivity(), HelpActivity.class));
|
||||
}
|
||||
else if (key.equals(getString(R.string.pref_map_locale)))
|
||||
{
|
||||
LanguagesFragment langFragment = (LanguagesFragment)getSettingsActivity().stackFragment(LanguagesFragment.class, getString(R.string.change_map_locale), null);
|
||||
langFragment.setListener(this);
|
||||
}
|
||||
else if (key.equals(getString(R.string.pref_backup)))
|
||||
{
|
||||
getSettingsActivity().stackFragment(BackupSettingsFragment.class, getString(R.string.pref_backup_title), null);
|
||||
}
|
||||
}
|
||||
return super.onPreferenceTreeClick(preference);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package app.organicmaps.util;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
@@ -11,13 +10,10 @@ import android.provider.DocumentsContract;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.content.FileProvider;
|
||||
import androidx.documentfile.provider.DocumentFile;
|
||||
|
||||
import app.organicmaps.BuildConfig;
|
||||
import app.organicmaps.util.log.Logger;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
@@ -327,76 +323,4 @@ public class StorageUtils
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean copyFileToDocumentFile(
|
||||
@NonNull Activity activity,
|
||||
@NonNull File sourceFile,
|
||||
@NonNull DocumentFile targetFile
|
||||
)
|
||||
{
|
||||
try (
|
||||
InputStream in = new FileInputStream(sourceFile);
|
||||
OutputStream out = activity.getContentResolver().openOutputStream(targetFile.getUri())
|
||||
)
|
||||
{
|
||||
if (out == null)
|
||||
{
|
||||
Logger.e(TAG, "Failed to open output stream for " + targetFile.getUri());
|
||||
return false;
|
||||
}
|
||||
|
||||
byte[] buffer = new byte[8192];
|
||||
int length;
|
||||
|
||||
while ((length = in.read(buffer)) > 0)
|
||||
out.write(buffer, 0, length);
|
||||
|
||||
out.flush();
|
||||
return true;
|
||||
} catch (IOException e)
|
||||
{
|
||||
Logger.e(TAG, "Failed to copy file from " + sourceFile.getAbsolutePath() + " to " + targetFile.getUri(), e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static void deleteDirectoryRecursive(@NonNull DocumentFile dir)
|
||||
{
|
||||
try
|
||||
{
|
||||
for (DocumentFile file : dir.listFiles())
|
||||
{
|
||||
if (file.isDirectory())
|
||||
deleteDirectoryRecursive(file);
|
||||
else
|
||||
file.delete();
|
||||
}
|
||||
dir.delete();
|
||||
} catch (Exception e)
|
||||
{
|
||||
Logger.e(TAG, "Failed to delete directory: " + dir.getUri(), e);
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isFolderWritable(Context context, String folderPath)
|
||||
{
|
||||
try
|
||||
{
|
||||
Uri folderUri = Uri.parse(folderPath);
|
||||
DocumentFile folder = DocumentFile.fromTreeUri(context, folderUri);
|
||||
if (folder != null && folder.canWrite())
|
||||
{
|
||||
DocumentFile tempFile = folder.createFile("application/octet-stream", "temp_file");
|
||||
if (tempFile != null)
|
||||
{
|
||||
tempFile.delete();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} catch (Exception e)
|
||||
{
|
||||
Logger.e(TAG, "Failed to check if folder is writable: " + folderPath, e);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,9 +56,6 @@ public class PlacePageLinksFragment extends Fragment implements Observer<MapObje
|
||||
private View mWikimedia;
|
||||
private TextView mTvWikimedia;
|
||||
|
||||
private View mPanoramax;
|
||||
private TextView mTvPanoramax;
|
||||
|
||||
private PlacePageViewModel mViewModel;
|
||||
private MapObject mMapObject;
|
||||
|
||||
@@ -166,11 +163,6 @@ public class PlacePageLinksFragment extends Fragment implements Observer<MapObje
|
||||
mTvLinePage = mFrame.findViewById(R.id.tv__place_line_page);
|
||||
mLinePage.setOnClickListener((v) -> openUrl(Metadata.MetadataType.FMD_CONTACT_LINE));
|
||||
mLinePage.setOnLongClickListener((v) -> copyUrl(mLinePage, Metadata.MetadataType.FMD_CONTACT_LINE));
|
||||
|
||||
mPanoramax = mFrame.findViewById(R.id.ll__place_panoramax);
|
||||
mTvPanoramax = mFrame.findViewById(R.id.tv__place_panoramax);
|
||||
mPanoramax.setOnClickListener((v) -> openUrl(Metadata.MetadataType.FMD_PANORAMAX));
|
||||
mTvPanoramax.setOnLongClickListener((v) -> copyUrl(mPanoramax, Metadata.MetadataType.FMD_PANORAMAX));
|
||||
}
|
||||
|
||||
private void openUrl(Metadata.MetadataType type)
|
||||
@@ -234,9 +226,6 @@ public class PlacePageLinksFragment extends Fragment implements Observer<MapObje
|
||||
|
||||
final String line = mMapObject.getMetadata(Metadata.MetadataType.FMD_CONTACT_LINE);
|
||||
refreshMetadataOrHide(line, mLinePage, mTvLinePage);
|
||||
|
||||
final String panoramax = mMapObject.getMetadata(Metadata.MetadataType.FMD_PANORAMAX);
|
||||
refreshMetadataOrHide(panoramax, mPanoramax, mTvPanoramax);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<include
|
||||
layout="@layout/toolbar_extended"/>
|
||||
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
<androidx.cardview.widget.CardView
|
||||
android:layout_width="@dimen/settings_width"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="?actionBarSize"
|
||||
@@ -18,6 +18,6 @@
|
||||
style="@style/MwmWidget.FrameLayout.Elevation"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
android:layout_marginEnd="@dimen/margin_base"
|
||||
android:layout_centerVertical="true"/>
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<TextView
|
||||
android:id="@+id/size"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -37,7 +37,7 @@
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_toEndOf="@id/downloader_status_frame"
|
||||
android:layout_toStartOf="@id/size">
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<TextView
|
||||
android:id="@+id/found_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -46,7 +46,7 @@
|
||||
tools:text="Крымск"
|
||||
tools:background="#60FF00FF"/>
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<TextView
|
||||
android:id="@+id/name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -54,7 +54,7 @@
|
||||
tools:text="Донецкая область"
|
||||
tools:background="#40FF0000"/>
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<TextView
|
||||
android:id="@+id/subtitle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
tools:background="#400000FF">
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
wheel:wheelSecondaryColor="?dividerHorizontal"
|
||||
wheel:wheelThickness="@dimen/margin_eighth"/>
|
||||
|
||||
<com.google.android.material.imageview.ShapeableImageView
|
||||
<ImageView
|
||||
android:id="@+id/downloader_status"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
|
||||
@@ -21,5 +21,4 @@
|
||||
<include layout="@layout/place_page_line" />
|
||||
<include layout="@layout/place_page_bluesky" />
|
||||
<include layout="@layout/place_page_wikimedia" />
|
||||
<include layout="@layout/place_page_panoramax" />
|
||||
</LinearLayout>
|
||||
@@ -1,25 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/ll__place_panoramax"
|
||||
style="@style/PlacePageItemFrame"
|
||||
android:tag="website"
|
||||
tools:background="#20FF0000"
|
||||
tools:visibility="visible">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv__place_panoramax"
|
||||
style="@style/PlacePageMetadataIcon"
|
||||
app:srcCompat="@drawable/ic_panoramax"
|
||||
app:tint="?colorAccent"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv__place_panoramax"
|
||||
android:textAlignment="viewStart"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="@style/MwmTextAppearance.PlacePage.Accent"
|
||||
tools:text="@string/panoramax"/>
|
||||
</LinearLayout>
|
||||
@@ -890,5 +890,4 @@
|
||||
<string name="telegram_url">https://t.me/CoMapsApp</string>
|
||||
<string name="tts_info_link">https://www.comaps.app/support/tts-configuration-guide-for-android</string>
|
||||
<string name="instagram_url">https://www.instagram.com/comapscommunity</string>
|
||||
<string name="wikimedia_commons">ويكيميديا كومنز</string>
|
||||
</resources>
|
||||
|
||||
@@ -181,5 +181,4 @@
|
||||
<string name="osm_wiki_about_url">https://wiki.openstreetmap.org/wiki/About_OpenStreetMap</string>
|
||||
<string name="tts_info_link">https://www.comaps.app/support/tts-configuration-guide-for-android/</string>
|
||||
<string name="instagram_url">https://www.instagram.com/comapscommunity</string>
|
||||
<string name="wikimedia_commons">Wikimedia Commons</string>
|
||||
</resources>
|
||||
|
||||
@@ -671,7 +671,7 @@
|
||||
<string name="power_managment_setting_never">Heç vaxt</string>
|
||||
<string name="power_managment_setting_auto">Avtomatik</string>
|
||||
<string name="power_managment_setting_manual_max">Maksimum enerji qənaəti</string>
|
||||
<string name="enable_logging_warning_message">Yardım dialoq qutusunda “Problemi bildir” istifadə etməklə probleminizlə bağlı ətraflı diaqnostik jurnalları qeyd etmək və bizə göndərmək üçün bu seçimi müvəqqəti aktivləşdirin. Qeydlərə məkan məlumatı daxil ola bilər.</string>
|
||||
<string name="enable_logging_warning_message">Yardım dialoq qutusunda “Problemi bildir” istifadə etməklə probleminizlə bağlı ətraflı diaqnostik jurnalları qeyd etmək və bizə göndərmək üçün bu seçimi müvəqqəti aktivləşdirin. Qeydlərə məkan məlumatı daxil ola bilər</string>
|
||||
<string name="access_rules_author_only">Onlayn redaktə</string>
|
||||
<string name="driving_options_title">Marşrutlaşdırma seçimləri</string>
|
||||
<!-- Recommended length for CarPlay and Android Auto is around 25-27 characters -->
|
||||
@@ -682,7 +682,7 @@
|
||||
<string name="avoid_ferry">Bərə keçidlərindən çəkinin</string>
|
||||
<string name="avoid_motorways">Magistral yoldan çəkinin</string>
|
||||
<string name="unable_to_calc_alert_title">Marşrutu hesablamaq mümkün deyil</string>
|
||||
<string name="unable_to_calc_alert_subtitle">Təəssüf ki, seçdiyiniz seçimlərə görə marşrut tapa bilmədik. Seçimləri dəyişdirin və yenidən cəhd edin.</string>
|
||||
<string name="unable_to_calc_alert_subtitle">Təəssüf ki, seçdiyiniz seçimlərə görə marşrut tapa bilmədik. Seçimləri dəyişdirin və yenidən cəhd edin</string>
|
||||
<string name="define_to_avoid_btn">Qarşısını almaq üçün yolları müəyyənləşdirin</string>
|
||||
<string name="change_driving_options_btn">Sürmə seçimləri aktiv edildi</string>
|
||||
<string name="toll_road">Ücrətli yol</string>
|
||||
@@ -843,5 +843,4 @@
|
||||
<string name="telegram_url">https://t.me/CoMapsApp/</string>
|
||||
<string name="tts_info_link">https://www.comaps.app/support/tts-configuration-guide-for-android/</string>
|
||||
<string name="instagram_url">https://www.instagram.com/comapscommunity</string>
|
||||
<string name="wikimedia_commons">Vikianbar</string>
|
||||
</resources>
|
||||
|
||||
@@ -880,7 +880,7 @@
|
||||
<item quantity="other">Знойдзена %d файлаў. Вы можаце ўбачыць іх пасля пераўтварэння.</item>
|
||||
</plurals>
|
||||
<string name="error_enter_correct_vk_page">Увядзіце сапраўднае імя карыстальніка або спасылку VK</string>
|
||||
<string name="wikimedia_commons">Вікісховішча</string>
|
||||
<string name="wikimedia_commons">Wikimedia Commons</string>
|
||||
<string name="comma_separated_pair">%1$s, %2$s</string>
|
||||
<string name="osm_wiki_about_url">https://wiki.openstreetmap.org/wiki/RU:О_проекте</string>
|
||||
<string name="instagram_url">https://www.instagram.com/comapscommunity</string>
|
||||
|
||||
@@ -838,5 +838,4 @@
|
||||
<string name="trip_finished">Пристигнахте!</string>
|
||||
<string name="instagram">Instagram</string>
|
||||
<string name="downloader_loading_ios">Изтегляне</string>
|
||||
<string name="wikimedia_commons">Общомедия</string>
|
||||
</resources>
|
||||
|
||||
@@ -29,11 +29,10 @@
|
||||
<string name="country_status_download_failed">ডাউনলোড ব্যর্থ হল</string>
|
||||
<string name="try_again">আবার চেষ্টা করুন</string>
|
||||
<string name="about_menu_title">CoMaps এর ব্যাপারে</string>
|
||||
<string name="about_headline">উন্মুক্ত প্রকল্প, তার সমাজ দ্বারা চলিত</string>
|
||||
<string name="about_headline">উন্মুক্ত প্রকল্প, একটি সমাজ দ্বারা চলিত</string>
|
||||
<string name="location_settings">লোকেশন সেটিংস</string>
|
||||
<string name="about_proposition_1">• ব্যবহার করা সহজ এবং দেখতে সুন্দর</string>
|
||||
<string name="about_proposition_2">• গোপনীয়তা বান্ধব এবং বিজ্ঞাপন মুক্ত</string>
|
||||
<string name="about_proposition_3">• অফলাইন, দ্রুত এবং ছোট সাইজ</string>
|
||||
<string name="about_developed_by_enthusiasts">পুরোপুরি ওপেন সোর্স, অলাভজনক, প্রকাশ্য সিদ্ধান্ত করণ এবং অর্থায়ন।</string>
|
||||
<string name="wikimedia_commons">উইকিমিডিয়া কমন্স</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
@@ -960,6 +960,4 @@
|
||||
<string name="type.place.suburb">Suburbi</string>
|
||||
<string name="type.place.state.USA">Estat</string>
|
||||
<string name="type.power.line">Línia elèctrica</string>
|
||||
<string name="type.amenity.studio">Estudi</string>
|
||||
<string name="type.barrier.guard_rail">Barrera de seguretat</string>
|
||||
</resources>
|
||||
|
||||
@@ -886,11 +886,9 @@
|
||||
<string name="editor_level">Podlaží (0 je přízemí)</string>
|
||||
<string name="route_type">Typ trasy</string>
|
||||
<string name="vehicle">Vozidlo</string>
|
||||
<string name="pedestrian">Pěší zóna</string>
|
||||
<string name="bicycle">Jízdní kolo</string>
|
||||
<string name="ruler">Pravítko</string>
|
||||
<string name="pedestrian">Pěší</string>
|
||||
<string name="bicycle">Kolo</string>
|
||||
<string name="ruler">Měření</string>
|
||||
<string name="bookmark_color">Barva záložky</string>
|
||||
<string name="clear">Vymazat</string>
|
||||
<string name="panoramax">Obrázek Panoramax</string>
|
||||
<string name="about_help">O aplikaci a nápověda</string>
|
||||
</resources>
|
||||
|
||||
@@ -888,8 +888,8 @@
|
||||
<string name="saved">Guardado</string>
|
||||
<string name="codeberg">Codeberg</string>
|
||||
<string name="error_enter_correct_fediverse_page">Introduce un nombre de usuario o una dirección web de Mastodon válidos</string>
|
||||
<string name="instagram_url">https://www.instagram.com/comapscommunity/</string>
|
||||
<string name="app_site_url">https://comaps.app/es/</string>
|
||||
<string name="instagram_url">https://www.instagram.com/comapscommunity</string>
|
||||
<string name="app_site_url">https://comaps.app/</string>
|
||||
<string name="bluesky">Bluesky</string>
|
||||
<string name="error_enter_correct_bluesky_page">Introduce un nombre de usuario o una dirección web de Bluesky válidos</string>
|
||||
<string name="telegram_url">https://t.me/CoMapsApp/</string>
|
||||
@@ -898,8 +898,4 @@
|
||||
<string name="editor_level">Planta (0 es la planta baja)</string>
|
||||
<string name="editor_building_levels">Plantas (incl. planta baja, excl. tejado)</string>
|
||||
<string name="error_enter_correct_level">Introduce un número de planta válido</string>
|
||||
<string name="route_type">Tipo de ruta</string>
|
||||
<string name="vehicle">Vehículo</string>
|
||||
<string name="pedestrian">Peatonal</string>
|
||||
<string name="bicycle">Bicicleta</string>
|
||||
</resources>
|
||||
|
||||
@@ -895,6 +895,4 @@
|
||||
<string name="pedestrian">Jalakäija</string>
|
||||
<string name="ruler">Joonlaud</string>
|
||||
<string name="bookmark_color">Järjehoidja värv</string>
|
||||
<string name="panoramax">Panoramaxi pilt</string>
|
||||
<string name="about_help">Rakenduse teave ja abiteave</string>
|
||||
</resources>
|
||||
|
||||
@@ -817,5 +817,4 @@
|
||||
<string name="translated_om_site_url">https://comaps.app</string>
|
||||
<string name="tts_info_link">https://www.comaps.app/support/tts-configuration-guide-for-android</string>
|
||||
<string name="instagram_url">https://www.instagram.com/comapscommunity</string>
|
||||
<string name="wikimedia_commons">ویکیانبار</string>
|
||||
</resources>
|
||||
|
||||
@@ -900,6 +900,4 @@
|
||||
<string name="bicycle">Polkupyörä</string>
|
||||
<string name="ruler">Viivoitin</string>
|
||||
<string name="bookmark_color">Kirjanmerkin väri</string>
|
||||
<string name="about_help">Tietoja ja ohje</string>
|
||||
<string name="panoramax">Panoramax-kuva</string>
|
||||
</resources>
|
||||
|
||||
@@ -599,5 +599,4 @@
|
||||
<string name="instagram_url">https://www.instagram.com/comapscommunity</string>
|
||||
<string name="tts_info_link">https://www.comaps.app/support/tts-configuration-guide-for-android/</string>
|
||||
<string name="osm_wiki_about_url">https://wiki.openstreetmap.org/wiki/About_OpenStreetMap</string>
|
||||
<string name="wikimedia_commons">विकिमीडिया कॉमन्स</string>
|
||||
</resources>
|
||||
|
||||
@@ -148,5 +148,4 @@
|
||||
<string name="osm_wiki_about_url">https://wiki.openstreetmap.org/wiki/About_OpenStreetMap</string>
|
||||
<string name="tts_info_link">https://www.comaps.app/support/tts-configuration-guide-for-android/</string>
|
||||
<string name="instagram_url">https://www.instagram.com/comapscommunity</string>
|
||||
<string name="wikimedia_commons">Zajednički poslužitelj</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
@@ -838,7 +838,7 @@
|
||||
<string name="nav_auto">Automatikus navigáció</string>
|
||||
<string name="telegram">Telegram</string>
|
||||
<string name="instagram">Instagram</string>
|
||||
<string name="wikimedia_commons">Wikimédia Commons</string>
|
||||
<string name="wikimedia_commons">Wikimedia Commons</string>
|
||||
<string name="editor_line_social_network">LINE</string>
|
||||
<string name="empty_street_name_error">Adjon meg egy utcanevet</string>
|
||||
<string name="vk">VKontakte</string>
|
||||
|
||||
@@ -4,5 +4,4 @@
|
||||
<string name="osm_wiki_about_url">https://wiki.openstreetmap.org/wiki/About_OpenStreetMap</string>
|
||||
<string name="tts_info_link">https://www.comaps.app/support/tts-configuration-guide-for-android/</string>
|
||||
<string name="instagram_url">https://www.instagram.com/comapscommunity</string>
|
||||
<string name="wikimedia_commons">Wikimedia Commons</string>
|
||||
</resources>
|
||||
|
||||
@@ -862,5 +862,4 @@
|
||||
<string name="translated_om_site_url">https://comaps.app</string>
|
||||
<string name="tts_info_link">https://www.comaps.app/support/tts-configuration-guide-for-android</string>
|
||||
<string name="instagram_url">https://www.instagram.com/comapscommunity</string>
|
||||
<string name="wikimedia_commons">ויקישיתוף</string>
|
||||
</resources>
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<string name="type.amenity.bicycle_parking">חניית אופניים</string>
|
||||
<string name="type.amenity.bicycle_rental">השכרת אופניים</string>
|
||||
<string name="type.amenity.bicycle_repair_station">תחנת תיקון אופניים</string>
|
||||
<string name="type.amenity.biergarten">גן בירה</string>
|
||||
<string name="type.amenity.biergarten">ביר גרדן</string>
|
||||
<string name="type.amenity.brothel">בית בושת</string>
|
||||
<string name="type.amenity.bureau_de_change">המרת מטבע חוץ</string>
|
||||
<string name="type.amenity.bus_station">תחנת אוטובוס</string>
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
@@ -822,5 +822,4 @@
|
||||
<string name="openstreetmap">OpenStreetMap</string>
|
||||
<string name="tts_info_link">https://www.comaps.app/support/tts-configuration-guide-for-android/</string>
|
||||
<string name="instagram_url">https://www.instagram.com/comapscommunity</string>
|
||||
<string name="wikimedia_commons">위키미디어 공용</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
@@ -837,5 +837,4 @@
|
||||
<string name="tts_info_link">https://www.comaps.app/support/tts-configuration-guide-for-android/</string>
|
||||
<string name="instagram_url">https://www.instagram.com/comapscommunity</string>
|
||||
<string name="osm_wiki_about_url">https://wiki.openstreetmap.org/wiki/About_OpenStreetMap</string>
|
||||
<string name="wikimedia_commons">विकिमीडिया कॉमन्स</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
@@ -888,7 +888,7 @@
|
||||
<string name="twitter">X (Twitter)</string>
|
||||
<string name="openstreetmap">OpenStreetMap</string>
|
||||
<string name="instagram">Instagram</string>
|
||||
<string name="wikimedia_commons">Викисклад</string>
|
||||
<string name="wikimedia_commons">Wikimedia Commons</string>
|
||||
<string name="editor_line_social_network">LINE</string>
|
||||
<string name="vk">VK</string>
|
||||
<string name="instagram_url">https://www.instagram.com/comapscommunity/</string>
|
||||
@@ -904,29 +904,4 @@
|
||||
<string name="editor_building_levels">Этажей (вкл. подвалы искл. крышу)</string>
|
||||
<string name="editor_level">Этаж (0 это первый этаж)</string>
|
||||
<string name="error_enter_correct_level">Введите правильный номер этажа</string>
|
||||
<!-- Settings "Backup" category: "Backup" title -->
|
||||
<string name="pref_backup_title">Резервное копирование меток и треков</string>
|
||||
<string name="pref_backup_summary">Автоматически сохранять в папку на устройстве</string>
|
||||
<string name="pref_backup_now_title">Создать резервную копию</string>
|
||||
<string name="pref_backup_now_summary">Запустить резервное копирование вручную</string>
|
||||
<string name="pref_backup_now_summary_progress">Идёт резервное копирование…</string>
|
||||
<string name="pref_backup_now_summary_ok">Копирование успешно завершено</string>
|
||||
<string name="pref_backup_now_summary_empty_lists">Нет данных для копирования</string>
|
||||
<string name="pref_backup_now_summary_failed">Ошибка при копировании</string>
|
||||
<string name="pref_backup_now_summary_folder_unavailable">Папка для копий недоступна</string>
|
||||
<string name="pref_backup_status_summary_success">Последнее успешное копирование</string>
|
||||
<string name="pref_backup_location_title">Папка для резервных копий</string>
|
||||
<string name="pref_backup_location_summary_initial">Сначала выберите папку и дайте доступ</string>
|
||||
<string name="pref_backup_history_title">Хранить количество копий</string>
|
||||
<string name="pref_backup_interval_title">Автозапуск</string>
|
||||
<string name="backup_interval_every_day">Каждый день</string>
|
||||
<string name="backup_interval_every_week">Каждую неделю</string>
|
||||
<string name="backup_interval_manual_only">Выключено (только вручную)</string>
|
||||
<string name="dialog_report_error_missing_folder">Выбранная папка для резервного копирования недоступна или нет права записи в неё. Пожалуйста, выберите другую папку</string>
|
||||
<string name="dialog_report_error_with_logs">Пожалуйста, отправьте нам отчет об ошибке:\n
|
||||
- Включите \"Запись логов\" в настройках\n
|
||||
- воспроизведите проблему\n
|
||||
- на экране \"Справка\" нажмите кнопку \"Сообщить о проблеме\" и отправьте нам отчет по почте или в чат\n
|
||||
- отключите логирование
|
||||
</string>
|
||||
</resources>
|
||||
|
||||
@@ -4,5 +4,4 @@
|
||||
<string name="tts_info_link">https://www.comaps.app/support/tts-configuration-guide-for-android/</string>
|
||||
<string name="instagram_url">https://www.instagram.com/comapscommunity</string>
|
||||
<string name="translated_om_site_url">https://comaps.app/</string>
|
||||
<string name="wikimedia_commons">Wikimedia Commons</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
@@ -27,7 +27,7 @@
|
||||
<!-- Location services are disabled by user alert - message -->
|
||||
<string name="location_is_disabled_long_text">Тренутно су сви локацијски сервиси на овом уређају или апликацији искључени. Потребно је да их укључите у Подешавањима.</string>
|
||||
<!-- View and button titles for accessibility -->
|
||||
<string name="zoom_to_country">Прикажи мапу</string>
|
||||
<string name="zoom_to_country">Прикажи на мапи</string>
|
||||
<!-- Message to display at the center of the screen when the country download has failed -->
|
||||
<string name="country_status_download_failed">Преузимање није успело</string>
|
||||
<!-- Button text for the button under the country_status_download_failed message -->
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<string name="type.aeroway.aerodrome">Flygplats</string>
|
||||
<string name="type.aeroway.aerodrome.international">Flygplats</string>
|
||||
<string name="type.aeroway.helipad">Helikopterplatta</string>
|
||||
<string name="type.amenity">Infrastruktur</string>
|
||||
<string name="type.amenity">Infrastrukturen</string>
|
||||
<string name="type.amenity.arts_centre">Kulturcenter</string>
|
||||
<string name="type.amenity.atm">Bankomat</string>
|
||||
<string name="type.amenity.bbq">Grill för barbecue</string>
|
||||
@@ -181,7 +181,7 @@
|
||||
<string name="type.building.address">Adress</string>
|
||||
<string name="type.building.has_parts">Byggnad</string>
|
||||
<string name="type.building_part">Byggnad</string>
|
||||
<string name="type.building.train_station">Stationsbyggnad</string>
|
||||
<string name="type.building.train_station">Stationsbyggnaden</string>
|
||||
<string name="type.cemetery.grave">Grav</string>
|
||||
<string name="type.craft">Hantverk</string>
|
||||
<string name="type.craft.beekeeper">Biodlare</string>
|
||||
@@ -346,7 +346,7 @@
|
||||
<string name="type.highway.living_street.bridge">Bro</string>
|
||||
<!-- These translations are used for all type.highway.*.tunnel. -->
|
||||
<string name="type.highway.living_street.tunnel">Tunnel</string>
|
||||
<string name="type.highway.motorway">Motorväg</string>
|
||||
<string name="type.highway.motorway">Gata</string>
|
||||
<!-- These translations are used for all type.highway.*.bridge. -->
|
||||
<string name="type.highway.motorway.bridge">Bro</string>
|
||||
<!-- These translations are used for all type.highway.*.tunnel. -->
|
||||
@@ -419,7 +419,7 @@
|
||||
<!-- These translations are used for all type.highway.*.tunnel. -->
|
||||
<string name="type.highway.service.tunnel">Tunnel</string>
|
||||
<string name="type.highway.speed_camera">Hastighetskamera</string>
|
||||
<string name="type.highway.steps">Trappa</string>
|
||||
<string name="type.highway.steps">Gångväg</string>
|
||||
<!-- These translations are used for all type.highway.*.bridge. -->
|
||||
<string name="type.highway.steps.bridge">Bro</string>
|
||||
<!-- These translations are used for all type.highway.*.tunnel. -->
|
||||
@@ -469,7 +469,7 @@
|
||||
<string name="type.area_highway.secondary">Gata</string>
|
||||
<string name="type.area_highway.service">Gata</string>
|
||||
<string name="type.area_highway.tertiary">Gata</string>
|
||||
<string name="type.area_highway.steps">Trappa</string>
|
||||
<string name="type.area_highway.steps">Gångväg</string>
|
||||
<string name="type.area_highway.track">Gata</string>
|
||||
<string name="type.area_highway.trunk">Gata</string>
|
||||
<string name="type.area_highway.unclassified">Gata</string>
|
||||
@@ -530,11 +530,11 @@
|
||||
<string name="type.landuse.forest.coniferous">Skog</string>
|
||||
<string name="type.landuse.forest.deciduous">Skog</string>
|
||||
<string name="type.landuse.forest.mixed">Skog</string>
|
||||
<string name="type.landuse.grass">Gräsmatta</string>
|
||||
<string name="type.landuse.landfill">Soptipp</string>
|
||||
<string name="type.landuse.grass">Gräsmattan</string>
|
||||
<string name="type.landuse.landfill">Soptippen</string>
|
||||
<string name="type.landuse.railway">Järnvägsfaciliteter</string>
|
||||
<string name="type.landuse.reservoir">Vatten</string>
|
||||
<string name="type.leisure.dog_park">Hundpark</string>
|
||||
<string name="type.leisure.dog_park">Hundparken</string>
|
||||
<string name="type.leisure.fitness_centre">Gym</string>
|
||||
<string name="type.leisure.fitness_station">Fitnesstation</string>
|
||||
<string name="type.leisure.dance">Danshall</string>
|
||||
@@ -544,10 +544,10 @@
|
||||
<string name="type.leisure.miniature_golf">Minigolf</string>
|
||||
<string name="type.leisure.nature_reserve">Naturreservat</string>
|
||||
<string name="type.leisure.outdoor_seating">Sittplatser utomhus</string>
|
||||
<string name="type.leisure.park">Park</string>
|
||||
<string name="type.leisure.park.no.access">Privat park</string>
|
||||
<string name="type.leisure.park.permissive">Park</string>
|
||||
<string name="type.leisure.park.private">Privat park</string>
|
||||
<string name="type.leisure.park">Parken</string>
|
||||
<string name="type.leisure.park.no.access">Parken</string>
|
||||
<string name="type.leisure.park.permissive">Parken</string>
|
||||
<string name="type.leisure.park.private">Parken</string>
|
||||
<string name="type.leisure.picnic_table">Picknickbord</string>
|
||||
<string name="type.leisure.pitch">Idrottsplats</string>
|
||||
<string name="type.leisure.playground">Lekplats</string>
|
||||
@@ -586,7 +586,7 @@
|
||||
<string name="type.natural.scree">Stenig rasbrant</string>
|
||||
<string name="type.natural.bay">Bukt</string>
|
||||
<string name="type.natural.beach">Strand</string>
|
||||
<string name="type.natural.beach.sand">Sandstrand</string>
|
||||
<string name="type.natural.beach.sand">Sandig strand</string>
|
||||
<string name="type.natural.beach.gravel">Grusstrand</string>
|
||||
<string name="type.natural.cape">Udde</string>
|
||||
<string name="type.natural.cave_entrance">Grotta</string>
|
||||
@@ -611,7 +611,7 @@
|
||||
<string name="type.natural.peak">Bergstopp</string>
|
||||
<string name="type.natural.saddle">Fjällsadel</string>
|
||||
<string name="type.natural.rock">Bergart</string>
|
||||
<string name="type.natural.scrub">Rugge</string>
|
||||
<string name="type.natural.scrub">Ruggen</string>
|
||||
<string name="type.natural.spring">Vattenkälla</string>
|
||||
<string name="type.natural.spring.drinking_water_no">Vattenkälla</string>
|
||||
<string name="type.natural.strait">Sund</string>
|
||||
@@ -1148,10 +1148,10 @@
|
||||
<string name="type.wheelchair.limited">Delvis utrustad för handikappade</string>
|
||||
<string name="type.wheelchair.no">Ej utrustad för handikappade</string>
|
||||
<string name="type.wheelchair.yes">Utrustad för handikappade</string>
|
||||
<string name="type.piste_type.snow_park">Snöpark</string>
|
||||
<string name="type.piste_type.snow_park">Snöparken</string>
|
||||
<string name="type.piste_type.hike">Vandringsled i snö</string>
|
||||
<string name="type.piste_type.connection">Piste Anslutning</string>
|
||||
<string name="type.piste_type.skitour">Skitourled</string>
|
||||
<string name="type.piste_type.skitour">Skitourleden</string>
|
||||
<string name="type.amenity.events_venue">Evenemangslokal</string>
|
||||
<string name="type.shop.auction">Auktion</string>
|
||||
<string name="type.shop.collector">Samlingsföremål</string>
|
||||
@@ -1341,7 +1341,4 @@
|
||||
<string name="type.leisure.hackerspace">Hackerspace</string>
|
||||
<string name="type.shop.kiosk">Kiosk</string>
|
||||
<string name="type.tourism.museum">Museum</string>
|
||||
<string name="type.amenity.waste_transfer_station">Återvinningscentral</string>
|
||||
<string name="type.barrier.guard_rail">Vägräcke</string>
|
||||
<string name="type.highway.ladder">Stege</string>
|
||||
</resources>
|
||||
|
||||
@@ -219,7 +219,7 @@
|
||||
<!-- Speed camera settings menu option - Never warn (about speedcams) -->
|
||||
<string name="pref_tts_speedcams_never">Kamwe usionye</string>
|
||||
<string name="power_managment_title">Mtindo wa kuokoa nishati</string>
|
||||
<string name="power_managment_description">Pindi mtindo wa kiotomatiki unapochaguliwa programu tumizi inaanza kuzima sifa za kumaliza betri kulingana na kiwango cha chaji cha sasa cha betri.</string>
|
||||
<string name="power_managment_description">Pindi mtindo wa kiotomatiki unapochaguliwa programu tumizi inaanza kuzima sifa za kumaliza betri kulingana na kiwango cha chaji cha sasa cha betri</string>
|
||||
<string name="power_managment_setting_never">Kamwe</string>
|
||||
<string name="power_managment_setting_auto">Kiotomatiki</string>
|
||||
<string name="power_managment_setting_manual_max">Upeo wa kuhifadhi nishati</string>
|
||||
|
||||
@@ -819,5 +819,4 @@
|
||||
<string name="translated_om_site_url">https://comaps.app/</string>
|
||||
<string name="tts_info_link">https://www.comaps.app/support/tts-configuration-guide-for-android/</string>
|
||||
<string name="instagram_url">https://www.instagram.com/comapscommunity</string>
|
||||
<string name="wikimedia_commons">วิกิมีเดียคอมมอนส์</string>
|
||||
</resources>
|
||||
|
||||
@@ -885,7 +885,7 @@
|
||||
<string name="instagram">Instagram</string>
|
||||
<string name="level_value_generic">Поверх: %s</string>
|
||||
<string name="tts_info_link">https://www.comaps.app/support/tts-configuration-guide-for-android/</string>
|
||||
<string name="wikimedia_commons">Вікісховище</string>
|
||||
<string name="wikimedia_commons">Wikimedia Commons</string>
|
||||
<string name="editor_add_phone">Додати телефон</string>
|
||||
<string name="comma_separated_pair">%1$s, %2$s</string>
|
||||
<string name="telegram_url">https://t.me/CoMapsApp/</string>
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
<string name="pref_enable_logging" translatable="false">EnableLogging</string>
|
||||
<string name="pref_emulate_bad_external_storage" translatable="false">EmulateBadExternalStorage</string>
|
||||
<string name="pref_about" translatable="false">AboutOrganicMaps</string>
|
||||
<string name="pref_help" translatable="false">Help</string>
|
||||
<string name="pref_file_name" translatable="false">OrganicMapsPrefs</string>
|
||||
<string name="pref_map_style" translatable="false">MapStyle</string>
|
||||
<string name="pref_tts_screen" translatable="false">TtsScreen</string>
|
||||
@@ -40,7 +41,6 @@
|
||||
<string name="pref_keep_screen_on" translatable="false">KeepScreenOn</string>
|
||||
<string name="pref_show_on_lock_screen" translatable="false">ShowOnLockScreen</string>
|
||||
<string name="pref_map_locale" translatable="false">MapLanguage</string>
|
||||
<string name="pref_backup" translatable="false">Backup</string>
|
||||
<string name="pref_left_button" translatable="false">LeftButton</string>
|
||||
|
||||
<string name="notification_ticker_ltr" translatable="false">%1$s: %2$s</string>
|
||||
|
||||
@@ -23,29 +23,7 @@
|
||||
<item>0</item>
|
||||
<item>1</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="backup_interval_entries">
|
||||
<item>@string/backup_interval_every_day</item>
|
||||
<item>@string/backup_interval_every_week</item>
|
||||
<item>@string/backup_interval_manual_only</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="backup_interval_values">
|
||||
<item>86400000</item> <!-- Every day -->
|
||||
<item>604800000</item> <!-- Every week -->
|
||||
<item>0</item> <!-- Manual only -->
|
||||
</string-array>
|
||||
|
||||
<string-array name="backup_history_entries">
|
||||
<item>3</item>
|
||||
<item>10</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="backup_history_values">
|
||||
<item>3</item>
|
||||
<item>10</item>
|
||||
</string-array>
|
||||
|
||||
|
||||
<string-array name="map_style">
|
||||
<item>@string/off</item>
|
||||
<item>@string/on</item>
|
||||
|
||||
@@ -291,8 +291,6 @@
|
||||
<string name="vk">VK</string>
|
||||
<!-- Text in menu -->
|
||||
<string name="bluesky">Bluesky</string>
|
||||
<!-- Text on the place page -->
|
||||
<string name="panoramax">Panoramax Picture</string>
|
||||
<!-- Text in the editor -->
|
||||
<string name="editor_line_social_network">LINE</string>
|
||||
<!-- Text in menu -->
|
||||
@@ -936,32 +934,6 @@
|
||||
<string name="codeberg">Codeberg</string>
|
||||
<string name="pref_left_button_title">Left button setup</string>
|
||||
<string name="pref_left_button_disable">Disable</string>
|
||||
|
||||
<!-- Settings "Backup" category: "Backup" title -->
|
||||
<string name="pref_backup_title">Bookmarks and tracks backup</string>
|
||||
<string name="pref_backup_summary">Automatically backup to a folder on your device</string>
|
||||
<string name="pref_backup_now_title">Backup now</string>
|
||||
<string name="pref_backup_now_summary">Create a backup immediately</string>
|
||||
<string name="pref_backup_now_summary_progress">Backup in progress…</string>
|
||||
<string name="pref_backup_now_summary_ok">Backup completed successfully</string>
|
||||
<string name="pref_backup_now_summary_empty_lists">Nothing to back up</string>
|
||||
<string name="pref_backup_now_summary_failed">Backup failed</string>
|
||||
<string name="pref_backup_now_summary_folder_unavailable">The backup folder is not available</string>
|
||||
<string name="pref_backup_status_summary_success">Last successful backup</string>
|
||||
<string name="pref_backup_location_title">Backup location</string>
|
||||
<string name="pref_backup_location_summary_initial">Please select a folder first and grant permission</string>
|
||||
<string name="pref_backup_history_title">Number of backups to keep</string>
|
||||
<string name="pref_backup_interval_title">Automatic backup</string>
|
||||
<string name="backup_interval_every_day">Daily</string>
|
||||
<string name="backup_interval_every_week">Weekly</string>
|
||||
<string name="backup_interval_manual_only">Off (manual only)</string>
|
||||
<string name="dialog_report_error_missing_folder">The selected backup location is not available or writable. Select a different location, please.</string>
|
||||
<string name="dialog_report_error_with_logs">Please send us an error report:\n
|
||||
- \"Enable logging\" in the settings\n
|
||||
- reproduce the problem\n
|
||||
- in the \"Help/About\" screen press a \"Report a bug\" button and send it to us via email or chat\n
|
||||
- disable logging
|
||||
</string>
|
||||
<string name="clear">Clear</string>
|
||||
<string name="route_type">Route type</string>
|
||||
<string name="vehicle">Vehicle</string>
|
||||
@@ -969,5 +941,4 @@
|
||||
<string name="bicycle">Bicycle</string>
|
||||
<string name="ruler">Ruler</string>
|
||||
<string name="bookmark_color">Bookmark color</string>
|
||||
<string name="about_help">About & Help</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<Preference
|
||||
android:key="backup_location"
|
||||
android:summary="@string/pref_backup_location_summary_initial"
|
||||
android:title="@string/pref_backup_location_title" />
|
||||
<Preference
|
||||
android:key="backup_now"
|
||||
android:summary="@string/pref_backup_now_summary"
|
||||
android:title="@string/pref_backup_now_title" />
|
||||
<ListPreference
|
||||
android:defaultValue="86400000"
|
||||
android:entries="@array/backup_interval_entries"
|
||||
android:entryValues="@array/backup_interval_values"
|
||||
android:key="backup_history_interval"
|
||||
android:title="@string/pref_backup_interval_title" />
|
||||
<ListPreference
|
||||
android:defaultValue="10"
|
||||
android:entries="@array/backup_history_entries"
|
||||
android:entryValues="@array/backup_history_values"
|
||||
android:key="backup_history_count"
|
||||
android:title="@string/pref_backup_history_title" />
|
||||
|
||||
</PreferenceScreen>
|
||||
@@ -112,13 +112,6 @@
|
||||
app:singleLineTitle="false"
|
||||
android:persistent="false"
|
||||
android:order="18"/>
|
||||
<Preference
|
||||
android:key="@string/pref_backup"
|
||||
android:title="@string/pref_backup_title"
|
||||
android:summary="@string/pref_backup_summary"
|
||||
app:singleLineTitle="false"
|
||||
android:persistent="false"
|
||||
android:order="19"/>
|
||||
</androidx.preference.PreferenceCategory>
|
||||
|
||||
<androidx.preference.PreferenceCategory
|
||||
@@ -178,4 +171,15 @@
|
||||
android:defaultValue="true"
|
||||
android:order="2"/>
|
||||
</androidx.preference.PreferenceCategory>
|
||||
<androidx.preference.PreferenceCategory
|
||||
android:key="@string/pref_information"
|
||||
android:title="@string/prefs_group_information"
|
||||
android:order="7">
|
||||
<Preference
|
||||
android:key="@string/pref_help"
|
||||
android:title="@string/help"
|
||||
app:singleLineTitle="false"
|
||||
android:order="1">
|
||||
</Preference>
|
||||
</androidx.preference.PreferenceCategory>
|
||||
</androidx.preference.PreferenceScreen>
|
||||
|
||||
@@ -410,7 +410,7 @@ pl:4Atrakcje turystyczne|Osobliwości miasta|Turystyka|zwiedzanie
|
||||
pt:4Atrações turísticas|3Turismo|Miradouros
|
||||
pt-BR:4Atraçãos|3Turismo
|
||||
ro:5Obiective turistice|4Turism
|
||||
es:5Atracciones turísticas|4Turismo
|
||||
es:4Turismo
|
||||
et:Vaatamisväärsused
|
||||
eu:4Turismoa
|
||||
sr:5Туристичка атракција|5Атракција|5Атракције|6Знаменитости|5Туризам|5Turistička atrakcija|5Atrakcija|5Atrakcije|6Znamenitosti|5Turizam
|
||||
|
||||
@@ -307,6 +307,7 @@
|
||||
16119285
|
||||
16169823
|
||||
16173957
|
||||
16248287
|
||||
16372627
|
||||
16391736
|
||||
16431936
|
||||
@@ -314,7 +315,6 @@
|
||||
16440736
|
||||
16445666
|
||||
16557154
|
||||
16577252
|
||||
16579778
|
||||
16579836
|
||||
16728450
|
||||
@@ -340,15 +340,10 @@
|
||||
16777215
|
||||
221978645
|
||||
222898459
|
||||
223036995
|
||||
223300167
|
||||
233867264
|
||||
234004016
|
||||
234879733
|
||||
234881023
|
||||
307054404
|
||||
318765813
|
||||
318767103
|
||||
436602368
|
||||
437326080
|
||||
438572045
|
||||
@@ -375,6 +370,8 @@
|
||||
452983541
|
||||
452984574
|
||||
452984831
|
||||
575358531
|
||||
587201269
|
||||
609045837
|
||||
654706176
|
||||
655629312
|
||||
|
||||
@@ -275,8 +275,6 @@
|
||||
<li>Code2000 Font<br>
|
||||
© 1998–2003 James Kass; Shareware</li>
|
||||
</ul>
|
||||
<li><a href="https://upload.wikimedia.org/wikipedia/commons/a/a9/Panoramax.svg">Panoramax</a><br>
|
||||
© 2023 Adrien Pavie; <a href="license" class="license">CC BY 4.0 License</a></li>
|
||||
|
||||
<p id="icons">We also use these icons on the map:</p>
|
||||
|
||||
|
||||
@@ -23166,7 +23166,7 @@ cont {
|
||||
scale: 15
|
||||
lines {
|
||||
width: 1.5
|
||||
color: 441140803
|
||||
color: 575358531
|
||||
dashdot {
|
||||
dd: 5.0
|
||||
dd: 1.5
|
||||
@@ -23187,7 +23187,7 @@ cont {
|
||||
scale: 16
|
||||
lines {
|
||||
width: 2.0
|
||||
color: 223036995
|
||||
color: 575358531
|
||||
dashdot {
|
||||
dd: 5.0
|
||||
dd: 1.5
|
||||
@@ -23207,7 +23207,7 @@ cont {
|
||||
scale: 17
|
||||
lines {
|
||||
width: 2.4
|
||||
color: 223036995
|
||||
color: 575358531
|
||||
dashdot {
|
||||
dd: 6.0
|
||||
dd: 1.8
|
||||
@@ -23297,7 +23297,7 @@ cont {
|
||||
scale: 15
|
||||
lines {
|
||||
width: 1.5
|
||||
color: 441140803
|
||||
color: 575358531
|
||||
dashdot {
|
||||
dd: 5.0
|
||||
dd: 1.5
|
||||
@@ -23322,7 +23322,7 @@ cont {
|
||||
scale: 16
|
||||
lines {
|
||||
width: 2.0
|
||||
color: 223036995
|
||||
color: 575358531
|
||||
dashdot {
|
||||
dd: 5.0
|
||||
dd: 1.5
|
||||
@@ -23346,7 +23346,7 @@ cont {
|
||||
scale: 17
|
||||
lines {
|
||||
width: 2.4
|
||||
color: 223036995
|
||||
color: 575358531
|
||||
dashdot {
|
||||
dd: 6.0
|
||||
dd: 1.8
|
||||
@@ -23606,7 +23606,7 @@ cont {
|
||||
}
|
||||
lines {
|
||||
width: 1.5
|
||||
color: 441140803
|
||||
color: 575358531
|
||||
dashdot {
|
||||
dd: 5.0
|
||||
dd: 1.5
|
||||
@@ -23633,7 +23633,7 @@ cont {
|
||||
}
|
||||
lines {
|
||||
width: 2.0
|
||||
color: 223036995
|
||||
color: 575358531
|
||||
dashdot {
|
||||
dd: 5.0
|
||||
dd: 1.5
|
||||
@@ -23665,7 +23665,7 @@ cont {
|
||||
}
|
||||
lines {
|
||||
width: 2.4
|
||||
color: 223036995
|
||||
color: 575358531
|
||||
dashdot {
|
||||
dd: 6.0
|
||||
dd: 1.8
|
||||
@@ -23784,7 +23784,7 @@ cont {
|
||||
scale: 16
|
||||
lines {
|
||||
width: 2.0
|
||||
color: 223036995
|
||||
color: 575358531
|
||||
dashdot {
|
||||
dd: 5.0
|
||||
dd: 1.5
|
||||
@@ -23796,7 +23796,7 @@ cont {
|
||||
scale: 17
|
||||
lines {
|
||||
width: 2.4
|
||||
color: 223036995
|
||||
color: 575358531
|
||||
dashdot {
|
||||
dd: 6.0
|
||||
dd: 1.8
|
||||
@@ -23847,7 +23847,7 @@ cont {
|
||||
scale: 16
|
||||
lines {
|
||||
width: 2.0
|
||||
color: 223036995
|
||||
color: 575358531
|
||||
dashdot {
|
||||
dd: 5.0
|
||||
dd: 1.5
|
||||
@@ -23859,7 +23859,7 @@ cont {
|
||||
scale: 17
|
||||
lines {
|
||||
width: 2.4
|
||||
color: 223036995
|
||||
color: 575358531
|
||||
dashdot {
|
||||
dd: 6.0
|
||||
dd: 1.8
|
||||
@@ -23910,7 +23910,7 @@ cont {
|
||||
scale: 15
|
||||
lines {
|
||||
width: 1.5
|
||||
color: 441140803
|
||||
color: 575358531
|
||||
dashdot {
|
||||
dd: 5.0
|
||||
dd: 1.5
|
||||
@@ -23931,7 +23931,7 @@ cont {
|
||||
scale: 16
|
||||
lines {
|
||||
width: 2.0
|
||||
color: 223036995
|
||||
color: 575358531
|
||||
dashdot {
|
||||
dd: 5.0
|
||||
dd: 1.5
|
||||
@@ -23951,7 +23951,7 @@ cont {
|
||||
scale: 17
|
||||
lines {
|
||||
width: 2.4
|
||||
color: 223036995
|
||||
color: 575358531
|
||||
dashdot {
|
||||
dd: 6.0
|
||||
dd: 1.8
|
||||
@@ -24137,7 +24137,7 @@ cont {
|
||||
scale: 16
|
||||
lines {
|
||||
width: 2.4
|
||||
color: 307054404
|
||||
color: 441272132
|
||||
dashdot {
|
||||
dd: 8.0
|
||||
dd: 1.5
|
||||
@@ -24161,7 +24161,7 @@ cont {
|
||||
scale: 17
|
||||
lines {
|
||||
width: 3.0
|
||||
color: 307054404
|
||||
color: 441272132
|
||||
dashdot {
|
||||
dd: 9.0
|
||||
dd: 1.8
|
||||
@@ -26904,6 +26904,19 @@ cont {
|
||||
}
|
||||
cont {
|
||||
name: "highway-path"
|
||||
element {
|
||||
scale: 14
|
||||
lines {
|
||||
width: 0.9
|
||||
color: 1720994322
|
||||
dashdot {
|
||||
dd: 3.5
|
||||
dd: 2.0
|
||||
}
|
||||
priority: 180
|
||||
cap: BUTTCAP
|
||||
}
|
||||
}
|
||||
element {
|
||||
scale: 15
|
||||
lines {
|
||||
@@ -27036,6 +27049,16 @@ cont {
|
||||
priority: 219
|
||||
cap: BUTTCAP
|
||||
}
|
||||
lines {
|
||||
width: 0.9
|
||||
color: 1720994322
|
||||
dashdot {
|
||||
dd: 3.5
|
||||
dd: 2.7
|
||||
}
|
||||
priority: 220
|
||||
cap: BUTTCAP
|
||||
}
|
||||
}
|
||||
element {
|
||||
scale: 15
|
||||
@@ -27192,6 +27215,19 @@ cont {
|
||||
}
|
||||
cont {
|
||||
name: "highway-path-bridge"
|
||||
element {
|
||||
scale: 14
|
||||
lines {
|
||||
width: 0.9
|
||||
color: 1720994322
|
||||
dashdot {
|
||||
dd: 3.5
|
||||
dd: 2.0
|
||||
}
|
||||
priority: 155
|
||||
cap: BUTTCAP
|
||||
}
|
||||
}
|
||||
element {
|
||||
scale: 15
|
||||
lines {
|
||||
@@ -27376,6 +27412,19 @@ cont {
|
||||
}
|
||||
cont {
|
||||
name: "highway-path-difficult"
|
||||
element {
|
||||
scale: 14
|
||||
lines {
|
||||
width: 0.9
|
||||
color: 1720994322
|
||||
dashdot {
|
||||
dd: 1.0
|
||||
dd: 2.0
|
||||
}
|
||||
priority: 180
|
||||
cap: BUTTCAP
|
||||
}
|
||||
}
|
||||
element {
|
||||
scale: 15
|
||||
lines {
|
||||
@@ -27500,6 +27549,19 @@ cont {
|
||||
}
|
||||
cont {
|
||||
name: "highway-path-expert"
|
||||
element {
|
||||
scale: 14
|
||||
lines {
|
||||
width: 0.9
|
||||
color: 1716665907
|
||||
dashdot {
|
||||
dd: 1.0
|
||||
dd: 4.0
|
||||
}
|
||||
priority: 180
|
||||
cap: BUTTCAP
|
||||
}
|
||||
}
|
||||
element {
|
||||
scale: 15
|
||||
lines {
|
||||
@@ -27624,6 +27686,19 @@ cont {
|
||||
}
|
||||
cont {
|
||||
name: "highway-path-horse"
|
||||
element {
|
||||
scale: 14
|
||||
lines {
|
||||
width: 0.9
|
||||
color: 1720994322
|
||||
dashdot {
|
||||
dd: 3.5
|
||||
dd: 2.0
|
||||
}
|
||||
priority: 155
|
||||
cap: BUTTCAP
|
||||
}
|
||||
}
|
||||
element {
|
||||
scale: 15
|
||||
lines {
|
||||
@@ -27748,6 +27823,19 @@ cont {
|
||||
}
|
||||
cont {
|
||||
name: "highway-path-tunnel"
|
||||
element {
|
||||
scale: 14
|
||||
lines {
|
||||
width: 0.9
|
||||
color: 1720994322
|
||||
dashdot {
|
||||
dd: 3.5
|
||||
dd: 2.0
|
||||
}
|
||||
priority: 155
|
||||
cap: BUTTCAP
|
||||
}
|
||||
}
|
||||
element {
|
||||
scale: 15
|
||||
lines {
|
||||
@@ -27995,7 +28083,7 @@ cont {
|
||||
scale: 16
|
||||
lines {
|
||||
width: 2.4
|
||||
color: 307054404
|
||||
color: 441272132
|
||||
dashdot {
|
||||
dd: 8.0
|
||||
dd: 1.5
|
||||
@@ -28015,7 +28103,7 @@ cont {
|
||||
scale: 17
|
||||
lines {
|
||||
width: 3.0
|
||||
color: 307054404
|
||||
color: 441272132
|
||||
dashdot {
|
||||
dd: 9.0
|
||||
dd: 1.8
|
||||
@@ -28161,7 +28249,7 @@ cont {
|
||||
scale: 16
|
||||
lines {
|
||||
width: 2.4
|
||||
color: 307054404
|
||||
color: 441272132
|
||||
dashdot {
|
||||
dd: 8.0
|
||||
dd: 1.5
|
||||
@@ -28185,7 +28273,7 @@ cont {
|
||||
scale: 17
|
||||
lines {
|
||||
width: 3.0
|
||||
color: 307054404
|
||||
color: 441272132
|
||||
dashdot {
|
||||
dd: 9.0
|
||||
dd: 1.8
|
||||
@@ -28381,7 +28469,7 @@ cont {
|
||||
}
|
||||
lines {
|
||||
width: 2.4
|
||||
color: 307054404
|
||||
color: 441272132
|
||||
dashdot {
|
||||
dd: 8.0
|
||||
dd: 1.5
|
||||
@@ -28413,7 +28501,7 @@ cont {
|
||||
}
|
||||
lines {
|
||||
width: 3.0
|
||||
color: 307054404
|
||||
color: 441272132
|
||||
dashdot {
|
||||
dd: 9.0
|
||||
dd: 1.8
|
||||
@@ -34241,7 +34329,7 @@ cont {
|
||||
scale: 15
|
||||
lines {
|
||||
width: 2.4
|
||||
color: 4933187
|
||||
color: 441140803
|
||||
dashdot {
|
||||
dd: 1.5
|
||||
dd: 1.3
|
||||
@@ -34254,7 +34342,7 @@ cont {
|
||||
scale: 16
|
||||
lines {
|
||||
width: 4.0
|
||||
color: 4933187
|
||||
color: 441140803
|
||||
dashdot {
|
||||
dd: 1.8
|
||||
dd: 1.6
|
||||
@@ -34363,7 +34451,7 @@ cont {
|
||||
}
|
||||
lines {
|
||||
width: 2.4
|
||||
color: 4933187
|
||||
color: 441140803
|
||||
dashdot {
|
||||
dd: 1.5
|
||||
dd: 1.3
|
||||
@@ -34382,7 +34470,7 @@ cont {
|
||||
}
|
||||
lines {
|
||||
width: 4.0
|
||||
color: 4933187
|
||||
color: 441140803
|
||||
dashdot {
|
||||
dd: 1.8
|
||||
dd: 1.6
|
||||
@@ -34533,7 +34621,7 @@ cont {
|
||||
scale: 15
|
||||
lines {
|
||||
width: 2.4
|
||||
color: 4933187
|
||||
color: 441140803
|
||||
dashdot {
|
||||
dd: 1.5
|
||||
dd: 1.3
|
||||
@@ -34546,7 +34634,7 @@ cont {
|
||||
scale: 16
|
||||
lines {
|
||||
width: 4.0
|
||||
color: 4933187
|
||||
color: 441140803
|
||||
dashdot {
|
||||
dd: 1.8
|
||||
dd: 1.6
|
||||
@@ -35886,6 +35974,19 @@ cont {
|
||||
}
|
||||
cont {
|
||||
name: "highway-track"
|
||||
element {
|
||||
scale: 14
|
||||
lines {
|
||||
width: 1.1
|
||||
color: 1717523245
|
||||
dashdot {
|
||||
dd: 6.0
|
||||
dd: 2.5
|
||||
}
|
||||
priority: 180
|
||||
cap: BUTTCAP
|
||||
}
|
||||
}
|
||||
element {
|
||||
scale: 15
|
||||
lines {
|
||||
@@ -36010,6 +36111,19 @@ cont {
|
||||
}
|
||||
cont {
|
||||
name: "highway-track-area"
|
||||
element {
|
||||
scale: 14
|
||||
lines {
|
||||
width: 1.1
|
||||
color: 1717523245
|
||||
dashdot {
|
||||
dd: 6.0
|
||||
dd: 2.5
|
||||
}
|
||||
priority: 180
|
||||
cap: BUTTCAP
|
||||
}
|
||||
}
|
||||
element {
|
||||
scale: 15
|
||||
lines {
|
||||
@@ -36134,6 +36248,19 @@ cont {
|
||||
}
|
||||
cont {
|
||||
name: "highway-track-bridge"
|
||||
element {
|
||||
scale: 14
|
||||
lines {
|
||||
width: 1.1
|
||||
color: 1717523245
|
||||
dashdot {
|
||||
dd: 6.0
|
||||
dd: 2.5
|
||||
}
|
||||
priority: 180
|
||||
cap: BUTTCAP
|
||||
}
|
||||
}
|
||||
element {
|
||||
scale: 15
|
||||
lines {
|
||||
@@ -36318,6 +36445,19 @@ cont {
|
||||
}
|
||||
cont {
|
||||
name: "highway-track-no-access"
|
||||
element {
|
||||
scale: 14
|
||||
lines {
|
||||
width: 1.1
|
||||
color: 1717523245
|
||||
dashdot {
|
||||
dd: 6.0
|
||||
dd: 2.5
|
||||
}
|
||||
priority: 180
|
||||
cap: BUTTCAP
|
||||
}
|
||||
}
|
||||
element {
|
||||
scale: 15
|
||||
lines {
|
||||
@@ -36442,6 +36582,19 @@ cont {
|
||||
}
|
||||
cont {
|
||||
name: "highway-track-tunnel"
|
||||
element {
|
||||
scale: 14
|
||||
lines {
|
||||
width: 1.1
|
||||
color: 1717523245
|
||||
dashdot {
|
||||
dd: 6.0
|
||||
dd: 2.5
|
||||
}
|
||||
priority: 180
|
||||
cap: BUTTCAP
|
||||
}
|
||||
}
|
||||
element {
|
||||
scale: 15
|
||||
lines {
|
||||
@@ -63251,6 +63404,19 @@ cont {
|
||||
}
|
||||
cont {
|
||||
name: "piste:type-hike"
|
||||
element {
|
||||
scale: 14
|
||||
lines {
|
||||
width: 0.9
|
||||
color: 2573352319
|
||||
dashdot {
|
||||
dd: 3.5
|
||||
dd: 2.0
|
||||
}
|
||||
priority: 120
|
||||
cap: BUTTCAP
|
||||
}
|
||||
}
|
||||
element {
|
||||
scale: 15
|
||||
lines {
|
||||
|
||||
@@ -25613,7 +25613,7 @@ cont {
|
||||
scale: 16
|
||||
lines {
|
||||
width: 2.4
|
||||
color: 307054404
|
||||
color: 441272132
|
||||
dashdot {
|
||||
dd: 8.0
|
||||
dd: 1.5
|
||||
@@ -25637,7 +25637,7 @@ cont {
|
||||
scale: 17
|
||||
lines {
|
||||
width: 3.0
|
||||
color: 307054404
|
||||
color: 441272132
|
||||
dashdot {
|
||||
dd: 9.0
|
||||
dd: 1.8
|
||||
@@ -29978,7 +29978,7 @@ cont {
|
||||
scale: 16
|
||||
lines {
|
||||
width: 2.4
|
||||
color: 307054404
|
||||
color: 441272132
|
||||
dashdot {
|
||||
dd: 8.0
|
||||
dd: 1.5
|
||||
@@ -29998,7 +29998,7 @@ cont {
|
||||
scale: 17
|
||||
lines {
|
||||
width: 3.0
|
||||
color: 307054404
|
||||
color: 441272132
|
||||
dashdot {
|
||||
dd: 9.0
|
||||
dd: 1.8
|
||||
@@ -30144,7 +30144,7 @@ cont {
|
||||
scale: 16
|
||||
lines {
|
||||
width: 2.4
|
||||
color: 307054404
|
||||
color: 441272132
|
||||
dashdot {
|
||||
dd: 8.0
|
||||
dd: 1.5
|
||||
@@ -30168,7 +30168,7 @@ cont {
|
||||
scale: 17
|
||||
lines {
|
||||
width: 3.0
|
||||
color: 307054404
|
||||
color: 441272132
|
||||
dashdot {
|
||||
dd: 9.0
|
||||
dd: 1.8
|
||||
@@ -30364,7 +30364,7 @@ cont {
|
||||
}
|
||||
lines {
|
||||
width: 2.4
|
||||
color: 307054404
|
||||
color: 441272132
|
||||
dashdot {
|
||||
dd: 8.0
|
||||
dd: 1.5
|
||||
@@ -30396,7 +30396,7 @@ cont {
|
||||
}
|
||||
lines {
|
||||
width: 3.0
|
||||
color: 307054404
|
||||
color: 441272132
|
||||
dashdot {
|
||||
dd: 9.0
|
||||
dd: 1.8
|
||||
|
||||
@@ -1,55 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
version="1.1"
|
||||
viewBox="0 0 24 24"
|
||||
width="18"
|
||||
height="18"
|
||||
id="svg1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<title
|
||||
id="title1">train-m</title>
|
||||
<g
|
||||
id="Page-2:-Night"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
opacity="1">
|
||||
<g
|
||||
id="train-m"
|
||||
fill-rule="nonzero">
|
||||
<rect
|
||||
id="Rectangle"
|
||||
width="24"
|
||||
height="24"
|
||||
rx="2.5"
|
||||
fill="#000"
|
||||
opacity=".6" />
|
||||
<rect
|
||||
id="rect1"
|
||||
x="1"
|
||||
y="1"
|
||||
width="22"
|
||||
height="22"
|
||||
rx="2"
|
||||
fill="#2F6499" />
|
||||
<path
|
||||
id="train-m-a"
|
||||
d="m 9.033318,18 0.66667,-1 h -1.7 l -2,3 h 0.62963 c 0.66871,0 1.2932,-0.3342 1.6641,-0.8906 L 8.366652,19 h 7.2667 l 0.07293,0.1094 c 0.37093,0.5564 0.99539,0.8906 1.6641,0.8906 h 0.62963 l -2,-3 h -1.7 l 0.66667,1 h -5.9333 z m 0.3535,-14 h 5.2263 c 1.612,0 2.9358,1.2739 2.9978,2.8847 l 0.30917,8.0384 c 0.04245,1.1038 -0.8179,2.0329 -1.9217,2.0754 C 15.972778,16.999485 15.947148,17 15.921518,17 h -7.8432 c -1.1046,0 -2,-0.89543 -2,-2 0,-0.02563 4.926e-4,-0.05126 0.00148,-0.07687 l 0.30917,-8.0384003 c 0.061954,-1.6108 1.3858,-2.8847 2.9978,-2.8847 z m -0.46364,2.5 c -0.52136,0 -0.95524,0.40055 -0.99682,0.92025 l -0.24,3 c -0.00212,0.02653 -0.00318,0.05313 -0.00318,0.07975 0,0.55228 0.44772,1 1,1 h 6.6336 c 0.02661,0 0.05322,-0.0011 0.07974,-0.0032 0.55053,-0.04404 0.96111,-0.52603 0.91707,-1.0766 l -0.24,-3 c -0.04158,-0.5197 -0.47545,-0.92025 -0.99682,-0.92025 h -6.1536 z M 8.999983,15 c 0.55228,0 1,-0.44772 1,-1 0,-0.55228 -0.44772,-1 -1,-1 -0.55228,0 -1,0.44772 -1,1 0,0.55228 0.44772,1 1,1 z m 6,0 c 0.55228,0 1,-0.44772 1,-1 0,-0.55228 -0.44772,-1 -1,-1 -0.55228,0 -1,0.44772 -1,1 0,0.55228 0.44772,1 1,1 z m -4.75,-10 c -0.13807,0 -0.25,0.11193 -0.25,0.25 0,0.13807 0.11193,0.25 0.25,0.25 h 3.5 c 0.13807,0 0.25,-0.11193 0.25,-0.25 0,-0.13807 -0.11193,-0.25 -0.25,-0.25 z"
|
||||
style="fill:#000000;fill-opacity:1" />
|
||||
</g>
|
||||
<svg version="1.1" viewBox="0 0 24 24" width="18" height="18" xmlns="http://www.w3.org/2000/svg">
|
||||
<title>train-m</title>
|
||||
<g id="Page-2:-Night" fill="none" fill-rule="evenodd" opacity="1">
|
||||
<g id="train-m" fill-rule="nonzero">
|
||||
<rect id="Rectangle" width="24" height="24" rx="2.5" fill="#000" opacity=".6"/>
|
||||
<rect id="Rectangle" x="1" y="1" width="22" height="22" rx="2" fill="#2F6499"/>
|
||||
<path id="Shape" d="m11.895 5c-2.9474 0-5.8947 0.36842-5.8947 2.9474v7c0 1.4221 1.1568 2.5789 2.5789 2.5789l-1.1053 1.1053v0.36842h1.6432l1.4737-1.4737h2.7779l1.4737 1.4737h1.4737v-0.36842l-1.1053-1.1053c1.4221 0 2.5789-1.1568 2.5789-2.5789v-7c0-2.5789-2.6379-2.9474-5.8947-2.9474zm-3.3158 11.053c-0.61158 0-1.1053-0.49368-1.1053-1.1053 0-0.61158 0.49368-1.1053 1.1053-1.1053s1.1053 0.49368 1.1053 1.1053c0 0.61158-0.49368 1.1053-1.1053 1.1053zm2.5789-5.1579h-3.6842v-2.9474h3.6842v2.9474zm1.4737 0v-2.9474h3.6842v2.9474h-3.6842zm2.5789 5.1579c-0.61158 0-1.1053-0.49368-1.1053-1.1053 0-0.61158 0.49368-1.1053 1.1053-1.1053 0.61158 0 1.1053 0.49368 1.1053 1.1053 0 0.61158-0.49368 1.1053-1.1053 1.1053z" fill="#000"/>
|
||||
</g>
|
||||
<metadata
|
||||
id="metadata1">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:title>train-m</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 1.1 KiB |
@@ -1,55 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
version="1.1"
|
||||
viewBox="0 0 16 16"
|
||||
width="12"
|
||||
height="12"
|
||||
id="svg1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<title
|
||||
id="title1">train-s</title>
|
||||
<g
|
||||
id="Page-2:-Night"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
opacity="1">
|
||||
<g
|
||||
id="train-s"
|
||||
fill-rule="nonzero">
|
||||
<rect
|
||||
id="Rectangle"
|
||||
width="16"
|
||||
height="16"
|
||||
rx="2.5"
|
||||
fill="#000"
|
||||
opacity=".6" />
|
||||
<rect
|
||||
id="rect1"
|
||||
x=".66667"
|
||||
y=".66667"
|
||||
width="14.667"
|
||||
height="14.667"
|
||||
rx="2"
|
||||
fill="#2F6499" />
|
||||
<path
|
||||
id="train-m-a"
|
||||
d="M 6.0222132,12 6.4666598,11.333333 H 5.3333265 l -1.333333,2 h 0.419753 c 0.445807,0 0.862133,-0.2228 1.1094,-0.593733 l 0.04862,-0.07293 h 4.8444665 l 0.04862,0.07293 c 0.247287,0.370933 0.663593,0.593733 1.1094,0.593733 h 0.419753 l -1.333333,-2 H 9.5333398 L 9.9777865,12 H 6.0222532 Z M 6.2578798,2.6666669 h 3.4842001 c 1.0746661,0 1.9572001,0.8492666 1.9985331,1.9231332 l 0.206113,5.3589334 C 11.975026,10.6846 11.40146,11.304 10.665593,11.332333 c -0.01707,6.57e-4 -0.03416,10e-4 -0.05125,10e-4 H 5.3855465 c -0.7364,0 -1.333333,-0.596953 -1.333333,-1.333333 0,-0.017087 3.28e-4,-0.034173 0.001,-0.051247 l 0.206113,-5.3589336 c 0.0413,-1.0738667 0.923867,-1.9231333 1.998533,-1.9231333 z M 5.9487865,4.3333334 c -0.347573,0 -0.636827,0.2670334 -0.664547,0.6135 l -0.16,2 c -0.0014,0.017687 -0.0021,0.03542 -0.0021,0.053167 0,0.3681867 0.29848,0.6666667 0.666667,0.6666667 h 4.4223995 c 0.01774,0 0.03548,-7.334e-4 0.05316,-0.00213 0.36702,-0.02936 0.64074,-0.3506866 0.61138,-0.7177333 l -0.16,-2 c -0.02775,-0.3464704 -0.317,-0.6135037 -0.66458,-0.6135037 H 5.9487665 Z M 5.9999935,10 c 0.3681863,0 0.6666663,-0.2984798 0.6666663,-0.6666665 0,-0.3681866 -0.29848,-0.6666666 -0.6666663,-0.6666666 -0.368187,0 -0.666667,0.29848 -0.666667,0.6666666 C 5.3333265,9.7015202 5.6318065,10 5.9999935,10 Z m 3.9999997,0 C 10.36818,10 10.66666,9.7015202 10.66666,9.3333335 c 0,-0.3681866 -0.29848,-0.6666666 -0.6666668,-0.6666666 -0.3681868,0 -0.6666667,0.29848 -0.6666667,0.6666666 C 9.3333265,9.7015202 9.6318064,10 9.9999932,10 Z M 6.8333265,3.3333334 c -0.092047,0 -0.1666667,0.07462 -0.1666667,0.1666667 0,0.092047 0.07462,0.1666667 0.1666667,0.1666667 h 2.3333333 c 0.092047,0 0.1666667,-0.07462 0.1666667,-0.1666667 0,-0.092047 -0.07462,-0.1666667 -0.1666667,-0.1666667 z"
|
||||
style="fill:#000000;fill-opacity:1;stroke-width:0.666667" />
|
||||
</g>
|
||||
<svg version="1.1" viewBox="0 0 16 16" width="12" height="12" xmlns="http://www.w3.org/2000/svg">
|
||||
<title>train-s</title>
|
||||
<g id="Page-2:-Night" fill="none" fill-rule="evenodd" opacity="1">
|
||||
<g id="train-s" fill-rule="nonzero">
|
||||
<rect id="Rectangle" width="16" height="16" rx="2.5" fill="#000" opacity=".6"/>
|
||||
<rect id="Rectangle" x=".66667" y=".66667" width="14.667" height="14.667" rx="2" fill="#2F6499"/>
|
||||
<path id="Shape" d="m7.9298 3.3333c-1.9649 0-3.9298 0.24561-3.9298 1.9649v4.6667c0 0.94807 0.77123 1.7193 1.7193 1.7193l-0.73684 0.73684v0.24561h1.0954l0.98246-0.98246h1.8519l0.98246 0.98246h0.98246v-0.24561l-0.73684-0.73684c0.94807 0 1.7193-0.77123 1.7193-1.7193v-4.6667c0-1.7193-1.7586-1.9649-3.9298-1.9649zm-2.2105 7.3684c-0.40772 0-0.73684-0.32912-0.73684-0.73684 0-0.40772 0.32912-0.73684 0.73684-0.73684 0.40772 0 0.73684 0.32912 0.73684 0.73684 0 0.40772-0.32912 0.73684-0.73684 0.73684zm1.7193-3.4386h-2.4561v-1.9649h2.4561v1.9649zm0.98246 0v-1.9649h2.4561v1.9649h-2.4561zm1.7193 3.4386c-0.40772 0-0.73684-0.32912-0.73684-0.73684 0-0.40772 0.32912-0.73684 0.73684-0.73684 0.40772 0 0.73684 0.32912 0.73684 0.73684 0 0.40772-0.32912 0.73684-0.73684 0.73684z" fill="#000"/>
|
||||
</g>
|
||||
<metadata
|
||||
id="metadata1">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:title>train-s</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 1.2 KiB |
@@ -683,9 +683,6 @@ line|z19-[highway=busway],
|
||||
line|z13-[highway=pedestrian],
|
||||
line|z13-[highway=ford]
|
||||
{color: @pedestrian;opacity: 0.9;}
|
||||
line|z16-[highway=pedestrian],
|
||||
line|z16-[highway=ford],
|
||||
{opacity: 0.93;}
|
||||
|
||||
line|z13-[highway=cycleway],
|
||||
line|z14-[highway=path][bicycle=designated]::cycleline,
|
||||
@@ -714,7 +711,7 @@ line|z17-[highway=steps][bridge?]::bridgeblack,
|
||||
line|z16-[highway=road][bridge?]::bridgeblack,
|
||||
line|z16-[highway=service][bridge?]::bridgeblack
|
||||
{casing-linecap: butt;casing-color:@bridge_casing;casing-opacity: 0.7;}
|
||||
line|z15-[highway=track],
|
||||
line|z14-[highway=track],
|
||||
{color: @track;opacity: 0.6;}
|
||||
line|z14-[highway=raceway],
|
||||
{color: @track;opacity: 0.7;}
|
||||
@@ -723,16 +720,14 @@ line|z15-[leisure=track][!area],
|
||||
line|z14-[highway=bridleway]
|
||||
{color: @bridleway;opacity: 0.6;}
|
||||
line|z15-[highway=footway],
|
||||
{color: @footway;opacity: 0.9;}
|
||||
line|z16-[highway=footway],
|
||||
{opacity: 0.95;}
|
||||
{color: @footway;opacity: 0.87;}
|
||||
line|z15-[highway=steps],
|
||||
{color: @residential;opacity: 1;}
|
||||
line|z15-[highway=path],
|
||||
{color: @footway;opacity: 0.9;}
|
||||
line|z14-[highway=path],
|
||||
{color: @path;opacity: 0.6;}
|
||||
line|z15-[highway=path][_path_grade=expert],
|
||||
line|z14-[highway=path][_path_grade=expert],
|
||||
{color: @path_expert; opacity: 0.6;}
|
||||
line|z15-[piste:type=hike],
|
||||
line|z14-[piste:type=hike],
|
||||
{color: @piste; opacity: 0.4;}
|
||||
line|z17-[highway=footway][tunnel?]::tunnelBackground,
|
||||
line|z17-[highway=cycleway][tunnel?]::tunnelBackground,
|
||||
@@ -916,6 +911,8 @@ line|z19-[highway=raceway],
|
||||
line|z19-[leisure=track][!area]
|
||||
{width:4; opacity: 0.8;}
|
||||
|
||||
line|z14[highway=track],
|
||||
{width: 1.1; dashes: 6,2.5;}
|
||||
line|z15[highway=track],
|
||||
{width: 1.4; dashes: 6,2.5;}
|
||||
line|z16[highway=track],
|
||||
@@ -927,6 +924,9 @@ line|z18[highway=track],
|
||||
line|z19-[highway=track],
|
||||
{width: 4.2; dashes: 12,3.5; opacity: 0.8;}
|
||||
|
||||
line|z14[highway=path],
|
||||
line|z14[piste:type=hike],
|
||||
{width: 0.9; dashes: 3.5,2;}
|
||||
line|z15[highway=path],
|
||||
line|z15[piste:type=hike],
|
||||
{width: 1.1; dashes: 3.5,2;}
|
||||
@@ -941,6 +941,8 @@ line|z18[highway=path],
|
||||
line|z19-[highway=path],
|
||||
{width: 3.7; dashes: 8,4.5; opacity: 0.8;}
|
||||
|
||||
line|z14[highway=path][bicycle=designated],
|
||||
{width: 0.9; dashes: 3.5,2.7;}
|
||||
line|z15[highway=path][bicycle=designated],
|
||||
{width: 1.1; dashes: 3.5,2.7;}
|
||||
line|z16[highway=path][bicycle=designated],
|
||||
@@ -952,6 +954,8 @@ line|z18[highway=path][bicycle=designated],
|
||||
line|z19-[highway=path][bicycle=designated],
|
||||
{width: 3.7; dashes: 8,6.2; opacity: 0.8;}
|
||||
|
||||
line|z14[highway=path][_path_grade=difficult],
|
||||
{width: 0.9; dashes: 1,2;}
|
||||
line|z15[highway=path][_path_grade=difficult],
|
||||
{width: 1.1; dashes: 1,2;}
|
||||
line|z16[highway=path][_path_grade=difficult],
|
||||
@@ -961,6 +965,8 @@ line|z17[highway=path][_path_grade=difficult],
|
||||
line|z18-[highway=path][_path_grade=difficult],
|
||||
{width: 2.8; dashes: 2.8,3.5;}
|
||||
|
||||
line|z14[highway=path][_path_grade=expert],
|
||||
{width: 0.9; dashes: 1,4;}
|
||||
line|z15[highway=path][_path_grade=expert],
|
||||
{width: 1.1; dashes: 1,4;}
|
||||
line|z16[highway=path][_path_grade=expert],
|
||||
|
||||
@@ -224,11 +224,11 @@ railway-subway-bridge::dash # line::dash z16- (also has
|
||||
=== 221
|
||||
|
||||
highway-footway-bicycle # line z15- (also has line::cycleline z15-, pathtext z15-)
|
||||
highway-path-bicycle # line z15- (also has line::cycleline z14-, pathtext z15-)
|
||||
highway-path-bicycle # line z14- (also has line::cycleline z14-, pathtext z15-)
|
||||
=== 220
|
||||
|
||||
highway-footway-bicycle::cycleline # line::cycleline z15- (also has line z15-, pathtext z15-)
|
||||
highway-path-bicycle::cycleline # line::cycleline z14- (also has line z15-, pathtext z15-)
|
||||
highway-path-bicycle::cycleline # line::cycleline z14- (also has line z14-, pathtext z15-)
|
||||
=== 219
|
||||
|
||||
highway-cycleway # line z13- (also has pathtext z15-)
|
||||
@@ -276,15 +276,15 @@ highway-bridleway-tunnel # line z14- (also has line::
|
||||
highway-footway # line z15- (also has pathtext z15-)
|
||||
highway-footway-area # line z15- and area z14- (also has pathtext z15-)
|
||||
highway-footway-crossing # line z16-
|
||||
highway-path # line z15- (also has pathtext z15-)
|
||||
highway-path-difficult # line z15- (also has pathtext z15-)
|
||||
highway-path-expert # line z15- (also has pathtext z15-)
|
||||
highway-path # line z14- (also has pathtext z15-)
|
||||
highway-path-difficult # line z14- (also has pathtext z15-)
|
||||
highway-path-expert # line z14- (also has pathtext z15-)
|
||||
highway-raceway # line z14- (also has pathtext z16-)
|
||||
highway-track # line z15- (also has pathtext z15-)
|
||||
highway-track-area # line z15- (also has pathtext z15-)
|
||||
highway-track-bridge # line z15- (also has line::bridgeblack z17-, line::bridgewhite z15-, pathtext z15-)
|
||||
highway-track-no-access # line z15- (also has pathtext z15-)
|
||||
highway-track-tunnel # line z15- (also has line::tunnelBackground z17-, line::tunnelCasing z17-, pathtext z15-)
|
||||
highway-track # line z14- (also has pathtext z15-)
|
||||
highway-track-area # line z14- (also has pathtext z15-)
|
||||
highway-track-bridge # line z14- (also has line::bridgeblack z17-, line::bridgewhite z15-, pathtext z15-)
|
||||
highway-track-no-access # line z14- (also has pathtext z15-)
|
||||
highway-track-tunnel # line z14- (also has line::tunnelBackground z17-, line::tunnelCasing z17-, pathtext z15-)
|
||||
=== 180
|
||||
|
||||
highway-construction # line z13- (also has pathtext z15-)
|
||||
@@ -302,25 +302,25 @@ railway-preserved-tunnel # line z15-
|
||||
highway-footway-bridge # line z15- (also has line::bridgeblack z17-, line::bridgewhite z15-, pathtext z15-)
|
||||
highway-footway-sidewalk # line z16-
|
||||
highway-footway-tunnel # line z15- (also has line::tunnelBackground z17-, line::tunnelCasing z17-, pathtext z15-)
|
||||
highway-path-bridge # line z15- (also has line::bridgeblack z17-, line::bridgewhite z15-, pathtext z15-)
|
||||
highway-path-horse # line z15- (also has pathtext z15-)
|
||||
highway-path-tunnel # line z15- (also has line::tunnelBackground z17-, line::tunnelCasing z17-, pathtext z15-)
|
||||
highway-path-bridge # line z14- (also has line::bridgeblack z17-, line::bridgewhite z15-, pathtext z15-)
|
||||
highway-path-horse # line z14- (also has pathtext z15-)
|
||||
highway-path-tunnel # line z14- (also has line::tunnelBackground z17-, line::tunnelCasing z17-, pathtext z15-)
|
||||
=== 155
|
||||
|
||||
highway-bridleway-tunnel::tunnelBackground # line::tunnelBackground z17- (also has line z14-, line::tunnelCasing z17-, pathtext z15-)
|
||||
highway-cycleway-tunnel::tunnelBackground # line::tunnelBackground z17- (also has line z13-, line::tunnelCasing z17-, pathtext z15-)
|
||||
highway-footway-tunnel::tunnelBackground # line::tunnelBackground z17- (also has line z15-, line::tunnelCasing z17-, pathtext z15-)
|
||||
highway-path-tunnel::tunnelBackground # line::tunnelBackground z17- (also has line z15-, line::tunnelCasing z17-, pathtext z15-)
|
||||
highway-path-tunnel::tunnelBackground # line::tunnelBackground z17- (also has line z14-, line::tunnelCasing z17-, pathtext z15-)
|
||||
highway-steps-tunnel::tunnelBackground # line::tunnelBackground z17- (also has line z15-, line::tunnelCasing z17-, pathtext z16-)
|
||||
highway-track-tunnel::tunnelBackground # line::tunnelBackground z17- (also has line z15-, line::tunnelCasing z17-, pathtext z15-)
|
||||
highway-track-tunnel::tunnelBackground # line::tunnelBackground z17- (also has line z14-, line::tunnelCasing z17-, pathtext z15-)
|
||||
=== 154
|
||||
|
||||
highway-bridleway-tunnel::tunnelCasing # line::tunnelCasing z17- (also has line z14-, line::tunnelBackground z17-, pathtext z15-)
|
||||
highway-cycleway-tunnel::tunnelCasing # line::tunnelCasing z17- (also has line z13-, line::tunnelBackground z17-, pathtext z15-)
|
||||
highway-footway-tunnel::tunnelCasing # line::tunnelCasing z17- (also has line z15-, line::tunnelBackground z17-, pathtext z15-)
|
||||
highway-path-tunnel::tunnelCasing # line::tunnelCasing z17- (also has line z15-, line::tunnelBackground z17-, pathtext z15-)
|
||||
highway-path-tunnel::tunnelCasing # line::tunnelCasing z17- (also has line z14-, line::tunnelBackground z17-, pathtext z15-)
|
||||
highway-steps-tunnel::tunnelCasing # line::tunnelCasing z17- (also has line z15-, line::tunnelBackground z17-, pathtext z16-)
|
||||
highway-track-tunnel::tunnelCasing # line::tunnelCasing z17- (also has line z15-, line::tunnelBackground z17-, pathtext z15-)
|
||||
highway-track-tunnel::tunnelCasing # line::tunnelCasing z17- (also has line z14-, line::tunnelBackground z17-, pathtext z15-)
|
||||
=== 153
|
||||
|
||||
highway-bridleway-bridge::bridgewhite # line::bridgewhite z15- (also has line z14-, line::bridgeblack z17-, pathtext z15-)
|
||||
@@ -328,7 +328,7 @@ highway-cycleway-bridge::bridgewhite # line::bridgewhite z15- (al
|
||||
highway-footway-bridge::bridgewhite # line::bridgewhite z15- (also has line z15-, line::bridgeblack z17-, pathtext z15-)
|
||||
highway-motorway-bridge::bridgewhite # line::bridgewhite z13- (also has line z6-, line::bridgeblack z13-, pathtext z10-, shield::shield z10-)
|
||||
highway-motorway_link-bridge::bridgewhite # line::bridgewhite z14- (also has line z10-, line::bridgeblack z14-, pathtext z10-, shield::shield z10-)
|
||||
highway-path-bridge::bridgewhite # line::bridgewhite z15- (also has line z15-, line::bridgeblack z17-, pathtext z15-)
|
||||
highway-path-bridge::bridgewhite # line::bridgewhite z15- (also has line z14-, line::bridgeblack z17-, pathtext z15-)
|
||||
highway-pedestrian-bridge::bridgewhite # line::bridgewhite z13- (also has line z13-, line::bridgeblack z14-, pathtext z14-)
|
||||
highway-primary-bridge::bridgewhite # line::bridgewhite z14- (also has line z8-, line::bridgeblack z14-, pathtext z10-, shield::shield z10-)
|
||||
highway-primary_link-bridge::bridgewhite # line::bridgewhite z14- (also has line z11-, line::bridgeblack z14-, pathtext z11-, shield::shield z11-)
|
||||
@@ -340,7 +340,7 @@ highway-service-bridge::bridgewhite # line::bridgewhite z16- (al
|
||||
highway-steps-bridge::bridgewhite # line::bridgewhite z15- (also has line z15-, line::bridgeblack z17-, pathtext z16-)
|
||||
highway-tertiary-bridge::bridgewhite # line::bridgewhite z14- (also has line z11-, line::bridgeblack z14-, pathtext z12-, shield::shield z13-)
|
||||
highway-tertiary_link-bridge::bridgewhite # line::bridgewhite z14- (also has line z14-, line::bridgeblack z14-, pathtext z18-)
|
||||
highway-track-bridge::bridgewhite # line::bridgewhite z15- (also has line z15-, line::bridgeblack z17-, pathtext z15-)
|
||||
highway-track-bridge::bridgewhite # line::bridgewhite z15- (also has line z14-, line::bridgeblack z17-, pathtext z15-)
|
||||
highway-trunk-bridge::bridgewhite # line::bridgewhite z13- (also has line z6-, line::bridgeblack z13-, pathtext z10-, shield::shield z10-)
|
||||
highway-trunk_link-bridge::bridgewhite # line::bridgewhite z14- (also has line z10-, line::bridgeblack z14-, pathtext z10-, shield::shield z10-)
|
||||
highway-unclassified-bridge::bridgewhite # line::bridgewhite z14- (also has line z11-, line::bridgeblack z14-, pathtext z13-)
|
||||
@@ -363,7 +363,7 @@ highway-cycleway-bridge::bridgeblack # line::bridgeblack z17- (al
|
||||
highway-footway-bridge::bridgeblack # line::bridgeblack z17- (also has line z15-, line::bridgewhite z15-, pathtext z15-)
|
||||
highway-motorway-bridge::bridgeblack # line::bridgeblack z13- (also has line z6-, line::bridgewhite z13-, pathtext z10-, shield::shield z10-)
|
||||
highway-motorway_link-bridge::bridgeblack # line::bridgeblack z14- (also has line z10-, line::bridgewhite z14-, pathtext z10-, shield::shield z10-)
|
||||
highway-path-bridge::bridgeblack # line::bridgeblack z17- (also has line z15-, line::bridgewhite z15-, pathtext z15-)
|
||||
highway-path-bridge::bridgeblack # line::bridgeblack z17- (also has line z14-, line::bridgewhite z15-, pathtext z15-)
|
||||
highway-pedestrian-bridge::bridgeblack # line::bridgeblack z14- (also has line z13-, line::bridgewhite z13-, pathtext z14-)
|
||||
highway-primary-bridge::bridgeblack # line::bridgeblack z14- (also has line z8-, line::bridgewhite z14-, pathtext z10-, shield::shield z10-)
|
||||
highway-primary_link-bridge::bridgeblack # line::bridgeblack z14- (also has line z11-, line::bridgewhite z14-, pathtext z11-, shield::shield z11-)
|
||||
@@ -375,7 +375,7 @@ highway-service-bridge::bridgeblack # line::bridgeblack z16- (al
|
||||
highway-steps-bridge::bridgeblack # line::bridgeblack z17- (also has line z15-, line::bridgewhite z15-, pathtext z16-)
|
||||
highway-tertiary-bridge::bridgeblack # line::bridgeblack z14- (also has line z11-, line::bridgewhite z14-, pathtext z12-, shield::shield z13-)
|
||||
highway-tertiary_link-bridge::bridgeblack # line::bridgeblack z14- (also has line z14-, line::bridgewhite z14-, pathtext z18-)
|
||||
highway-track-bridge::bridgeblack # line::bridgeblack z17- (also has line z15-, line::bridgewhite z15-, pathtext z15-)
|
||||
highway-track-bridge::bridgeblack # line::bridgeblack z17- (also has line z14-, line::bridgewhite z15-, pathtext z15-)
|
||||
highway-trunk-bridge::bridgeblack # line::bridgeblack z13- (also has line z6-, line::bridgewhite z13-, pathtext z10-, shield::shield z10-)
|
||||
highway-trunk_link-bridge::bridgeblack # line::bridgeblack z14- (also has line z10-, line::bridgewhite z14-, pathtext z10-, shield::shield z10-)
|
||||
highway-unclassified-bridge::bridgeblack # line::bridgeblack z14- (also has line z11-, line::bridgewhite z14-, pathtext z13-)
|
||||
@@ -407,7 +407,7 @@ piste:type-downhill-expert # line z14- (also has pathte
|
||||
piste:type-downhill-freeride # line z14- (also has pathtext z15-)
|
||||
piste:type-downhill-intermediate # line z14- (also has pathtext z15-)
|
||||
piste:type-downhill-novice # line z14- (also has pathtext z15-)
|
||||
piste:type-hike # line z15- (also has pathtext z15-)
|
||||
piste:type-hike # line z14- (also has pathtext z15-)
|
||||
piste:type-nordic # line z14- (also has pathtext z15-)
|
||||
piste:type-skitour # line z14- (also has pathtext z15-)
|
||||
piste:type-sled # line z14- (also has pathtext z15-)
|
||||
|
||||
@@ -705,13 +705,13 @@ natural-rock # icon z17- (also has captio
|
||||
highway-bridleway # pathtext z15- (also has line z14-)
|
||||
highway-bridleway-bridge # pathtext z15- (also has line z14-, line::bridgeblack z17-, line::bridgewhite z15-)
|
||||
highway-bridleway-tunnel # pathtext z15- (also has line z14-, line::tunnelBackground z17-, line::tunnelCasing z17-)
|
||||
highway-path # pathtext z15- (also has line z15-)
|
||||
highway-path-bicycle # pathtext z15- (also has line z15-, line::cycleline z14-)
|
||||
highway-path-bridge # pathtext z15- (also has line z15-, line::bridgeblack z17-, line::bridgewhite z15-)
|
||||
highway-path-difficult # pathtext z15- (also has line z15-)
|
||||
highway-path-expert # pathtext z15- (also has line z15-)
|
||||
highway-path-horse # pathtext z15- (also has line z15-)
|
||||
highway-path-tunnel # pathtext z15- (also has line z15-, line::tunnelBackground z17-, line::tunnelCasing z17-)
|
||||
highway-path # pathtext z15- (also has line z14-)
|
||||
highway-path-bicycle # pathtext z15- (also has line z14-, line::cycleline z14-)
|
||||
highway-path-bridge # pathtext z15- (also has line z14-, line::bridgeblack z17-, line::bridgewhite z15-)
|
||||
highway-path-difficult # pathtext z15- (also has line z14-)
|
||||
highway-path-expert # pathtext z15- (also has line z14-)
|
||||
highway-path-horse # pathtext z15- (also has line z14-)
|
||||
highway-path-tunnel # pathtext z15- (also has line z14-, line::tunnelBackground z17-, line::tunnelCasing z17-)
|
||||
=== 2820
|
||||
|
||||
highway-steps # pathtext z16- (also has line z15-)
|
||||
@@ -719,11 +719,11 @@ highway-steps-bridge # pathtext z16- (also has li
|
||||
highway-steps-tunnel # pathtext z16- (also has line z15-, line::tunnelBackground z17-, line::tunnelCasing z17-)
|
||||
=== 2810
|
||||
|
||||
highway-track # pathtext z15- (also has line z15-)
|
||||
highway-track-area # pathtext z15- (also has line z15-)
|
||||
highway-track-bridge # pathtext z15- (also has line z15-, line::bridgeblack z17-, line::bridgewhite z15-)
|
||||
highway-track-no-access # pathtext z15- (also has line z15-)
|
||||
highway-track-tunnel # pathtext z15- (also has line z15-, line::tunnelBackground z17-, line::tunnelCasing z17-)
|
||||
highway-track # pathtext z15- (also has line z14-)
|
||||
highway-track-area # pathtext z15- (also has line z14-)
|
||||
highway-track-bridge # pathtext z15- (also has line z14-, line::bridgeblack z17-, line::bridgewhite z15-)
|
||||
highway-track-no-access # pathtext z15- (also has line z14-)
|
||||
highway-track-tunnel # pathtext z15- (also has line z14-, line::tunnelBackground z17-, line::tunnelCasing z17-)
|
||||
=== 2780
|
||||
|
||||
highway-service # pathtext z16- (also has line z15-)
|
||||
@@ -739,7 +739,7 @@ piste:type-downhill-expert # pathtext z15- (also has li
|
||||
piste:type-downhill-freeride # pathtext z15- (also has line z14-)
|
||||
piste:type-downhill-intermediate # pathtext z15- (also has line z14-)
|
||||
piste:type-downhill-novice # pathtext z15- (also has line z14-)
|
||||
piste:type-hike # pathtext z15- (also has line z15-)
|
||||
piste:type-hike # pathtext z15- (also has line z14-)
|
||||
piste:type-nordic # pathtext z15- (also has line z14-)
|
||||
piste:type-skitour # pathtext z15- (also has line z14-)
|
||||
piste:type-sled # pathtext z15- (also has line z14-)
|
||||
|
||||
@@ -65,8 +65,8 @@
|
||||
/* 4.LANDUSE */
|
||||
/*4.1 Main landuse*/
|
||||
|
||||
@pedestrian_area: #FAF0E2;
|
||||
@pedestrian_area_light: #FCF2E4;
|
||||
@pedestrian_area: #F7EDDF;
|
||||
@pedestrian_area_light: #FAF0E2;
|
||||
@railway_platform: #ECE3D6;
|
||||
@university: #F5DFBC;
|
||||
@hospital: #FFDAD6;
|
||||
|
||||
@@ -1,58 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
version="1.1"
|
||||
viewBox="0 0 24 24"
|
||||
width="18"
|
||||
height="18"
|
||||
id="svg1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<title
|
||||
id="title1">train-m</title>
|
||||
<g
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="g1"
|
||||
transform="matrix(-1,0,0,1,24,0)">
|
||||
<g
|
||||
id="train-m"
|
||||
fill-rule="nonzero">
|
||||
<rect
|
||||
id="Rectangle"
|
||||
width="24"
|
||||
height="24"
|
||||
rx="2.5"
|
||||
fill="#ffffff"
|
||||
opacity="0.6"
|
||||
x="0"
|
||||
y="0" />
|
||||
<rect
|
||||
id="rect1"
|
||||
x="1"
|
||||
y="1"
|
||||
width="22"
|
||||
height="22"
|
||||
rx="2"
|
||||
fill="#2f6499" />
|
||||
<path
|
||||
id="train-m-a"
|
||||
d="m 3.0333,14 0.66667,-1 h -1.7 l -2,3 H 0.6296 c 0.66871,0 1.2932,-0.3342 1.6641,-0.8906 L 2.366634,15 h 7.2667 l 0.072934,0.1094 c 0.37093,0.5564 0.99539,0.8906 1.6641,0.8906 h 0.62963 l -2,-3 h -1.7 l 0.66667,1 h -5.9333 z M 3.3868,0 h 5.2263 c 1.612,0 2.9358,1.2739 2.9978,2.8847 l 0.30917,8.0384 c 0.04245,1.1038 -0.8179,2.0329 -1.9217,2.0754 C 9.97276,12.999485 9.947133,13 9.921504,13 h -7.8432 c -1.1046,0 -2,-0.89543 -2,-2 0,-0.02563 4.9264e-4,-0.05126 0.0014777,-0.07687 l 0.30917,-8.0384003 c 0.061954,-1.6108 1.3858,-2.8847 2.9978,-2.8847 z M 2.92316,2.5 C 2.4018,2.5 1.96792,2.90055 1.92634,3.42025 l -0.24,3 C 1.68422,6.446779 1.68316,6.473382 1.68316,6.499995 c 0,0.55228 0.44772,1 1,1 h 6.6336 c 0.026614,0 0.053216,-0.00106 0.079745,-0.00318 0.55053,-0.044042 0.96111,-0.52603 0.91707,-1.0766 l -0.24,-3 c -0.04158,-0.5197 -0.47545,-0.92025 -0.99682,-0.92025 h -6.1536 z M 2.999965,11 c 0.55228,0 1,-0.44772 1,-1 0,-0.55228 -0.44772,-1 -1,-1 -0.55228,0 -1,0.44772 -1,1 0,0.55228 0.44772,1 1,1 z m 6,0 c 0.55228,0 1,-0.44772 1,-1 0,-0.55228 -0.44772,-1 -1,-1 -0.55228,0 -1,0.44772 -1,1 0,0.55228 0.44772,1 1,1 z m -4.75,-10 c -0.13807,0 -0.25,0.11193 -0.25,0.25 0,0.13807 0.11193,0.25 0.25,0.25 h 3.5 c 0.13807,0 0.25,-0.11193 0.25,-0.25 0,-0.13807 -0.11193,-0.25 -0.25,-0.25 z"
|
||||
transform="matrix(-1,0,0,1,17.999984,4)"
|
||||
style="fill:#ffffff;fill-opacity:1" />
|
||||
</g>
|
||||
<svg version="1.1" viewBox="0 0 24 24" width="18" height="18" xmlns="http://www.w3.org/2000/svg">
|
||||
<title>train-m</title>
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<g id="train-m" fill-rule="nonzero">
|
||||
<rect id="Rectangle" width="24" height="24" rx="2.5" fill="#fff" opacity=".6"/>
|
||||
<rect id="Rectangle" x="1" y="1" width="22" height="22" rx="2" fill="#2F6499"/>
|
||||
<path id="Shape" d="m11.895 5c-2.9474 0-5.8947 0.36842-5.8947 2.9474v7c0 1.4221 1.1568 2.5789 2.5789 2.5789l-1.1053 1.1053v0.36842h1.6432l1.4737-1.4737h2.7779l1.4737 1.4737h1.4737v-0.36842l-1.1053-1.1053c1.4221 0 2.5789-1.1568 2.5789-2.5789v-7c0-2.5789-2.6379-2.9474-5.8947-2.9474zm-3.3158 11.053c-0.61158 0-1.1053-0.49368-1.1053-1.1053 0-0.61158 0.49368-1.1053 1.1053-1.1053s1.1053 0.49368 1.1053 1.1053c0 0.61158-0.49368 1.1053-1.1053 1.1053zm2.5789-5.1579h-3.6842v-2.9474h3.6842v2.9474zm1.4737 0v-2.9474h3.6842v2.9474h-3.6842zm2.5789 5.1579c-0.61158 0-1.1053-0.49368-1.1053-1.1053 0-0.61158 0.49368-1.1053 1.1053-1.1053 0.61158 0 1.1053 0.49368 1.1053 1.1053 0 0.61158-0.49368 1.1053-1.1053 1.1053z" fill="#fff"/>
|
||||
</g>
|
||||
<metadata
|
||||
id="metadata1">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:title>train-m</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.1 KiB |
@@ -1,55 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
version="1.1"
|
||||
viewBox="0 0 16 16"
|
||||
width="12"
|
||||
height="12"
|
||||
id="svg1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<title
|
||||
id="title1">train-s</title>
|
||||
<g
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="g1">
|
||||
<g
|
||||
id="train-s"
|
||||
fill-rule="nonzero">
|
||||
<rect
|
||||
id="Rectangle"
|
||||
width="16"
|
||||
height="16"
|
||||
rx="2.5"
|
||||
fill="#fff"
|
||||
opacity=".6" />
|
||||
<rect
|
||||
id="rect1"
|
||||
x=".66667"
|
||||
y=".66667"
|
||||
width="14.667"
|
||||
height="14.667"
|
||||
rx="2"
|
||||
fill="#2F6499" />
|
||||
<path
|
||||
id="train-m-a-8"
|
||||
d="m 3.0333,14 0.66667,-1 h -1.7 l -2,3 H 0.6296 c 0.66871,0 1.2932,-0.3342 1.6641,-0.8906 L 2.366634,15 h 7.2667 l 0.072934,0.1094 c 0.37093,0.5564 0.99539,0.8906 1.6641,0.8906 h 0.62963 l -2,-3 h -1.7 l 0.66667,1 h -5.9333 z M 3.3868,0 h 5.2263 c 1.612,0 2.9358,1.2739 2.9978,2.8847 l 0.30917,8.0384 c 0.04245,1.1038 -0.8179,2.0329 -1.9217,2.0754 C 9.97276,12.999485 9.947133,13 9.921504,13 h -7.8432 c -1.1046,0 -2,-0.89543 -2,-2 0,-0.02563 4.9264e-4,-0.05126 0.0014777,-0.07687 l 0.30917,-8.0384003 c 0.061954,-1.6108 1.3858,-2.8847 2.9978,-2.8847 z M 2.92316,2.5 C 2.4018,2.5 1.96792,2.90055 1.92634,3.42025 l -0.24,3 C 1.68422,6.446779 1.68316,6.473382 1.68316,6.499995 c 0,0.55228 0.44772,1 1,1 h 6.6336 c 0.026614,0 0.053216,-0.00106 0.079745,-0.00318 0.55053,-0.044042 0.96111,-0.52603 0.91707,-1.0766 l -0.24,-3 c -0.04158,-0.5197 -0.47545,-0.92025 -0.99682,-0.92025 h -6.1536 z M 2.999965,11 c 0.55228,0 1,-0.44772 1,-1 0,-0.55228 -0.44772,-1 -1,-1 -0.55228,0 -1,0.44772 -1,1 0,0.55228 0.44772,1 1,1 z m 6,0 c 0.55228,0 1,-0.44772 1,-1 0,-0.55228 -0.44772,-1 -1,-1 -0.55228,0 -1,0.44772 -1,1 0,0.55228 0.44772,1 1,1 z m -4.75,-10 c -0.13807,0 -0.25,0.11193 -0.25,0.25 0,0.13807 0.11193,0.25 0.25,0.25 h 3.5 c 0.13807,0 0.25,-0.11193 0.25,-0.25 0,-0.13807 -0.11193,-0.25 -0.25,-0.25 z"
|
||||
transform="matrix(0.66666667,0,0,0.66666667,4.0001807,2.6668367)"
|
||||
style="fill:#ffffff;fill-opacity:1" />
|
||||
</g>
|
||||
<svg version="1.1" viewBox="0 0 16 16" width="12" height="12" xmlns="http://www.w3.org/2000/svg">
|
||||
<title>train-s</title>
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<g id="train-s" fill-rule="nonzero">
|
||||
<rect id="Rectangle" width="16" height="16" rx="2.5" fill="#fff" opacity=".6"/>
|
||||
<rect id="Rectangle" x=".66667" y=".66667" width="14.667" height="14.667" rx="2" fill="#2F6499"/>
|
||||
<path id="Shape" d="m7.9298 3.3333c-1.9649 0-3.9298 0.24561-3.9298 1.9649v4.6667c0 0.94807 0.77123 1.7193 1.7193 1.7193l-0.73684 0.73684v0.24561h1.0954l0.98246-0.98246h1.8519l0.98246 0.98246h0.98246v-0.24561l-0.73684-0.73684c0.94807 0 1.7193-0.77123 1.7193-1.7193v-4.6667c0-1.7193-1.7586-1.9649-3.9298-1.9649zm-2.2105 7.3684c-0.40772 0-0.73684-0.32912-0.73684-0.73684 0-0.40772 0.32912-0.73684 0.73684-0.73684 0.40772 0 0.73684 0.32912 0.73684 0.73684 0 0.40772-0.32912 0.73684-0.73684 0.73684zm1.7193-3.4386h-2.4561v-1.9649h2.4561v1.9649zm0.98246 0v-1.9649h2.4561v1.9649h-2.4561zm1.7193 3.4386c-0.40772 0-0.73684-0.32912-0.73684-0.73684 0-0.40772 0.32912-0.73684 0.73684-0.73684 0.40772 0 0.73684 0.32912 0.73684 0.73684 0 0.40772-0.32912 0.73684-0.73684 0.73684z" fill="#fff"/>
|
||||
</g>
|
||||
<metadata
|
||||
id="metadata1">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:title>train-s</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.2 KiB |
@@ -270,7 +270,6 @@ public:
|
||||
string const opening_hours(meta.Get(feature::Metadata::FMD_OPEN_HOURS));
|
||||
string const wikipedia(meta.Get(feature::Metadata::FMD_WIKIPEDIA));
|
||||
string const wikimedia_commons(meta.Get(feature::Metadata::FMD_WIKIMEDIA_COMMONS));
|
||||
string const panoramax(meta.Get(feature::Metadata::FMD_PANORAMAX));
|
||||
string const floor(meta.Get(feature::Metadata::FMD_LEVEL));
|
||||
string const fee = category.ends_with("-fee") ? "yes" : "";
|
||||
string const atm = HasAtm(f) ? "yes" : "";
|
||||
@@ -279,7 +278,7 @@ public:
|
||||
osmId, uid, lat, lon, mwmName, category, name, std::string(city),
|
||||
addrStreet, addrHouse, phone, website, stars, std::string(metaOperator), internet,
|
||||
denomination, wheelchair, opening_hours, wikipedia, floor, fee, atm, contact_facebook,
|
||||
contact_instagram, contact_twitter, contact_vk, contact_line, contact_fediverse, contact_bluesky, wikimedia_commons, panoramax};
|
||||
contact_instagram, contact_twitter, contact_vk, contact_line, contact_fediverse, contact_bluesky, wikimedia_commons};
|
||||
|
||||
AppendNames(f, columns);
|
||||
PrintAsCSV(columns, ';', cout);
|
||||
@@ -293,7 +292,7 @@ void PrintHeader()
|
||||
"phone", "website", "cuisines", "stars", "operator",
|
||||
"internet", "denomination", "wheelchair", "opening_hours", "wikipedia",
|
||||
"floor", "fee", "atm", "contact_facebook", "contact_instagram",
|
||||
"contact_twitter", "contact_vk", "contact_line", "contact_fediverse", "contact_bluesky", "wikimedia_commons", "panoramax"};
|
||||
"contact_twitter", "contact_vk", "contact_line", "contact_fediverse", "contact_bluesky", "wikimedia_commons"};
|
||||
// Append all supported name languages in order.
|
||||
for (uint8_t idx = 1; idx < kLangCount; idx++)
|
||||
columns.push_back("name_" + string(StringUtf8Multilang::GetLangByCode(idx)));
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
#include <cmath>
|
||||
#include <cstdlib>
|
||||
#include <optional>
|
||||
#include <regex>
|
||||
#include <unordered_map>
|
||||
#include <unordered_set>
|
||||
|
||||
@@ -310,22 +309,6 @@ std::string MetadataTagProcessorImpl::ValidateAndFormat_wikimedia_commons(std::s
|
||||
return {};
|
||||
}
|
||||
|
||||
std::string MetadataTagProcessorImpl::ValidateAndFormat_panoramax(std::string v)
|
||||
{
|
||||
static auto const s_panoramaxRegex = std::regex(R"(^([a-z0-9]{8}(-[a-z0-9]{4}){3}-[a-z0-9]{12})$)");
|
||||
|
||||
if (std::regex_match(v, s_panoramaxRegex))
|
||||
return v;
|
||||
url::Url const parsedUrl = url::Url::FromString(v);
|
||||
if (const std::string* paramValue = parsedUrl.GetParamValue("pic"))
|
||||
{
|
||||
if (std::regex_match(*paramValue, s_panoramaxRegex))
|
||||
return v;
|
||||
}
|
||||
LOG(LDEBUG, ("Invalid Panoramax tag value:", v));
|
||||
return {};
|
||||
}
|
||||
|
||||
std::string MetadataTagProcessorImpl::ValidateAndFormat_airport_iata(std::string const & v) const
|
||||
{
|
||||
if (!ftypes::IsAirportChecker::Instance()(m_params.m_types))
|
||||
@@ -565,7 +548,6 @@ void MetadataTagProcessor::operator()(std::string const & k, std::string const &
|
||||
case Metadata::FMD_POSTCODE: valid = ValidateAndFormat_postcode(v); break;
|
||||
case Metadata::FMD_WIKIPEDIA: valid = ValidateAndFormat_wikipedia(v); break;
|
||||
case Metadata::FMD_WIKIMEDIA_COMMONS: valid = ValidateAndFormat_wikimedia_commons(v); break;
|
||||
case Metadata::FMD_PANORAMAX: valid = ValidateAndFormat_panoramax(v); break;
|
||||
case Metadata::FMD_FLATS: valid = ValidateAndFormat_flats(v); break;
|
||||
case Metadata::FMD_MIN_HEIGHT: // The same validator as for height.
|
||||
case Metadata::FMD_HEIGHT: valid = ValidateAndFormat_height(v); break;
|
||||
|
||||
@@ -33,7 +33,6 @@ struct MetadataTagProcessorImpl
|
||||
static std::string ValidateAndFormat_denomination(std::string const & v) ;
|
||||
static std::string ValidateAndFormat_wikipedia(std::string v) ;
|
||||
static std::string ValidateAndFormat_wikimedia_commons(std::string v) ;
|
||||
static std::string ValidateAndFormat_panoramax(std::string v) ;
|
||||
std::string ValidateAndFormat_airport_iata(std::string const & v) const;
|
||||
static std::string ValidateAndFormat_brand(std::string const & v);
|
||||
std::string ValidateAndFormat_duration(std::string const & v) const;
|
||||
|
||||
@@ -124,8 +124,6 @@ bool Metadata::TypeFromString(string_view k, Metadata::EType & outType)
|
||||
outType = Metadata::FMD_WIKIPEDIA;
|
||||
else if (k == "wikimedia_commons")
|
||||
outType = Metadata::FMD_WIKIMEDIA_COMMONS;
|
||||
else if (k == "panoramax")
|
||||
outType = Metadata::FMD_PANORAMAX;
|
||||
else if (k == "addr:flats")
|
||||
outType = Metadata::FMD_FLATS;
|
||||
else if (k == "height")
|
||||
@@ -277,7 +275,6 @@ string ToString(Metadata::EType type)
|
||||
case Metadata::FMD_JUNCTION_REF: return "junction:ref";
|
||||
case Metadata::FMD_BUILDING_MIN_LEVEL: return "building:min_level";
|
||||
case Metadata::FMD_WIKIMEDIA_COMMONS: return "wikimedia_commons";
|
||||
case Metadata::FMD_PANORAMAX: return "panoramax";
|
||||
case Metadata::FMD_CAPACITY: return "capacity";
|
||||
case Metadata::FMD_WHEELCHAIR: return "wheelchair";
|
||||
case Metadata::FMD_LOCAL_REF: return "local_ref";
|
||||
|
||||
@@ -157,7 +157,6 @@ public:
|
||||
FMD_NETWORK = 49,
|
||||
FMD_CONTACT_FEDIVERSE = 50,
|
||||
FMD_CONTACT_BLUESKY = 51,
|
||||
FMD_PANORAMAX = 52,
|
||||
FMD_COUNT
|
||||
};
|
||||
|
||||
|
||||
@@ -54,7 +54,6 @@ constexpr string_view kUrlTwitter{"https://twitter.com/"};
|
||||
constexpr string_view kUrlVk{"https://vk.com/"};
|
||||
constexpr string_view kUrlLine{"https://line.me/R/ti/p/@"};
|
||||
constexpr string_view kUrlBluesky{"https://bsky.app/profile/"};
|
||||
constexpr string_view kUrlPanoramax{"https://api.panoramax.xyz/?pic="};
|
||||
constexpr string_view kHttp{"http://"};
|
||||
constexpr string_view kHttps{"https://"};
|
||||
|
||||
@@ -674,8 +673,6 @@ string socialContactToURL(MapObject::MetadataID metaID, string_view value)
|
||||
return string{kUrlLine}.append(value);
|
||||
else // 'value' is an URL.
|
||||
return string{kHttps}.append(value);
|
||||
case MapObject::MetadataID::FMD_PANORAMAX:
|
||||
return string{kUrlPanoramax}.append(value);
|
||||
default:
|
||||
return string{value};
|
||||
}
|
||||
|
||||
@@ -20,7 +20,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@property(nonatomic, readonly, nullable) NSString *vk;
|
||||
@property(nonatomic, readonly, nullable) NSString *line;
|
||||
@property(nonatomic, readonly, nullable) NSString *bluesky;
|
||||
@property(nonatomic, readonly, nullable) NSString *panoramax;
|
||||
@property(nonatomic, readonly, nullable) NSString *email;
|
||||
@property(nonatomic, readonly, nullable) NSURL *emailUrl;
|
||||
@property(nonatomic, readonly, nullable) NSString *cuisine;
|
||||
|
||||
@@ -75,7 +75,6 @@ NSString * GetLocalizedMetadataValueString(MapObject::MetadataID metaID, std::st
|
||||
case MetadataID::FMD_CONTACT_VK: _vk = ToNSString(value); break;
|
||||
case MetadataID::FMD_CONTACT_LINE: _line = ToNSString(value); break;
|
||||
case MetadataID::FMD_CONTACT_BLUESKY: _bluesky = ToNSString(value); break;
|
||||
case MetadataID::FMD_PANORAMAX: _panoramax = ToNSString(value); break;
|
||||
case MetadataID::FMD_OPERATOR: _ppOperator = [NSString stringWithFormat:NSLocalizedString(@"operator", nil), ToNSString(value)]; break;
|
||||
case MetadataID::FMD_INTERNET:
|
||||
_wifiAvailable = (rawData.GetInternet() == feature::Internet::No)
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#import "MWMSideButtonsView.h"
|
||||
#import "MWMButton.h"
|
||||
#import "MWMRouter.h"
|
||||
#import "MWMMapViewControlsCommon.h"
|
||||
|
||||
#include "base/math.hpp"
|
||||
@@ -33,10 +32,6 @@ CGFloat const kButtonsBottomOffset = 6;
|
||||
CGFloat spacing = self.availableHeight - self.zoomOut.maxY - self.location.height;
|
||||
spacing = base::Clamp(spacing, kLocationButtonSpacingMin, kLocationButtonSpacingMax);
|
||||
|
||||
if (!IPAD && (UIDevice.currentDevice.orientation == UIDeviceOrientationLandscapeLeft || UIDevice.currentDevice.orientation == UIDeviceOrientationLandscapeRight) && [MWMRouter isRoutingActive]) {
|
||||
spacing = spacing - 36;
|
||||
}
|
||||
|
||||
self.location.minY = self.zoomOut.maxY + spacing;
|
||||
self.bounds = {{}, {self.zoomOut.width, self.location.maxY}};
|
||||
if (self.zoomHidden)
|
||||
@@ -67,9 +62,6 @@ CGFloat const kButtonsBottomOffset = 6;
|
||||
[UIView animateWithDuration:kDefaultAnimationDuration
|
||||
animations:^{
|
||||
self.midY = centerShift + self.superview.height / 2;
|
||||
if ([MWMRouter isRoutingActive]) {
|
||||
self.midY = self.midY - 18;
|
||||
}
|
||||
if (self.maxY > self.bottomBound)
|
||||
self.maxY = self.bottomBound;
|
||||
}];
|
||||
|
||||
@@ -200,8 +200,6 @@ NSString *const kNavigationControlViewXibName = @"NavigationControlView";
|
||||
}
|
||||
|
||||
- (void)onRouteStart {
|
||||
[MWMSearch clear];
|
||||
[self.searchManager close];
|
||||
self.state = MWMNavigationDashboardStateNavigation;
|
||||
}
|
||||
- (void)onRouteStop {
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "ic_panoramax.svg",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true,
|
||||
"template-rendering-intent" : "template"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 6.6 KiB |
@@ -276,12 +276,6 @@
|
||||
/* Text in the editor */
|
||||
"bluesky" = "Bluesky";
|
||||
|
||||
/* Text in menu */
|
||||
"panoramax" = "Panoramax";
|
||||
|
||||
/* Text in menu */
|
||||
"panoramax_picture" = "Panoramax Picture";
|
||||
|
||||
/* Text in menu */
|
||||
"rate_the_app" = "Gradeer die toep";
|
||||
|
||||
|
||||
@@ -276,12 +276,6 @@
|
||||
/* Text in the editor */
|
||||
"bluesky" = "Bluesky";
|
||||
|
||||
/* Text in menu */
|
||||
"panoramax" = "Panoramax";
|
||||
|
||||
/* Text in menu */
|
||||
"panoramax_picture" = "Panoramax Picture";
|
||||
|
||||
/* Text in menu */
|
||||
"rate_the_app" = "قيّم التطبيق";
|
||||
|
||||
@@ -482,7 +476,7 @@
|
||||
"read_in_wikipedia" = "ويكيبيديا";
|
||||
|
||||
/* Place Page link to Wikimedia Commons. */
|
||||
"wikimedia_commons" = "ويكيميديا كومنز";
|
||||
"wikimedia_commons" = "Wikimedia Commons";
|
||||
"p2p_your_location" = "موقعك";
|
||||
"p2p_start" = "ابدأ";
|
||||
"p2p_from_here" = "الطريق من هنا";
|
||||
|
||||
@@ -107,4 +107,3 @@
|
||||
"telegram_url" = "https://t.me/CoMapsApp/";
|
||||
"osm_wiki_about_url" = "https://wiki.openstreetmap.org/wiki/About_OpenStreetMap";
|
||||
"translated_om_site_url" = "https://www.comaps.app/";
|
||||
"wikimedia_commons" = "Wikimedia Commons";
|
||||
|
||||