Compare commits
1 Commits
generate-2
...
hb0nd-url-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
34e9b17c33 |
5
.gitignore
vendored
@@ -9,7 +9,6 @@ Makefile.Release
|
|||||||
object_script.*.Debug
|
object_script.*.Debug
|
||||||
object_script.*.Release
|
object_script.*.Release
|
||||||
compile_commands.json
|
compile_commands.json
|
||||||
*.local.*
|
|
||||||
|
|
||||||
stxxl.errlog
|
stxxl.errlog
|
||||||
stxxl.log
|
stxxl.log
|
||||||
@@ -28,6 +27,10 @@ data/edits.xml
|
|||||||
data/World.mwm
|
data/World.mwm
|
||||||
data/WorldCoasts.mwm
|
data/WorldCoasts.mwm
|
||||||
|
|
||||||
|
# generated when running tests. NOT the lowercase 'testing' which should be kept.
|
||||||
|
Testing
|
||||||
|
!testing
|
||||||
|
|
||||||
# Compiled Python
|
# Compiled Python
|
||||||
*.pyc
|
*.pyc
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,12 @@ buildscript {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
google()
|
||||||
|
mavenCentral()
|
||||||
|
maven { url 'https://www.jitpack.io' } // MPAndroidChart
|
||||||
|
}
|
||||||
|
|
||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.application'
|
||||||
apply plugin: 'com.github.triplet.play'
|
apply plugin: 'com.github.triplet.play'
|
||||||
apply plugin: 'ru.cian.huawei-publish-gradle-plugin'
|
apply plugin: 'ru.cian.huawei-publish-gradle-plugin'
|
||||||
@@ -406,8 +412,6 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation project(':sdk')
|
|
||||||
|
|
||||||
coreLibraryDesugaring libs.android.tools.desugar
|
coreLibraryDesugaring libs.android.tools.desugar
|
||||||
|
|
||||||
// Google Play Location Services
|
// Google Play Location Services
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
En fællesskabsdrevet gratis og open source-kortapp baseret på OpenStreetMap-data og forstærket med en forpligtelse til gennemsigtighed, privatliv og non-profit.
|
|
||||||
|
|
||||||
Bliv en del af fællesskabet og vær med til at skabe den bedste kortapp
|
|
||||||
• Brug appen og fortæl andre om den
|
|
||||||
• Giv feedback og rapporter problemer
|
|
||||||
• Opdater kortdata i appen eller på OpenStreetMap-webstedet
|
|
||||||
|
|
||||||
<i>Din feedback og 5-stjernede anmeldelser er den bedste støtte for os!</i>
|
|
||||||
|
|
||||||
‣ <b>Enkel og poleret</b>: væsentlige, brugervenlige funktioner, der bare virker.
|
|
||||||
‣ <b>Offline-focused</b>: Planlæg og naviger på din rejse i udlandet uden behov for mobilfordbindelse, søg efter rutepunkter, mens du er på en lang vandretur osv. Alle app-funktioner er designet til at fungere offline..
|
|
||||||
‣ <b>Respekt for privatlivets fred</b>: Appen er designet med fokus på privatlivets fred – den identificerer ikke personer, sporer ikke og indsamler ikke personlige oplysninger. Annoncefri.
|
|
||||||
‣ <b>Sparer på batteriet og plads</b>: Dræner ikke dit batteri som andre navigationsapps. Kompakte kort sparer værdifuld plads på din telefon.
|
|
||||||
‣ <b>Gratis og udviklet af fællesskabet</b>: Folk som dig har været med til at udvikle appen ved at tilføje steder til OpenStreetMap, teste og give feedback på funktioner samt bidrage med deres udviklingskompetencer og penge.
|
|
||||||
‣ <b>Åben og gennemsigtig beslutningstagning og økonomi, non-profit og fuldstændig open source.</b>
|
|
||||||
|
|
||||||
<b>Vigtigste funktioner</b>:
|
|
||||||
• Detaljerede kort med steder, der ikke er tilgængelige på Google Maps, kan downloades.
|
|
||||||
• Udendørstilstand med fremhævede vandreruter, campingpladser, vandkilder, bjergtoppe, højdekurver osv.
|
|
||||||
• Gang- og cykelstier
|
|
||||||
• Interessepunkter som restauranter, tankstationer, hoteller, butikker, seværdigheder og meget mere
|
|
||||||
• Søg efter navn, adresse eller efter interessepunkt-kategori
|
|
||||||
• Navigation med stemmevejledning til gående, cyklende eller kørende
|
|
||||||
• Bogmærk dine yndlingssteder med ét enkelt tryk
|
|
||||||
• Offline Wikipedia-artikler
|
|
||||||
• Lag med metrolinjer og rutevejledning
|
|
||||||
• Sporoptagelse
|
|
||||||
• Eksportér og importér bogmærker og ruter i KML, KMZ, GPX-formater
|
|
||||||
• En mørk tilstand til brug om natten
|
|
||||||
• Forbedr kortdata for alle ved hjælp af en simpel, indbygget redigeringsfunktion
|
|
||||||
• Android Auto-understøttelse
|
|
||||||
|
|
||||||
Rapportér app-problemer, kom med forslag og bliv en del af vores fællesskab på <b><i>comaps.app</i></b> webstedet.
|
|
||||||
|
|
||||||
<b>Nu med frihed</b>
|
|
||||||
Udforsk din rejse, og navigér i verden med fokus på privatliv og fællesskab!
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
CoMaps - Naviger med privatliv
|
|
||||||
@@ -1 +1 @@
|
|||||||
Navigation cartographique facile - Découvrez davantage de votre voyage - Propulsé par la communauté
|
Navigation cartographique facile - Propulsé par la communauté
|
||||||
|
|||||||
@@ -141,6 +141,7 @@ 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_RECORD_TRACK_CODE;
|
||||||
import static app.organicmaps.leftbutton.LeftButtonsHolder.BUTTON_SETTINGS_CODE;
|
import static app.organicmaps.leftbutton.LeftButtonsHolder.BUTTON_SETTINGS_CODE;
|
||||||
import static app.organicmaps.sdk.util.PowerManagment.POWER_MANAGEMENT_TAG;
|
import static app.organicmaps.sdk.util.PowerManagment.POWER_MANAGEMENT_TAG;
|
||||||
|
import static app.organicmaps.sdk.util.concurrency.UiThread.runLater;
|
||||||
|
|
||||||
|
|
||||||
public class MwmActivity extends BaseMwmFragmentActivity
|
public class MwmActivity extends BaseMwmFragmentActivity
|
||||||
@@ -2596,8 +2597,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
|||||||
|
|
||||||
items.add(new MenuBottomSheetItem(R.string.download_maps, R.drawable.ic_download, getDownloadMapsCounter(), this::onDownloadMapsOptionSelected));
|
items.add(new MenuBottomSheetItem(R.string.download_maps, R.drawable.ic_download, getDownloadMapsCounter(), this::onDownloadMapsOptionSelected));
|
||||||
|
|
||||||
mDonatesUrl = Config.getDonateUrl(getApplicationContext());
|
if (!Config.getDonateUrl(getApplicationContext()).isEmpty())
|
||||||
if (!mDonatesUrl.isEmpty())
|
|
||||||
items.add(new MenuBottomSheetItem(R.string.donate, R.drawable.ic_donate, this::onDonateOptionSelected));
|
items.add(new MenuBottomSheetItem(R.string.donate, R.drawable.ic_donate, this::onDonateOptionSelected));
|
||||||
|
|
||||||
if (!BUTTON_SETTINGS_CODE.equals(activeLeftButton))
|
if (!BUTTON_SETTINGS_CODE.equals(activeLeftButton))
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import static app.organicmaps.settings.BackupSettingsFragment.MAX_BACKUPS_DEFAUL
|
|||||||
import static app.organicmaps.settings.BackupSettingsFragment.MAX_BACKUPS_KEY;
|
import static app.organicmaps.settings.BackupSettingsFragment.MAX_BACKUPS_KEY;
|
||||||
import static app.organicmaps.sdk.util.StorageUtils.isFolderWritable;
|
import static app.organicmaps.sdk.util.StorageUtils.isFolderWritable;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
@@ -16,6 +17,11 @@ import android.text.style.AbsoluteSizeSpan;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.documentfile.provider.DocumentFile;
|
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.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import static app.organicmaps.backup.BackupUtils.isBackupFolderAvailable;
|
|||||||
import static app.organicmaps.settings.BackupSettingsFragment.BACKUP_FOLDER_PATH_KEY;
|
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.BACKUP_INTERVAL_KEY;
|
||||||
import static app.organicmaps.settings.BackupSettingsFragment.LAST_BACKUP_TIME_KEY;
|
import static app.organicmaps.settings.BackupSettingsFragment.LAST_BACKUP_TIME_KEY;
|
||||||
|
import static app.organicmaps.sdk.util.StorageUtils.isFolderWritable;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
|||||||
@@ -150,7 +150,9 @@ public class BookmarksListFragment extends BaseMwmRecyclerFragment<ConcatAdapter
|
|||||||
|
|
||||||
BookmarkCollectionAdapter adapter = new BookmarkCollectionAdapter(getCategoryOrThrow(),
|
BookmarkCollectionAdapter adapter = new BookmarkCollectionAdapter(getCategoryOrThrow(),
|
||||||
mCategoryItems);
|
mCategoryItems);
|
||||||
adapter.setOnClickListener((v, item) -> BookmarkListActivity.startForResult(this, startBookmarkListForResult, item));
|
adapter.setOnClickListener((v, item) -> {
|
||||||
|
BookmarkListActivity.startForResult(this, startBookmarkListForResult, item);
|
||||||
|
});
|
||||||
|
|
||||||
return adapter;
|
return adapter;
|
||||||
}
|
}
|
||||||
@@ -853,18 +855,15 @@ public class BookmarksListFragment extends BaseMwmRecyclerFragment<ConcatAdapter
|
|||||||
@Nullable
|
@Nullable
|
||||||
public ArrayList<MenuBottomSheetItem> getMenuBottomSheetItems(String id)
|
public ArrayList<MenuBottomSheetItem> getMenuBottomSheetItems(String id)
|
||||||
{
|
{
|
||||||
switch (id) {
|
if (id.equals(BOOKMARKS_MENU_ID))
|
||||||
case BOOKMARKS_MENU_ID -> {
|
|
||||||
return getBookmarkMenuItems();
|
return getBookmarkMenuItems();
|
||||||
}
|
if (id.equals(TRACK_MENU_ID))
|
||||||
case TRACK_MENU_ID -> {
|
{
|
||||||
final Track track = (Track) getBookmarkListAdapter().getItem(mSelectedPosition);
|
final Track track = (Track) getBookmarkListAdapter().getItem(mSelectedPosition);
|
||||||
return getTrackMenuItems(track);
|
return getTrackMenuItems(track);
|
||||||
}
|
}
|
||||||
case OPTIONS_MENU_ID -> {
|
if (id.equals(OPTIONS_MENU_ID))
|
||||||
return getOptionsMenuItems();
|
return getOptionsMenuItems();
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package app.organicmaps.car;
|
|||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.os.Build;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
@@ -15,6 +16,8 @@ import androidx.car.app.validation.HostValidator;
|
|||||||
import androidx.core.app.NotificationChannelCompat;
|
import androidx.core.app.NotificationChannelCompat;
|
||||||
import androidx.core.app.NotificationCompat;
|
import androidx.core.app.NotificationCompat;
|
||||||
import androidx.core.app.NotificationManagerCompat;
|
import androidx.core.app.NotificationManagerCompat;
|
||||||
|
import androidx.lifecycle.DefaultLifecycleObserver;
|
||||||
|
import androidx.lifecycle.LifecycleOwner;
|
||||||
|
|
||||||
import app.organicmaps.BuildConfig;
|
import app.organicmaps.BuildConfig;
|
||||||
import app.organicmaps.R;
|
import app.organicmaps.R;
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ import app.organicmaps.sdk.search.SearchListener;
|
|||||||
import app.organicmaps.sdk.search.SearchEngine;
|
import app.organicmaps.sdk.search.SearchEngine;
|
||||||
import app.organicmaps.sdk.search.SearchRecents;
|
import app.organicmaps.sdk.search.SearchRecents;
|
||||||
import app.organicmaps.sdk.search.SearchResult;
|
import app.organicmaps.sdk.search.SearchResult;
|
||||||
import app.organicmaps.sdk.util.Config;
|
|
||||||
import app.organicmaps.sdk.util.Language;
|
import app.organicmaps.sdk.util.Language;
|
||||||
|
|
||||||
public class SearchOnMapScreen extends BaseMapScreen implements SearchListener
|
public class SearchOnMapScreen extends BaseMapScreen implements SearchListener
|
||||||
@@ -115,7 +114,6 @@ public class SearchOnMapScreen extends BaseMapScreen implements SearchListener
|
|||||||
}
|
}
|
||||||
|
|
||||||
builder.setOnClickListener(() -> {
|
builder.setOnClickListener(() -> {
|
||||||
if (Config.isSearchHistoryEnabled())
|
|
||||||
SearchRecents.add(title, getCarContext());
|
SearchRecents.add(title, getCarContext());
|
||||||
SearchEngine.INSTANCE.cancel();
|
SearchEngine.INSTANCE.cancel();
|
||||||
SearchEngine.INSTANCE.showResult(resultIndex);
|
SearchEngine.INSTANCE.showResult(resultIndex);
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import app.organicmaps.sdk.search.SearchListener;
|
|||||||
import app.organicmaps.sdk.search.SearchEngine;
|
import app.organicmaps.sdk.search.SearchEngine;
|
||||||
import app.organicmaps.sdk.search.SearchRecents;
|
import app.organicmaps.sdk.search.SearchRecents;
|
||||||
import app.organicmaps.sdk.search.SearchResult;
|
import app.organicmaps.sdk.search.SearchResult;
|
||||||
import app.organicmaps.sdk.util.Config;
|
|
||||||
import app.organicmaps.sdk.util.Language;
|
import app.organicmaps.sdk.util.Language;
|
||||||
|
|
||||||
public class SearchScreen extends BaseMapScreen implements SearchTemplate.SearchCallback, SearchListener
|
public class SearchScreen extends BaseMapScreen implements SearchTemplate.SearchCallback, SearchListener
|
||||||
@@ -148,7 +147,6 @@ public class SearchScreen extends BaseMapScreen implements SearchTemplate.Search
|
|||||||
if (!TextUtils.isEmpty(region))
|
if (!TextUtils.isEmpty(region))
|
||||||
builder.addText(region);
|
builder.addText(region);
|
||||||
builder.setOnClickListener(() -> {
|
builder.setOnClickListener(() -> {
|
||||||
if (Config.isSearchHistoryEnabled())
|
|
||||||
SearchRecents.add(title, getCarContext());
|
SearchRecents.add(title, getCarContext());
|
||||||
SearchEngine.INSTANCE.cancel();
|
SearchEngine.INSTANCE.cancel();
|
||||||
SearchEngine.INSTANCE.showResult(resultIndex);
|
SearchEngine.INSTANCE.showResult(resultIndex);
|
||||||
|
|||||||
@@ -33,17 +33,35 @@ public final class RoutingHelpers
|
|||||||
public static LaneDirection createLaneDirection(@NonNull LaneWay laneWay, boolean isRecommended)
|
public static LaneDirection createLaneDirection(@NonNull LaneWay laneWay, boolean isRecommended)
|
||||||
{
|
{
|
||||||
int shape = LaneDirection.SHAPE_UNKNOWN;
|
int shape = LaneDirection.SHAPE_UNKNOWN;
|
||||||
shape = switch (laneWay) {
|
switch (laneWay)
|
||||||
case REVERSE -> LaneDirection.SHAPE_U_TURN_LEFT;
|
{
|
||||||
case SHARP_LEFT -> LaneDirection.SHAPE_SHARP_LEFT;
|
case REVERSE:
|
||||||
case LEFT -> LaneDirection.SHAPE_NORMAL_LEFT;
|
shape = LaneDirection.SHAPE_U_TURN_LEFT;
|
||||||
case SLIGHT_LEFT, MERGE_TO_LEFT -> LaneDirection.SHAPE_SLIGHT_LEFT;
|
break;
|
||||||
case SLIGHT_RIGHT, MERGE_TO_RIGHT -> LaneDirection.SHAPE_SLIGHT_RIGHT;
|
case SHARP_LEFT:
|
||||||
case THROUGH -> LaneDirection.SHAPE_STRAIGHT;
|
shape = LaneDirection.SHAPE_SHARP_LEFT;
|
||||||
case RIGHT -> LaneDirection.SHAPE_NORMAL_RIGHT;
|
break;
|
||||||
case SHARP_RIGHT -> LaneDirection.SHAPE_SHARP_RIGHT;
|
case LEFT:
|
||||||
default -> shape;
|
shape = LaneDirection.SHAPE_NORMAL_LEFT;
|
||||||
};
|
break;
|
||||||
|
case SLIGHT_LEFT:
|
||||||
|
case MERGE_TO_LEFT:
|
||||||
|
shape = LaneDirection.SHAPE_SLIGHT_LEFT;
|
||||||
|
break;
|
||||||
|
case SLIGHT_RIGHT:
|
||||||
|
case MERGE_TO_RIGHT:
|
||||||
|
shape = LaneDirection.SHAPE_SLIGHT_RIGHT;
|
||||||
|
break;
|
||||||
|
case THROUGH:
|
||||||
|
shape = LaneDirection.SHAPE_STRAIGHT;
|
||||||
|
break;
|
||||||
|
case RIGHT:
|
||||||
|
shape = LaneDirection.SHAPE_NORMAL_RIGHT;
|
||||||
|
break;
|
||||||
|
case SHARP_RIGHT:
|
||||||
|
shape = LaneDirection.SHAPE_SHARP_RIGHT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return LaneDirection.create(shape, isRecommended);
|
return LaneDirection.create(shape, isRecommended);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -142,10 +142,9 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
|
|||||||
|
|
||||||
if (progress)
|
if (progress)
|
||||||
{
|
{
|
||||||
int roundedProgress = Math.round(mCurrentCountry.progress);
|
|
||||||
mProgress.setPending(false);
|
mProgress.setPending(false);
|
||||||
mProgress.setProgress(roundedProgress);
|
mProgress.setProgress(Math.round(mCurrentCountry.progress));
|
||||||
sizeText = mActivity.getString(R.string.downloader_downloading) + " " + StringUtils.formatPercent(roundedProgress / 100.0);
|
sizeText = mActivity.getString(R.string.downloader_downloading) + " " + StringUtils.formatPercent(mCurrentCountry.progress / 100);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -12,11 +12,12 @@ import android.widget.ScrollView;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.core.view.ViewCompat;
|
import androidx.core.view.ViewCompat;
|
||||||
|
import app.organicmaps.sdk.Framework;
|
||||||
import app.organicmaps.R;
|
import app.organicmaps.R;
|
||||||
import app.organicmaps.base.BaseMwmToolbarFragment;
|
import app.organicmaps.base.BaseMwmToolbarFragment;
|
||||||
import app.organicmaps.sdk.editor.OsmOAuth;
|
import app.organicmaps.sdk.editor.OsmOAuth;
|
||||||
import app.organicmaps.sdk.util.Constants;
|
import app.organicmaps.sdk.util.Constants;
|
||||||
|
import app.organicmaps.sdk.util.DateUtils;
|
||||||
import app.organicmaps.util.InputUtils;
|
import app.organicmaps.util.InputUtils;
|
||||||
import app.organicmaps.sdk.util.UiUtils;
|
import app.organicmaps.sdk.util.UiUtils;
|
||||||
import app.organicmaps.util.Utils;
|
import app.organicmaps.util.Utils;
|
||||||
@@ -55,6 +56,7 @@ public class OsmLoginFragment extends BaseMwmToolbarFragment
|
|||||||
MaterialButton registerButton = view.findViewById(R.id.register);
|
MaterialButton registerButton = view.findViewById(R.id.register);
|
||||||
registerButton.setOnClickListener((v) -> Utils.openUrl(requireActivity(), Constants.Url.OSM_REGISTER));
|
registerButton.setOnClickListener((v) -> Utils.openUrl(requireActivity(), Constants.Url.OSM_REGISTER));
|
||||||
mProgress = view.findViewById(R.id.osm_login_progress);
|
mProgress = view.findViewById(R.id.osm_login_progress);
|
||||||
|
final String dataVersion = DateUtils.getShortDateFormatter().format(Framework.getDataVersion());
|
||||||
|
|
||||||
// TODO(@pastk): remove unused flow with users entering credentials into app's form
|
// TODO(@pastk): remove unused flow with users entering credentials into app's form
|
||||||
// Hide login and password inputs and Forgot password button
|
// Hide login and password inputs and Forgot password button
|
||||||
@@ -163,7 +165,10 @@ public class OsmLoginFragment extends BaseMwmToolbarFragment
|
|||||||
// Finish OAuth2 auth flow and get username for UI.
|
// Finish OAuth2 auth flow and get username for UI.
|
||||||
final String oauthToken = OsmOAuth.nativeAuthWithOAuth2Code(oauth2code);
|
final String oauthToken = OsmOAuth.nativeAuthWithOAuth2Code(oauth2code);
|
||||||
final String username = (oauthToken == null) ? null : OsmOAuth.nativeGetOsmUsername(oauthToken);
|
final String username = (oauthToken == null) ? null : OsmOAuth.nativeGetOsmUsername(oauthToken);
|
||||||
UiThread.run(() -> processAuth(oauthToken, username));
|
UiThread.run(() ->
|
||||||
|
{
|
||||||
|
processAuth(oauthToken, username);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import androidx.preference.PreferenceManager;
|
|||||||
import app.organicmaps.R;
|
import app.organicmaps.R;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|||||||
@@ -399,11 +399,14 @@ public class MapButtonsController extends Fragment
|
|||||||
final View button = entry.getValue();
|
final View button = entry.getValue();
|
||||||
if (button.getParent() == parent)
|
if (button.getParent() == parent)
|
||||||
{
|
{
|
||||||
int toleranceOffset = switch (entry.getKey()) {
|
int toleranceOffset = 0;
|
||||||
case zoomIn, zoomOut, zoom -> -140;
|
|
||||||
default -> 0;
|
|
||||||
// Allow offset tolerance for zoom buttons
|
// Allow offset tolerance for zoom buttons
|
||||||
};
|
switch(entry.getKey())
|
||||||
|
{
|
||||||
|
case zoomIn: case zoomOut: case zoom:
|
||||||
|
toleranceOffset = -140;
|
||||||
|
break;
|
||||||
|
}
|
||||||
showButton(getViewTopOffset(translation, button) >= toleranceOffset, entry.getKey());
|
showButton(getViewTopOffset(translation, button) >= toleranceOffset, entry.getKey());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import androidx.activity.result.ActivityResultLauncher;
|
|||||||
import androidx.annotation.DrawableRes;
|
import androidx.annotation.DrawableRes;
|
||||||
import androidx.annotation.IdRes;
|
import androidx.annotation.IdRes;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.core.view.ViewCompat;
|
import androidx.core.view.ViewCompat;
|
||||||
import androidx.core.view.WindowInsetsCompat;
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
import app.organicmaps.sdk.Framework;
|
import app.organicmaps.sdk.Framework;
|
||||||
@@ -225,34 +226,37 @@ public class RoutingPlanController extends ToolbarController
|
|||||||
{
|
{
|
||||||
UiUtils.invisible(mProgressVehicle, mProgressPedestrian, mProgressTransit,
|
UiUtils.invisible(mProgressVehicle, mProgressPedestrian, mProgressTransit,
|
||||||
mProgressBicycle, mProgressRuler);
|
mProgressBicycle, mProgressRuler);
|
||||||
WheelProgressView progressView = switch (router) {
|
WheelProgressView progressView;
|
||||||
case Vehicle -> {
|
switch (router)
|
||||||
|
{
|
||||||
|
case Vehicle:
|
||||||
mRouterTypes.check(R.id.vehicle);
|
mRouterTypes.check(R.id.vehicle);
|
||||||
yield mProgressVehicle;
|
progressView = mProgressVehicle;
|
||||||
}
|
break;
|
||||||
case Pedestrian -> {
|
case Pedestrian:
|
||||||
mRouterTypes.check(R.id.pedestrian);
|
mRouterTypes.check(R.id.pedestrian);
|
||||||
yield mProgressPedestrian;
|
progressView = mProgressPedestrian;
|
||||||
}
|
break;
|
||||||
//case Taxi:
|
//case Taxi:
|
||||||
// {
|
// {
|
||||||
// mRouterTypes.check(R.id.taxi);
|
// mRouterTypes.check(R.id.taxi);
|
||||||
// progressView = mProgressTaxi;
|
// progressView = mProgressTaxi;
|
||||||
// }
|
// }
|
||||||
case Transit -> {
|
case Transit:
|
||||||
mRouterTypes.check(R.id.transit);
|
mRouterTypes.check(R.id.transit);
|
||||||
yield mProgressTransit;
|
progressView = mProgressTransit;
|
||||||
}
|
break;
|
||||||
case Bicycle -> {
|
case Bicycle:
|
||||||
mRouterTypes.check(R.id.bicycle);
|
mRouterTypes.check(R.id.bicycle);
|
||||||
yield mProgressBicycle;
|
progressView = mProgressBicycle;
|
||||||
}
|
break;
|
||||||
case Ruler -> {
|
case Ruler:
|
||||||
mRouterTypes.check(R.id.ruler);
|
mRouterTypes.check(R.id.ruler);
|
||||||
yield mProgressRuler;
|
progressView = mProgressRuler;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("unknown router: " + router);
|
||||||
}
|
}
|
||||||
default -> throw new IllegalArgumentException("unknown router: " + router);
|
|
||||||
};
|
|
||||||
|
|
||||||
RoutingToolbarButton button = mRouterTypes
|
RoutingToolbarButton button = mRouterTypes
|
||||||
.findViewById(mRouterTypes.getCheckedRadioButtonId());
|
.findViewById(mRouterTypes.getCheckedRadioButtonId());
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import androidx.annotation.NonNull;
|
|||||||
|
|
||||||
import app.organicmaps.downloader.Android7RootCertificateWorkaround;
|
import app.organicmaps.downloader.Android7RootCertificateWorkaround;
|
||||||
import app.organicmaps.sdk.util.log.Logger;
|
import app.organicmaps.sdk.util.log.Logger;
|
||||||
|
import app.organicmaps.sdk.util.Utils;
|
||||||
|
|
||||||
import java.io.BufferedInputStream;
|
import java.io.BufferedInputStream;
|
||||||
import java.io.BufferedOutputStream;
|
import java.io.BufferedOutputStream;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import android.app.Activity;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.os.Build;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package app.organicmaps.settings;
|
|||||||
|
|
||||||
import static app.organicmaps.backup.BackupUtils.formatReadableFolderPath;
|
import static app.organicmaps.backup.BackupUtils.formatReadableFolderPath;
|
||||||
import static app.organicmaps.backup.BackupUtils.getMaxBackups;
|
import static app.organicmaps.backup.BackupUtils.getMaxBackups;
|
||||||
|
import static app.organicmaps.backup.BackupUtils.isBackupFolderAvailable;
|
||||||
import static app.organicmaps.sdk.util.StorageUtils.isFolderWritable;
|
import static app.organicmaps.sdk.util.StorageUtils.isFolderWritable;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
@@ -354,11 +355,13 @@ public class BackupSettingsFragment
|
|||||||
|
|
||||||
private void showBackupErrorAlertDialog(String message)
|
private void showBackupErrorAlertDialog(String message)
|
||||||
{
|
{
|
||||||
requireActivity().runOnUiThread(() -> new MaterialAlertDialogBuilder(requireActivity())
|
requireActivity().runOnUiThread(() -> {
|
||||||
|
new MaterialAlertDialogBuilder(requireActivity())
|
||||||
.setTitle(R.string.pref_backup_now_summary_failed)
|
.setTitle(R.string.pref_backup_now_summary_failed)
|
||||||
.setMessage(message)
|
.setMessage(message)
|
||||||
.setPositiveButton(android.R.string.ok, (dialog, which) -> dialog.dismiss())
|
.setPositiveButton(android.R.string.ok, (dialog, which) -> dialog.dismiss())
|
||||||
.show());
|
.show();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void takePersistableUriPermission(Uri uri)
|
private void takePersistableUriPermission(Uri uri)
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import app.organicmaps.sdk.editor.OsmOAuth;
|
|||||||
import app.organicmaps.editor.LanguagesFragment;
|
import app.organicmaps.editor.LanguagesFragment;
|
||||||
import app.organicmaps.editor.ProfileActivity;
|
import app.organicmaps.editor.ProfileActivity;
|
||||||
import app.organicmaps.sdk.editor.data.Language;
|
import app.organicmaps.sdk.editor.data.Language;
|
||||||
|
import app.organicmaps.help.HelpActivity;
|
||||||
import app.organicmaps.sdk.location.LocationHelper;
|
import app.organicmaps.sdk.location.LocationHelper;
|
||||||
import app.organicmaps.sdk.location.LocationProviderFactory;
|
import app.organicmaps.sdk.location.LocationProviderFactory;
|
||||||
import app.organicmaps.sdk.routing.RoutingOptions;
|
import app.organicmaps.sdk.routing.RoutingOptions;
|
||||||
@@ -43,6 +44,8 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import com.google.android.material.textview.MaterialTextView;
|
|||||||
|
|
||||||
import app.organicmaps.R;
|
import app.organicmaps.R;
|
||||||
import app.organicmaps.sdk.location.TrackRecorder;
|
import app.organicmaps.sdk.location.TrackRecorder;
|
||||||
|
import app.organicmaps.sdk.util.Config;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
|||||||
BIN
android/app/src/main/res/drawable-hdpi/ic_downloader_done.webp
Normal file
|
After Width: | Height: | Size: 408 B |
|
After Width: | Height: | Size: 444 B |
|
After Width: | Height: | Size: 638 B |
|
After Width: | Height: | Size: 628 B |
BIN
android/app/src/main/res/drawable-hdpi/ic_downloader_folder.webp
Normal file
|
After Width: | Height: | Size: 506 B |
|
After Width: | Height: | Size: 350 B |
|
After Width: | Height: | Size: 386 B |
|
After Width: | Height: | Size: 488 B |
BIN
android/app/src/main/res/drawable-hdpi/ic_downloader_retry.webp
Normal file
|
After Width: | Height: | Size: 472 B |
BIN
android/app/src/main/res/drawable-mdpi/ic_downloader_done.webp
Normal file
|
After Width: | Height: | Size: 276 B |
|
After Width: | Height: | Size: 324 B |
|
After Width: | Height: | Size: 424 B |
|
After Width: | Height: | Size: 424 B |
BIN
android/app/src/main/res/drawable-mdpi/ic_downloader_folder.webp
Normal file
|
After Width: | Height: | Size: 356 B |
|
After Width: | Height: | Size: 242 B |
|
After Width: | Height: | Size: 264 B |
|
After Width: | Height: | Size: 344 B |
BIN
android/app/src/main/res/drawable-mdpi/ic_downloader_retry.webp
Normal file
|
After Width: | Height: | Size: 304 B |
BIN
android/app/src/main/res/drawable-xhdpi/ic_downloader_done.webp
Normal file
|
After Width: | Height: | Size: 566 B |
|
After Width: | Height: | Size: 606 B |
|
After Width: | Height: | Size: 850 B |
|
After Width: | Height: | Size: 842 B |
|
After Width: | Height: | Size: 678 B |
|
After Width: | Height: | Size: 484 B |
|
After Width: | Height: | Size: 530 B |
|
After Width: | Height: | Size: 662 B |
BIN
android/app/src/main/res/drawable-xhdpi/ic_downloader_retry.webp
Normal file
|
After Width: | Height: | Size: 630 B |
BIN
android/app/src/main/res/drawable-xxhdpi/ic_downloader_done.webp
Normal file
|
After Width: | Height: | Size: 820 B |
|
After Width: | Height: | Size: 872 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1014 B |
|
After Width: | Height: | Size: 770 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 994 B |
|
After Width: | Height: | Size: 860 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.4 KiB |