mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-24 06:53:46 +00:00
Compare commits
7 Commits
map-per-pe
...
test/2025.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3b365f76f6 | ||
|
|
b572e57e0e | ||
|
|
0dada71833 | ||
|
|
089ecd32da | ||
|
|
97bcf9fa18 | ||
|
|
7955ba3587 | ||
|
|
00a6917fb1 |
@@ -1 +0,0 @@
|
||||
../../../../google/java/app/organicmaps/location
|
||||
1
android/app/src/fdroid/java/app/organicmaps/sdk/location
Symbolic link
1
android/app/src/fdroid/java/app/organicmaps/sdk/location
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../../../google/java/app/organicmaps/sdk/location
|
||||
@@ -1,4 +1,4 @@
|
||||
Una app realizzata dalla community gratuita e open-source, basata su OpenStreetMap e sull'impegno alla trasparenza, al rispetto della Privacy e senza scopo di lucro. CoMaps è uno spin-off di Organic Maps, che a sua volta deriva da Maps.ME.
|
||||
Una app sviluppata dalla comunità, gratuita e open-source, basata su OpenStreetMap e sull'impegno alla trasparenza, al rispetto della Privacy senza scopo di lucro. CoMaps è uno spin-off di Organic Maps, che a sua volta deriva da Maps.ME.
|
||||
|
||||
Leggi delle ragioni del progetto e della sua direzione futura su <b><i>codeberg.org/comaps</i></b>.
|
||||
Unisciti alla nostra comunità e aiutaci a creare la migliore app di mappe.
|
||||
@@ -15,7 +15,7 @@ Unisciti alla nostra comunità e aiutaci a creare la migliore app di mappe.
|
||||
|
||||
<b>Funzionalità principali</b>:
|
||||
• Scarica mappe dettagliate di luoghi che non sono disponibili su Google Maps
|
||||
• Modalità Outdoor con percorsi escursionistici, campeggi, sorgenti d'acqua, picchi, dislivelli ed altri punti d'interesse evidenziati
|
||||
• Modalità Outdoor con percorsi escursionistici, campeggi, sorgenti d'acqua, picchi, dislivelli ed altro evidenziati
|
||||
• Strade pedonali e piste ciclabili
|
||||
• Punti d'interesse come ristoranti, stazioni di benzina, hotel, negozi, luoghi turistici e molto altro
|
||||
• Cerca per nome, indirizzo o categoria
|
||||
|
||||
@@ -1 +1 @@
|
||||
Navigazione semplice - Immergiti nella tua avventura - Realizzato dalla comunità
|
||||
Navigazione semplice - Immergiti nella tua avventura - Sviluppato dalla comunità
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package app.organicmaps.location;
|
||||
package app.organicmaps.sdk.location;
|
||||
|
||||
import static android.Manifest.permission.ACCESS_COARSE_LOCATION;
|
||||
import static android.Manifest.permission.ACCESS_FINE_LOCATION;
|
||||
@@ -10,7 +10,6 @@ import android.location.Location;
|
||||
import android.os.Looper;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.RequiresPermission;
|
||||
import app.organicmaps.sdk.location.BaseLocationProvider;
|
||||
import app.organicmaps.sdk.util.LocationUtils;
|
||||
import app.organicmaps.sdk.util.log.Logger;
|
||||
import com.google.android.gms.common.api.ApiException;
|
||||
@@ -1,25 +1,23 @@
|
||||
package app.organicmaps.location;
|
||||
package app.organicmaps.sdk.location;
|
||||
|
||||
import android.content.Context;
|
||||
import androidx.annotation.NonNull;
|
||||
import app.organicmaps.sdk.location.AndroidNativeProvider;
|
||||
import app.organicmaps.sdk.location.BaseLocationProvider;
|
||||
import app.organicmaps.sdk.location.LocationProviderFactory;
|
||||
import app.organicmaps.sdk.util.Config;
|
||||
import app.organicmaps.sdk.util.log.Logger;
|
||||
import com.google.android.gms.common.ConnectionResult;
|
||||
import com.google.android.gms.common.GoogleApiAvailability;
|
||||
|
||||
public class LocationProviderFactoryImpl implements LocationProviderFactory
|
||||
public class LocationProviderFactory
|
||||
{
|
||||
private static final String TAG = LocationProviderFactoryImpl.class.getSimpleName();
|
||||
private static final String TAG = LocationProviderFactory.class.getSimpleName();
|
||||
|
||||
public boolean isGoogleLocationAvailable(@NonNull Context context)
|
||||
public static boolean isGoogleLocationAvailable(@NonNull Context context)
|
||||
{
|
||||
return GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context) == ConnectionResult.SUCCESS;
|
||||
}
|
||||
|
||||
public BaseLocationProvider getProvider(@NonNull Context context, @NonNull BaseLocationProvider.Listener listener)
|
||||
public static BaseLocationProvider getProvider(@NonNull Context context,
|
||||
@NonNull BaseLocationProvider.Listener listener)
|
||||
{
|
||||
if (isGoogleLocationAvailable(context) && Config.useGoogleServices())
|
||||
{
|
||||
@@ -1 +0,0 @@
|
||||
../../../../google/java/app/organicmaps/location
|
||||
1
android/app/src/huawei/java/app/organicmaps/sdk/location
Symbolic link
1
android/app/src/huawei/java/app/organicmaps/sdk/location
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../../../google/java/app/organicmaps/sdk/location
|
||||
@@ -10,8 +10,6 @@ import androidx.core.content.ContextCompat;
|
||||
import app.organicmaps.sdk.Framework;
|
||||
import app.organicmaps.sdk.bookmarks.data.BookmarkManager;
|
||||
import app.organicmaps.sdk.bookmarks.data.ElevationInfo;
|
||||
import app.organicmaps.sdk.bookmarks.data.Track;
|
||||
import app.organicmaps.sdk.bookmarks.data.TrackStatistics;
|
||||
import app.organicmaps.util.ThemeUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
import app.organicmaps.widget.placepage.AxisValueFormatter;
|
||||
@@ -33,16 +31,17 @@ import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class ChartController implements OnChartValueSelectedListener
|
||||
public class ChartController implements OnChartValueSelectedListener,
|
||||
BookmarkManager.OnElevationActivePointChangedListener,
|
||||
BookmarkManager.OnElevationCurrentPositionChangedListener
|
||||
{
|
||||
private static final int CHART_Y_LABEL_COUNT = 3;
|
||||
private static final int CHART_X_LABEL_COUNT = 6;
|
||||
private static final int CHART_ANIMATION_DURATION = 0;
|
||||
private static final int CHART_ANIMATION_DURATION = 1500;
|
||||
private static final int CHART_FILL_ALPHA = (int) (0.12 * 255);
|
||||
private static final int CHART_AXIS_GRANULARITY = 100;
|
||||
private static final float CUBIC_INTENSITY = 0.2f;
|
||||
private static final int CURRENT_POSITION_OUT_OF_TRACK = -1;
|
||||
private static final String ELEVATION_PROFILE_POINTS = "ELEVATION_PROFILE_POINTS";
|
||||
|
||||
@SuppressWarnings("NullableProblems")
|
||||
@NonNull
|
||||
@@ -63,7 +62,6 @@ public class ChartController implements OnChartValueSelectedListener
|
||||
private final Context mContext;
|
||||
private long mTrackId = Utils.INVALID_ID;
|
||||
private boolean mCurrentPositionOutOfTrack = true;
|
||||
private boolean mInformSelectedActivePointToCore = true;
|
||||
|
||||
public ChartController(@NonNull Context context)
|
||||
{
|
||||
@@ -72,6 +70,8 @@ public class ChartController implements OnChartValueSelectedListener
|
||||
|
||||
public void initialize(@NonNull View view)
|
||||
{
|
||||
BookmarkManager.INSTANCE.setElevationActivePointChangedListener(this);
|
||||
BookmarkManager.INSTANCE.setElevationCurrentPositionChangedListener(this);
|
||||
final Resources resources = mContext.getResources();
|
||||
mChart = view.findViewById(R.id.elevation_profile_chart);
|
||||
|
||||
@@ -101,6 +101,13 @@ public class ChartController implements OnChartValueSelectedListener
|
||||
initAxises();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public void destroy()
|
||||
{
|
||||
BookmarkManager.INSTANCE.setElevationActivePointChangedListener(null);
|
||||
BookmarkManager.INSTANCE.setElevationCurrentPositionChangedListener(null);
|
||||
}
|
||||
|
||||
private void highlightChartCurrentLocation()
|
||||
{
|
||||
mChart.highlightValues(Collections.singletonList(getCurrentPosHighlight()),
|
||||
@@ -135,17 +142,15 @@ public class ChartController implements OnChartValueSelectedListener
|
||||
mChart.getAxisRight().setEnabled(false);
|
||||
}
|
||||
|
||||
public void setData(Track track)
|
||||
public void setData(@NonNull ElevationInfo info)
|
||||
{
|
||||
mTrackId = track.getTrackId();
|
||||
ElevationInfo info = track.getElevationInfo();
|
||||
TrackStatistics stats = track.getTrackStatistics();
|
||||
mTrackId = info.getId();
|
||||
List<Entry> values = new ArrayList<>();
|
||||
|
||||
for (ElevationInfo.Point point : info.getPoints())
|
||||
values.add(new Entry((float) point.getDistance(), point.getAltitude(), point));
|
||||
values.add(new Entry((float) point.getDistance(), point.getAltitude()));
|
||||
|
||||
LineDataSet set = new LineDataSet(values, ELEVATION_PROFILE_POINTS);
|
||||
LineDataSet set = new LineDataSet(values, "Elevation_profile_points");
|
||||
set.setMode(LineDataSet.Mode.CUBIC_BEZIER);
|
||||
set.setCubicIntensity(CUBIC_INTENSITY);
|
||||
set.setDrawFilled(true);
|
||||
@@ -168,8 +173,8 @@ public class ChartController implements OnChartValueSelectedListener
|
||||
mChart.setData(data);
|
||||
mChart.animateX(CHART_ANIMATION_DURATION);
|
||||
|
||||
mMinAltitude.setText(Framework.nativeFormatAltitude(stats.getMinElevation()));
|
||||
mMaxAltitude.setText(Framework.nativeFormatAltitude(stats.getMaxElevation()));
|
||||
mMinAltitude.setText(Framework.nativeFormatAltitude(info.getMinAltitude()));
|
||||
mMaxAltitude.setText(Framework.nativeFormatAltitude(info.getMaxAltitude()));
|
||||
|
||||
highlightActivePointManually();
|
||||
}
|
||||
@@ -187,9 +192,7 @@ public class ChartController implements OnChartValueSelectedListener
|
||||
if (mTrackId == Utils.INVALID_ID)
|
||||
return;
|
||||
|
||||
if (mInformSelectedActivePointToCore)
|
||||
BookmarkManager.INSTANCE.setElevationActivePoint(mTrackId, e.getX(), (ElevationInfo.Point) e.getData());
|
||||
mInformSelectedActivePointToCore = true;
|
||||
BookmarkManager.INSTANCE.setElevationActivePoint(mTrackId, e.getX());
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@@ -208,6 +211,7 @@ public class ChartController implements OnChartValueSelectedListener
|
||||
highlightChartCurrentLocation();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCurrentPositionChanged()
|
||||
{
|
||||
if (mTrackId == Utils.INVALID_ID)
|
||||
@@ -218,6 +222,7 @@ public class ChartController implements OnChartValueSelectedListener
|
||||
highlightActivePointManually();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onElevationActivePointChanged()
|
||||
{
|
||||
if (mTrackId == Utils.INVALID_ID)
|
||||
@@ -229,7 +234,6 @@ public class ChartController implements OnChartValueSelectedListener
|
||||
private void highlightActivePointManually()
|
||||
{
|
||||
Highlight highlight = getActivePoint();
|
||||
mInformSelectedActivePointToCore = false;
|
||||
mChart.highlightValue(highlight, true);
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,6 @@ import androidx.annotation.StringRes;
|
||||
import androidx.annotation.StyleRes;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import app.organicmaps.base.BaseMwmFragmentActivity;
|
||||
import app.organicmaps.downloader.MapManagerHelper;
|
||||
import app.organicmaps.intent.Factory;
|
||||
import app.organicmaps.sdk.Framework;
|
||||
import app.organicmaps.sdk.downloader.CountryItem;
|
||||
@@ -36,7 +35,7 @@ import app.organicmaps.sdk.location.LocationListener;
|
||||
import app.organicmaps.sdk.util.Config;
|
||||
import app.organicmaps.sdk.util.ConnectionState;
|
||||
import app.organicmaps.sdk.util.StringUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
import app.organicmaps.util.WindowInsetUtils.PaddingInsetsListener;
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
@@ -117,10 +116,10 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
|
||||
private final app.organicmaps.sdk.DownloadResourcesLegacyActivity.Listener mResourcesDownloadListener =
|
||||
new app.organicmaps.sdk.DownloadResourcesLegacyActivity.Listener() {
|
||||
@Override
|
||||
public void onProgress(final int bytesDownloaded)
|
||||
public void onProgress(final int percent)
|
||||
{
|
||||
if (!isFinishing())
|
||||
mProgress.setProgressCompat(bytesDownloaded, true);
|
||||
mProgress.setProgressCompat(percent, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -156,9 +155,7 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
|
||||
showMap();
|
||||
return;
|
||||
|
||||
case CountryItem.STATUS_FAILED:
|
||||
MapManagerHelper.showError(DownloadResourcesLegacyActivity.this, item, null);
|
||||
return;
|
||||
case CountryItem.STATUS_FAILED: MapManager.showError(DownloadResourcesLegacyActivity.this, item, null); return;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -253,8 +250,7 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
|
||||
setDownloadMessage(bytes);
|
||||
|
||||
mProgress.setMax(bytes);
|
||||
// Start progress at 1% according to M3 guidelines
|
||||
mProgress.setProgressCompat(bytes/100, true);
|
||||
mProgress.setProgressCompat(0, true);
|
||||
}
|
||||
else
|
||||
finishFilesDownload(bytes);
|
||||
@@ -372,11 +368,10 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
|
||||
String fileSizeString = StringUtils.getFileSizeString(this, item.totalSize);
|
||||
mTvMessage.setText(getString(R.string.downloading_country_can_proceed, item.name, fileSizeString));
|
||||
mProgress.setMax((int) item.totalSize);
|
||||
// Start progress at 1% according to M3 guidelines
|
||||
mProgress.setProgressCompat((int) (item.totalSize/100), true);
|
||||
mProgress.setProgressCompat(0, true);
|
||||
|
||||
mCountryDownloadListenerSlot = MapManager.nativeSubscribe(mCountryDownloadListener);
|
||||
MapManagerHelper.startDownload(mCurrentCountry);
|
||||
MapManager.startDownload(mCurrentCountry);
|
||||
setAction(PROCEED_TO_MAP);
|
||||
}
|
||||
else
|
||||
|
||||
@@ -12,7 +12,6 @@ import static app.organicmaps.sdk.location.LocationState.FOLLOW;
|
||||
import static app.organicmaps.sdk.location.LocationState.FOLLOW_AND_ROTATE;
|
||||
import static app.organicmaps.sdk.location.LocationState.LOCATION_TAG;
|
||||
import static app.organicmaps.sdk.util.PowerManagment.POWER_MANAGEMENT_TAG;
|
||||
import static app.organicmaps.sdk.util.Utils.dimen;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
@@ -112,6 +111,7 @@ import app.organicmaps.sdk.settings.UnitLocale;
|
||||
import app.organicmaps.sdk.util.Config;
|
||||
import app.organicmaps.sdk.util.LocationUtils;
|
||||
import app.organicmaps.sdk.util.PowerManagment;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.log.Logger;
|
||||
import app.organicmaps.sdk.widget.placepage.PlacePageData;
|
||||
import app.organicmaps.search.FloatingSearchToolbarController;
|
||||
@@ -122,7 +122,6 @@ import app.organicmaps.settings.SettingsActivity;
|
||||
import app.organicmaps.util.SharingUtils;
|
||||
import app.organicmaps.util.ThemeSwitcher;
|
||||
import app.organicmaps.util.ThemeUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
import app.organicmaps.util.bottomsheet.MenuBottomSheetFragment;
|
||||
import app.organicmaps.util.bottomsheet.MenuBottomSheetItem;
|
||||
@@ -458,10 +457,12 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
@StyleRes
|
||||
protected int getThemeResourceId(@NonNull String theme)
|
||||
{
|
||||
if (Config.UiTheme.isDefault(theme))
|
||||
Context context = getApplicationContext();
|
||||
|
||||
if (ThemeUtils.isDefaultTheme(context, theme))
|
||||
return R.style.MwmTheme_MainActivity;
|
||||
|
||||
if (Config.UiTheme.isNight(theme))
|
||||
if (ThemeUtils.isNightTheme(context, theme))
|
||||
return R.style.MwmTheme_Night_MainActivity;
|
||||
|
||||
return super.getThemeResourceId(theme);
|
||||
@@ -583,7 +584,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
|
||||
private void refreshLightStatusBar()
|
||||
{
|
||||
UiUtils.setLightStatusBar(this, !(ThemeUtils.isNightTheme() || RoutingController.get().isPlanning()
|
||||
UiUtils.setLightStatusBar(this, !(ThemeUtils.isNightTheme(this) || RoutingController.get().isPlanning()
|
||||
|| ChoosePositionMode.get() != ChoosePositionMode.None));
|
||||
}
|
||||
|
||||
@@ -593,7 +594,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
UiUtils.setViewInsetsPaddingBottom(mPointChooser, windowInsets);
|
||||
UiUtils.setViewInsetsPaddingNoBottom(mPointChooserToolbar, windowInsets);
|
||||
final int trackRecorderOffset =
|
||||
TrackRecorder.nativeIsTrackRecordingEnabled() ? dimen(this, R.dimen.map_button_size) : 0;
|
||||
TrackRecorder.nativeIsTrackRecordingEnabled() ? UiUtils.dimen(this, R.dimen.map_button_size) : 0;
|
||||
mNavBarHeight = isFullscreen() ? 0 : windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()).bottom;
|
||||
// For the first loading, set compass top margin to status bar size
|
||||
// The top inset will be then be updated by the routing controller
|
||||
@@ -1647,17 +1648,17 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
final int orientation = getResources().getConfiguration().orientation;
|
||||
final boolean isTrackRecordingEnabled = TrackRecorder.nativeIsTrackRecordingEnabled();
|
||||
if (isTrackRecordingEnabled && (orientation != Configuration.ORIENTATION_LANDSCAPE))
|
||||
offsetY += dimen(this, R.dimen.map_button_size);
|
||||
offsetY += UiUtils.dimen(this, R.dimen.map_button_size);
|
||||
if (orientation == Configuration.ORIENTATION_LANDSCAPE)
|
||||
{
|
||||
if (show)
|
||||
{
|
||||
final boolean isSmallScreen = UiUtils.getDisplayTotalHeight(this) < dimen(this, R.dimen.dp_400);
|
||||
final boolean isSmallScreen = UiUtils.getDisplayTotalHeight(this) < UiUtils.dimen(this, R.dimen.dp_400);
|
||||
if (!isSmallScreen || TrackRecorder.nativeIsTrackRecordingEnabled())
|
||||
offsetX += dimen(this, R.dimen.map_button_size);
|
||||
offsetX += UiUtils.dimen(this, R.dimen.map_button_size);
|
||||
}
|
||||
else if (isTrackRecordingEnabled)
|
||||
offsetY += dimen(this, R.dimen.map_button_size);
|
||||
offsetY += UiUtils.dimen(this, R.dimen.map_button_size);
|
||||
}
|
||||
updateCompassOffset(offsetY, offsetX);
|
||||
}
|
||||
@@ -2456,7 +2457,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
if (mCurrentWindowInsets != null)
|
||||
{
|
||||
final int offset = mCurrentWindowInsets.getInsets(WindowInsetsCompat.Type.systemBars()).top;
|
||||
updateCompassOffset(offset + dimen(this, R.dimen.map_button_size));
|
||||
updateCompassOffset(offset + UiUtils.dimen(this, R.dimen.map_button_size));
|
||||
}
|
||||
Toast.makeText(this, R.string.track_recording, Toast.LENGTH_SHORT).show();
|
||||
TrackRecordingService.startForegroundService(getApplicationContext());
|
||||
@@ -2549,7 +2550,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
items.add(new MenuBottomSheetItem(R.string.download_maps, R.drawable.ic_download, getDownloadMapsCounter(),
|
||||
this::onDownloadMapsOptionSelected));
|
||||
|
||||
mDonatesUrl = Utils.getDonateUrl(getApplicationContext());
|
||||
mDonatesUrl = Config.getDonateUrl(getApplicationContext());
|
||||
if (!mDonatesUrl.isEmpty())
|
||||
items.add(new MenuBottomSheetItem(R.string.donate, R.drawable.ic_donate, this::onDonateOptionSelected));
|
||||
|
||||
|
||||
@@ -14,10 +14,8 @@ import androidx.lifecycle.DefaultLifecycleObserver;
|
||||
import androidx.lifecycle.LifecycleObserver;
|
||||
import androidx.lifecycle.LifecycleOwner;
|
||||
import androidx.lifecycle.ProcessLifecycleOwner;
|
||||
import androidx.preference.PreferenceManager;
|
||||
import app.organicmaps.background.OsmUploadWork;
|
||||
import app.organicmaps.downloader.DownloaderNotifier;
|
||||
import app.organicmaps.location.LocationProviderFactoryImpl;
|
||||
import app.organicmaps.location.TrackRecordingService;
|
||||
import app.organicmaps.routing.NavigationService;
|
||||
import app.organicmaps.sdk.Map;
|
||||
@@ -43,9 +41,6 @@ public class MwmApplication extends Application implements Application.ActivityL
|
||||
@NonNull
|
||||
private static final String TAG = MwmApplication.class.getSimpleName();
|
||||
|
||||
@NonNull
|
||||
private final LocationProviderFactoryImpl mLocationProviderFactory = new LocationProviderFactoryImpl();
|
||||
|
||||
@SuppressWarnings("NotNullFieldNotInitialized")
|
||||
@NonNull
|
||||
private OrganicMaps mOrganicMaps;
|
||||
@@ -104,12 +99,6 @@ public class MwmApplication extends Application implements Application.ActivityL
|
||||
return mOrganicMaps;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public LocationProviderFactoryImpl getLocationProviderFactory()
|
||||
{
|
||||
return mLocationProviderFactory;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static MwmApplication from(@NonNull Context context)
|
||||
{
|
||||
@@ -130,10 +119,7 @@ public class MwmApplication extends Application implements Application.ActivityL
|
||||
|
||||
sInstance = this;
|
||||
|
||||
PreferenceManager.setDefaultValues(this, R.xml.prefs_main, false);
|
||||
mOrganicMaps = new OrganicMaps(getApplicationContext(), BuildConfig.FLAVOR, BuildConfig.APPLICATION_ID,
|
||||
BuildConfig.VERSION_CODE, BuildConfig.VERSION_NAME,
|
||||
BuildConfig.FILE_PROVIDER_AUTHORITY, mLocationProviderFactory);
|
||||
mOrganicMaps = new OrganicMaps(getApplicationContext());
|
||||
|
||||
ConnectionState.INSTANCE.initialize(this);
|
||||
|
||||
|
||||
@@ -9,8 +9,7 @@ import androidx.annotation.IntegerRes;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import app.organicmaps.sdk.util.Utils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import org.chromium.base.ObserverList;
|
||||
|
||||
class PanelAnimator
|
||||
@@ -27,7 +26,7 @@ class PanelAnimator
|
||||
PanelAnimator(MwmActivity activity)
|
||||
{
|
||||
mActivity = activity;
|
||||
mWidth = Utils.dimen(activity.getApplicationContext(), R.dimen.panel_width);
|
||||
mWidth = UiUtils.dimen(activity.getApplicationContext(), R.dimen.panel_width);
|
||||
mPanel = mActivity.findViewById(R.id.fragment_container);
|
||||
mDuration = mActivity.getResources().getInteger(R.integer.anim_panel);
|
||||
}
|
||||
|
||||
@@ -60,10 +60,11 @@ public class SplashActivity extends AppCompatActivity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
final String theme = Config.UiTheme.getCurrent();
|
||||
if (Config.UiTheme.isDefault(theme))
|
||||
final Context context = getApplicationContext();
|
||||
final String theme = Config.getCurrentUiTheme(context);
|
||||
if (ThemeUtils.isDefaultTheme(context, theme))
|
||||
setTheme(R.style.MwmTheme_Splash);
|
||||
else if (Config.UiTheme.isNight(theme))
|
||||
else if (ThemeUtils.isNightTheme(context, theme))
|
||||
setTheme(R.style.MwmTheme_Night_Splash);
|
||||
else
|
||||
throw new IllegalArgumentException("Attempt to apply unsupported theme: " + theme);
|
||||
|
||||
@@ -9,7 +9,7 @@ import android.webkit.WebView;
|
||||
import android.webkit.WebViewClient;
|
||||
import androidx.annotation.NonNull;
|
||||
import app.organicmaps.base.OnBackPressListener;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
|
||||
public abstract class WebContainerDelegate implements OnBackPressListener
|
||||
{
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package app.organicmaps.backup;
|
||||
|
||||
import static app.organicmaps.sdk.util.StorageUtils.isFolderWritable;
|
||||
import static app.organicmaps.sdk.util.Utils.dimen;
|
||||
import static app.organicmaps.settings.BackupSettingsFragment.MAX_BACKUPS_DEFAULT_COUNT;
|
||||
import static app.organicmaps.settings.BackupSettingsFragment.MAX_BACKUPS_KEY;
|
||||
|
||||
@@ -16,8 +15,8 @@ import android.text.style.AbsoluteSizeSpan;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.documentfile.provider.DocumentFile;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.log.Logger;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
@@ -51,14 +50,14 @@ public class BackupUtils
|
||||
|
||||
String volumeName;
|
||||
if ("primary".equalsIgnoreCase(volumeId))
|
||||
volumeName = context.getString(app.organicmaps.sdk.R.string.maps_storage_shared);
|
||||
volumeName = context.getString(R.string.maps_storage_shared);
|
||||
else
|
||||
volumeName = context.getString(app.organicmaps.sdk.R.string.maps_storage_removable);
|
||||
volumeName = context.getString(R.string.maps_storage_removable);
|
||||
|
||||
SpannableStringBuilder sb = new SpannableStringBuilder();
|
||||
sb.append(volumeName + ": \n", new AbsoluteSizeSpan(dimen(context, R.dimen.text_size_body_3)),
|
||||
sb.append(volumeName + ": \n", new AbsoluteSizeSpan(UiUtils.dimen(context, R.dimen.text_size_body_3)),
|
||||
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
sb.append("/" + subPath, new AbsoluteSizeSpan(dimen(context, R.dimen.text_size_body_4)),
|
||||
sb.append("/" + subPath, new AbsoluteSizeSpan(UiUtils.dimen(context, R.dimen.text_size_body_4)),
|
||||
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
return sb;
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ public class BaseMwmDialogFragment extends DialogFragment
|
||||
@StyleRes
|
||||
protected final int getFullscreenTheme()
|
||||
{
|
||||
return ThemeUtils.isNightTheme() ? getFullscreenDarkTheme() : getFullscreenLightTheme();
|
||||
return ThemeUtils.isNightTheme(requireContext()) ? getFullscreenDarkTheme() : getFullscreenLightTheme();
|
||||
}
|
||||
|
||||
protected int getStyle()
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package app.organicmaps.base;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Color;
|
||||
import android.media.AudioManager;
|
||||
@@ -23,6 +24,7 @@ import app.organicmaps.sdk.util.Config;
|
||||
import app.organicmaps.sdk.util.concurrency.UiThread;
|
||||
import app.organicmaps.sdk.util.log.Logger;
|
||||
import app.organicmaps.util.RtlUtils;
|
||||
import app.organicmaps.util.ThemeUtils;
|
||||
import com.google.android.material.appbar.MaterialToolbar;
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -38,10 +40,12 @@ public abstract class BaseMwmFragmentActivity extends AppCompatActivity
|
||||
@StyleRes
|
||||
protected int getThemeResourceId(@NonNull String theme)
|
||||
{
|
||||
if (Config.UiTheme.isDefault(theme))
|
||||
Context context = getApplicationContext();
|
||||
|
||||
if (ThemeUtils.isDefaultTheme(context, theme))
|
||||
return R.style.MwmTheme;
|
||||
|
||||
if (Config.UiTheme.isNight(theme))
|
||||
if (ThemeUtils.isNightTheme(context, theme))
|
||||
return R.style.MwmTheme_Night;
|
||||
|
||||
throw new IllegalArgumentException("Attempt to apply unsupported theme: " + theme);
|
||||
@@ -58,7 +62,7 @@ public abstract class BaseMwmFragmentActivity extends AppCompatActivity
|
||||
protected final void onCreate(@Nullable Bundle savedInstanceState)
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
mThemeName = Config.UiTheme.getCurrent();
|
||||
mThemeName = Config.getCurrentUiTheme(getApplicationContext());
|
||||
setTheme(getThemeResourceId(mThemeName));
|
||||
EdgeToEdge.enable(this, SystemBarStyle.dark(Color.TRANSPARENT));
|
||||
RtlUtils.manageRtl(this);
|
||||
@@ -118,7 +122,7 @@ public abstract class BaseMwmFragmentActivity extends AppCompatActivity
|
||||
public void onPostResume()
|
||||
{
|
||||
super.onPostResume();
|
||||
if (!mThemeName.equals(Config.UiTheme.getCurrent()))
|
||||
if (!mThemeName.equals(Config.getCurrentUiTheme(getApplicationContext())))
|
||||
{
|
||||
// Workaround described in https://code.google.com/p/android/issues/detail?id=93731
|
||||
UiThread.runLater(this::recreate);
|
||||
|
||||
@@ -14,7 +14,7 @@ import androidx.fragment.app.Fragment;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
import app.organicmaps.util.WindowInsetUtils.ScrollableContentInsetsListener;
|
||||
import app.organicmaps.widget.PlaceholderView;
|
||||
|
||||
@@ -10,7 +10,7 @@ import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentFactory;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.util.WindowInsetUtils.PaddingInsetsListener;
|
||||
import com.google.android.material.appbar.MaterialToolbar;
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ public class BookmarkCategoriesActivity extends BaseToolbarActivity
|
||||
@StyleRes
|
||||
public int getThemeResourceId(@NonNull String theme)
|
||||
{
|
||||
return ThemeUtils.getWindowBgThemeResourceId(theme);
|
||||
return ThemeUtils.getWindowBgThemeResourceId(getApplicationContext(), theme);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -11,7 +11,7 @@ import app.organicmaps.R;
|
||||
import app.organicmaps.adapter.OnItemClickListener;
|
||||
import app.organicmaps.sdk.bookmarks.data.BookmarkCategory;
|
||||
import app.organicmaps.sdk.bookmarks.data.BookmarkManager;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.util.List;
|
||||
|
||||
@@ -41,7 +41,7 @@ public class BookmarkListActivity extends BaseToolbarActivity
|
||||
@StyleRes
|
||||
public int getThemeResourceId(@NonNull String theme)
|
||||
{
|
||||
return ThemeUtils.getCardBgThemeResourceId(theme);
|
||||
return ThemeUtils.getCardBgThemeResourceId(getApplicationContext(), theme);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -33,15 +33,16 @@ import app.organicmaps.sdk.bookmarks.data.BookmarkInfo;
|
||||
import app.organicmaps.sdk.bookmarks.data.BookmarkManager;
|
||||
import app.organicmaps.sdk.bookmarks.data.BookmarkSharingResult;
|
||||
import app.organicmaps.sdk.bookmarks.data.CategoryDataSource;
|
||||
import app.organicmaps.sdk.bookmarks.data.Icon;
|
||||
import app.organicmaps.sdk.bookmarks.data.KmlFileType;
|
||||
import app.organicmaps.sdk.bookmarks.data.PredefinedColors;
|
||||
import app.organicmaps.sdk.bookmarks.data.SortedBlock;
|
||||
import app.organicmaps.sdk.bookmarks.data.Track;
|
||||
import app.organicmaps.sdk.search.BookmarkSearchListener;
|
||||
import app.organicmaps.sdk.search.SearchEngine;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.util.Graphics;
|
||||
import app.organicmaps.util.SharingUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
import app.organicmaps.util.WindowInsetUtils;
|
||||
import app.organicmaps.util.bottomsheet.MenuBottomSheetFragment;
|
||||
|
||||
@@ -13,7 +13,7 @@ import androidx.fragment.app.FragmentManager;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.base.BaseMwmDialogFragment;
|
||||
import app.organicmaps.sdk.bookmarks.data.BookmarkManager;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
|
||||
public class ChooseBookmarksSortingTypeFragment
|
||||
extends BaseMwmDialogFragment implements RadioGroup.OnCheckedChangeListener
|
||||
|
||||
@@ -18,8 +18,8 @@ import app.organicmaps.sdk.bookmarks.data.BookmarkInfo;
|
||||
import app.organicmaps.sdk.bookmarks.data.BookmarkManager;
|
||||
import app.organicmaps.sdk.bookmarks.data.IconClickListener;
|
||||
import app.organicmaps.sdk.bookmarks.data.Track;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.util.Graphics;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
import app.organicmaps.widget.recycler.RecyclerClickListener;
|
||||
import app.organicmaps.widget.recycler.RecyclerLongClickListener;
|
||||
|
||||
@@ -12,7 +12,6 @@ import androidx.lifecycle.LifecycleOwner;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.car.screens.ErrorScreen;
|
||||
import app.organicmaps.car.screens.base.BaseScreen;
|
||||
import app.organicmaps.downloader.MapManagerHelper;
|
||||
import app.organicmaps.sdk.downloader.CountryItem;
|
||||
import app.organicmaps.sdk.downloader.MapManager;
|
||||
import app.organicmaps.sdk.util.StringUtils;
|
||||
@@ -170,7 +169,7 @@ class DownloaderScreen extends BaseScreen
|
||||
mIsDownloadFailed = true;
|
||||
final ErrorScreen.Builder builder = new ErrorScreen.Builder(getCarContext())
|
||||
.setTitle(R.string.country_status_download_failed)
|
||||
.setErrorMessage(MapManagerHelper.getErrorCodeStrRes(data.errorCode))
|
||||
.setErrorMessage(MapManager.getErrorCodeStrRes(data.errorCode))
|
||||
.setPositiveButton(R.string.downloader_retry, null);
|
||||
if (!mIsCancelActionDisabled)
|
||||
builder.setNegativeButton(R.string.cancel, this::finish);
|
||||
|
||||
@@ -10,20 +10,19 @@ import androidx.car.app.CarContext;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.MapStyle;
|
||||
import app.organicmaps.sdk.routing.RoutingController;
|
||||
import app.organicmaps.sdk.util.Config;
|
||||
|
||||
public final class ThemeUtils
|
||||
{
|
||||
public enum ThemeMode
|
||||
{
|
||||
AUTO(R.string.auto, Config.UiTheme.AUTO),
|
||||
LIGHT(R.string.off, Config.UiTheme.DEFAULT),
|
||||
NIGHT(R.string.on, Config.UiTheme.NIGHT);
|
||||
AUTO(R.string.auto, R.string.theme_auto),
|
||||
LIGHT(R.string.off, R.string.theme_default),
|
||||
NIGHT(R.string.on, R.string.theme_night);
|
||||
|
||||
ThemeMode(@StringRes int titleId, @NonNull String config)
|
||||
ThemeMode(@StringRes int titleId, @StringRes int prefsKeyId)
|
||||
{
|
||||
mTitleId = titleId;
|
||||
mConfig = config;
|
||||
mPrefsKeyId = prefsKeyId;
|
||||
}
|
||||
|
||||
@StringRes
|
||||
@@ -32,16 +31,16 @@ public final class ThemeUtils
|
||||
return mTitleId;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String getConfig()
|
||||
@StringRes
|
||||
public int getPrefsKeyId()
|
||||
{
|
||||
return mConfig;
|
||||
return mPrefsKeyId;
|
||||
}
|
||||
|
||||
@StringRes
|
||||
private final int mTitleId;
|
||||
@NonNull
|
||||
private final String mConfig;
|
||||
@StringRes
|
||||
private final int mPrefsKeyId;
|
||||
}
|
||||
|
||||
private static final String ANDROID_AUTO_PREFERENCES_FILE_KEY = "ANDROID_AUTO_PREFERENCES_FILE_KEY";
|
||||
@@ -80,20 +79,23 @@ public final class ThemeUtils
|
||||
@UiThread
|
||||
public static void setThemeMode(@NonNull CarContext context, @NonNull ThemeMode themeMode)
|
||||
{
|
||||
getSharedPreferences(context).edit().putString(THEME_KEY, themeMode.getConfig()).commit();
|
||||
getSharedPreferences(context).edit().putString(THEME_KEY, context.getString(themeMode.getPrefsKeyId())).commit();
|
||||
update(context, themeMode);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static ThemeMode getThemeMode(@NonNull CarContext context)
|
||||
{
|
||||
final String themeMode = getSharedPreferences(context).getString(THEME_KEY, ThemeMode.AUTO.getConfig());
|
||||
final String autoTheme = context.getString(R.string.theme_auto);
|
||||
final String lightTheme = context.getString(R.string.theme_default);
|
||||
final String nightTheme = context.getString(R.string.theme_night);
|
||||
final String themeMode = getSharedPreferences(context).getString(THEME_KEY, autoTheme);
|
||||
|
||||
if (themeMode.equals(ThemeMode.AUTO.getConfig()))
|
||||
if (themeMode.equals(autoTheme))
|
||||
return ThemeMode.AUTO;
|
||||
else if (themeMode.equals(ThemeMode.LIGHT.getConfig()))
|
||||
else if (themeMode.equals(lightTheme))
|
||||
return ThemeMode.LIGHT;
|
||||
else if (themeMode.equals(ThemeMode.NIGHT.getConfig()))
|
||||
else if (themeMode.equals(nightTheme))
|
||||
return ThemeMode.NIGHT;
|
||||
else
|
||||
throw new IllegalArgumentException("Unsupported value");
|
||||
|
||||
@@ -15,7 +15,7 @@ import app.organicmaps.sdk.downloader.CountryItem;
|
||||
import app.organicmaps.sdk.downloader.MapManager;
|
||||
import app.organicmaps.sdk.downloader.UpdateInfo;
|
||||
import app.organicmaps.sdk.util.StringUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
|
||||
@@ -29,7 +29,7 @@ class BottomPanel
|
||||
@Override
|
||||
public void onClick(View v)
|
||||
{
|
||||
MapManagerHelper.warn3gAndDownload(mFragment.requireActivity(), mFragment.getCurrentRoot(), null);
|
||||
MapManager.warn3gAndDownload(mFragment.requireActivity(), mFragment.getCurrentRoot(), null);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -38,10 +38,7 @@ class BottomPanel
|
||||
public void onClick(View v)
|
||||
{
|
||||
final String country = mFragment.getCurrentRoot();
|
||||
MapManagerHelper.warnOn3gUpdate(mFragment.requireActivity(), country, () -> {
|
||||
DownloaderService.startForegroundService();
|
||||
MapManagerHelper.startUpdate(country);
|
||||
});
|
||||
MapManager.warnOn3gUpdate(mFragment.requireActivity(), country, () -> MapManager.startUpdate(country));
|
||||
}
|
||||
};
|
||||
|
||||
@@ -58,7 +55,7 @@ class BottomPanel
|
||||
@Override
|
||||
public void onClick(View v)
|
||||
{
|
||||
MapManagerHelper.warn3gAndRetry(mFragment.requireActivity(), mFragment.getCurrentRoot(), null);
|
||||
MapManager.warn3gAndRetry(mFragment.requireActivity(), mFragment.getCurrentRoot(), null);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ import app.organicmaps.base.BaseMwmFragmentActivity;
|
||||
import app.organicmaps.sdk.downloader.CountryItem;
|
||||
import app.organicmaps.sdk.downloader.MapManager;
|
||||
import app.organicmaps.sdk.util.StringUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.widget.WheelProgressView;
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
@@ -198,8 +198,7 @@ public class CountrySuggestFragment extends BaseMwmFragment implements View.OnCl
|
||||
final int id = v.getId();
|
||||
if (id == R.id.btn__download_map)
|
||||
{
|
||||
MapManagerHelper.warn3gAndDownload(requireActivity(), mCurrentCountry.id,
|
||||
() -> mDownloadingCountry = mCurrentCountry);
|
||||
MapManager.warn3gAndDownload(requireActivity(), mCurrentCountry.id, () -> mDownloadingCountry = mCurrentCountry);
|
||||
}
|
||||
else if (id == R.id.btn__select_map)
|
||||
{
|
||||
|
||||
@@ -24,7 +24,7 @@ import app.organicmaps.sdk.downloader.CountryItem;
|
||||
import app.organicmaps.sdk.downloader.MapManager;
|
||||
import app.organicmaps.sdk.routing.RoutingController;
|
||||
import app.organicmaps.sdk.util.StringUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.util.bottomsheet.MenuBottomSheetFragment;
|
||||
import app.organicmaps.util.bottomsheet.MenuBottomSheetItem;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
@@ -93,7 +93,7 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
|
||||
|
||||
private void onDownloadActionSelected(final CountryItem item, DownloaderAdapter adapter)
|
||||
{
|
||||
MapManagerHelper.warn3gAndDownload(adapter.mActivity, item.id, null);
|
||||
MapManager.warn3gAndDownload(adapter.mActivity, item.id, null);
|
||||
}
|
||||
|
||||
private void onUpdateActionSelected(final CountryItem item, DownloaderAdapter adapter)
|
||||
@@ -101,7 +101,7 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
|
||||
item.update();
|
||||
if (item.status != CountryItem.STATUS_UPDATABLE)
|
||||
return;
|
||||
MapManagerHelper.warnOn3gUpdate(adapter.mActivity, item.id, () -> MapManagerHelper.startUpdate(item.id));
|
||||
MapManager.warnOn3gUpdate(adapter.mActivity, item.id, () -> MapManager.startUpdate(item.id));
|
||||
}
|
||||
|
||||
private void onExploreActionSelected(CountryItem item, DownloaderAdapter adapter)
|
||||
@@ -206,7 +206,7 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
|
||||
{
|
||||
if (item.isLeafNode && item.newStatus == CountryItem.STATUS_FAILED)
|
||||
{
|
||||
MapManagerHelper.showError(mActivity, item, null);
|
||||
MapManager.showError(mActivity, item, null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -382,12 +382,9 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
|
||||
else
|
||||
processLongClick();
|
||||
}
|
||||
case CountryItem.STATUS_FAILED ->
|
||||
{
|
||||
MapManagerHelper.warn3gAndRetry(mActivity, mItem.id, null);
|
||||
}
|
||||
case CountryItem.STATUS_FAILED -> MapManager.warn3gAndRetry(mActivity, mItem.id, null);
|
||||
case CountryItem.STATUS_UPDATABLE ->
|
||||
MapManagerHelper.warnOn3gUpdate(mActivity, mItem.id, () -> MapManagerHelper.startUpdate(mItem.id));
|
||||
MapManager.warnOn3gUpdate(mActivity, mItem.id, () -> MapManager.startUpdate(mItem.id));
|
||||
default -> throw new IllegalArgumentException("Inappropriate item status: " + mItem.status);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,8 +9,7 @@ import androidx.core.view.OnApplyWindowInsetsListener;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.util.Utils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.util.WindowInsetUtils;
|
||||
|
||||
final class DownloaderInsetsListener implements OnApplyWindowInsetsListener
|
||||
@@ -56,7 +55,7 @@ final class DownloaderInsetsListener implements OnApplyWindowInsetsListener
|
||||
|
||||
private void applyInsetsToButtons(Insets insets)
|
||||
{
|
||||
int baseMargin = Utils.dimen(mContext, R.dimen.margin_base);
|
||||
int baseMargin = UiUtils.dimen(mContext, R.dimen.margin_base);
|
||||
|
||||
ViewGroup.MarginLayoutParams fabParams = (ViewGroup.MarginLayoutParams) mFab.getLayoutParams();
|
||||
ViewGroup.MarginLayoutParams buttonParams = (ViewGroup.MarginLayoutParams) mButton.getLayoutParams();
|
||||
|
||||
@@ -20,7 +20,6 @@ import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.downloader.MapManager;
|
||||
import app.organicmaps.sdk.util.StringUtils;
|
||||
import app.organicmaps.sdk.util.log.Logger;
|
||||
import java.util.Objects;
|
||||
|
||||
public class DownloaderNotifier
|
||||
{
|
||||
@@ -30,8 +29,7 @@ public class DownloaderNotifier
|
||||
public static final int NOTIFICATION_ID = 1;
|
||||
|
||||
private final Context mContext;
|
||||
private NotificationCompat.Builder mProgressNotificationBuilder = null;
|
||||
private String mNotificationCountryId = null;
|
||||
private NotificationCompat.Builder mProgressNotificationBuilder;
|
||||
|
||||
public DownloaderNotifier(Context context)
|
||||
{
|
||||
@@ -47,7 +45,6 @@ public class DownloaderNotifier
|
||||
.setShowBadge(true)
|
||||
.setVibrationEnabled(false)
|
||||
.setLightsEnabled(false)
|
||||
.setSound(null, null)
|
||||
.build();
|
||||
notificationManager.createNotificationChannel(channel);
|
||||
}
|
||||
@@ -65,6 +62,8 @@ public class DownloaderNotifier
|
||||
final String countryName = MapManager.nativeGetName(countryId);
|
||||
final String content = mContext.getString(R.string.download_country_failed, countryName);
|
||||
|
||||
var contentPendingIntent = getNotificationPendingIntent(countryId);
|
||||
|
||||
final Notification notification = new NotificationCompat.Builder(mContext, CHANNEL_ID)
|
||||
.setAutoCancel(true)
|
||||
.setCategory(NotificationCompat.CATEGORY_ERROR)
|
||||
@@ -75,7 +74,7 @@ public class DownloaderNotifier
|
||||
.setContentText(content)
|
||||
.setShowWhen(true)
|
||||
.setTicker(getTicker(mContext, title, content))
|
||||
.setContentIntent(getNotificationPendingIntent(countryId))
|
||||
.setContentIntent(contentPendingIntent)
|
||||
.setOnlyAlertOnce(true)
|
||||
.build();
|
||||
|
||||
@@ -111,41 +110,32 @@ public class DownloaderNotifier
|
||||
@NonNull
|
||||
public Notification buildProgressNotification(@Nullable String countryId, int maxProgress, int progress)
|
||||
{
|
||||
var builder = getNotificationBuilder(countryId);
|
||||
/// @todo Doesn't work properly .. Bad input sizes?
|
||||
// builder.setProgress(maxProgress, progress, maxProgress == 0);
|
||||
builder.setProgress(maxProgress, progress, true);
|
||||
var builder = startNotification(countryId);
|
||||
|
||||
builder.setProgress(maxProgress, progress, maxProgress == 0);
|
||||
builder.setContentText("Download in progress");
|
||||
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private NotificationCompat.Builder getNotificationBuilder(@Nullable String countryId)
|
||||
private NotificationCompat.Builder startNotification(@Nullable String countryId)
|
||||
{
|
||||
if (mProgressNotificationBuilder == null || !Objects.equals(countryId, mNotificationCountryId))
|
||||
{
|
||||
mNotificationCountryId = countryId;
|
||||
final String countryName = countryId != null ? MapManager.nativeGetName(countryId) : "";
|
||||
final String title = mContext.getString(R.string.app_name);
|
||||
|
||||
mProgressNotificationBuilder =
|
||||
new NotificationCompat.Builder(mContext, CHANNEL_ID)
|
||||
.setAutoCancel(true)
|
||||
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
|
||||
.setSmallIcon(R.drawable.ic_logo_small)
|
||||
.setColor(ContextCompat.getColor(mContext, R.color.notification))
|
||||
.setShowWhen(true)
|
||||
.setContentTitle(mContext.getString(R.string.app_name))
|
||||
.setContentIntent(getNotificationPendingIntent(countryId))
|
||||
.setContentText(mContext.getString(R.string.downloader_downloading) + " " + countryName)
|
||||
.setSound(null);
|
||||
}
|
||||
return mProgressNotificationBuilder;
|
||||
return new NotificationCompat.Builder(mContext, CHANNEL_ID)
|
||||
.setAutoCancel(true)
|
||||
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
|
||||
.setSmallIcon(R.drawable.ic_logo_small)
|
||||
.setColor(ContextCompat.getColor(mContext, R.color.notification))
|
||||
.setShowWhen(true)
|
||||
.setContentTitle(title)
|
||||
.setContentIntent(getNotificationPendingIntent(countryId));
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private PendingIntent getNotificationPendingIntent(@Nullable String countryId)
|
||||
{
|
||||
/// @todo Zooming to the countryId when tapping on the notification?
|
||||
/// Shows very low zoom level, need z=9/10, I suppose ...
|
||||
final int FLAG_IMMUTABLE = Build.VERSION.SDK_INT < Build.VERSION_CODES.M ? 0 : PendingIntent.FLAG_IMMUTABLE;
|
||||
final Intent contentIntent = MwmActivity.createShowMapIntent(mContext, countryId);
|
||||
contentIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
|
||||
@@ -97,7 +97,7 @@ public class DownloaderService extends Service implements MapManager.StorageCall
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProgress(String countryId, long bytesDownloaded, long bytesTotal)
|
||||
public void onProgress(String countryId, long localSize, long remoteSize)
|
||||
{
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU
|
||||
&& ContextCompat.checkSelfPermission(this, POST_NOTIFICATIONS) != PERMISSION_GRANTED)
|
||||
@@ -106,7 +106,8 @@ public class DownloaderService extends Service implements MapManager.StorageCall
|
||||
return;
|
||||
}
|
||||
|
||||
mNotifier.notifyProgress(countryId, (int) bytesTotal, (int) bytesDownloaded);
|
||||
// TODO: How to calculate progress?
|
||||
mNotifier.notifyProgress();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -6,8 +6,8 @@ import androidx.annotation.AttrRes;
|
||||
import androidx.annotation.DrawableRes;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.downloader.CountryItem;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.util.ThemeUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.widget.WheelProgressView;
|
||||
import com.google.android.material.imageview.ShapeableImageView;
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import android.content.Intent;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.widget.SearchToolbarController;
|
||||
|
||||
class DownloaderToolbarController extends SearchToolbarController
|
||||
|
||||
@@ -1,223 +0,0 @@
|
||||
package app.organicmaps.downloader;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.text.TextUtils;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.core.util.Consumer;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.downloader.CountryItem;
|
||||
import app.organicmaps.sdk.downloader.ExpandRetryConfirmationListener;
|
||||
import app.organicmaps.sdk.downloader.MapManager;
|
||||
import app.organicmaps.sdk.util.ConnectionState;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
public class MapManagerHelper
|
||||
{
|
||||
private static WeakReference<AlertDialog> sCurrentErrorDialog;
|
||||
|
||||
@StringRes
|
||||
public static int getErrorCodeStrRes(final int errorCode)
|
||||
{
|
||||
return switch (errorCode)
|
||||
{
|
||||
case CountryItem.ERROR_NO_INTERNET -> R.string.common_check_internet_connection_dialog;
|
||||
case CountryItem.ERROR_OOM -> R.string.downloader_no_space_title;
|
||||
default -> throw new IllegalArgumentException("Given error can not be displayed: " + errorCode);
|
||||
};
|
||||
}
|
||||
|
||||
public static void showError(final Activity activity, final MapManager.StorageCallbackData errorData,
|
||||
@Nullable final Consumer<Boolean> dialogClickListener)
|
||||
{
|
||||
if (!MapManager.nativeIsAutoretryFailed())
|
||||
return;
|
||||
|
||||
showErrorDialog(activity, errorData, dialogClickListener);
|
||||
}
|
||||
|
||||
public static void showErrorDialog(final Activity activity, final MapManager.StorageCallbackData errorData,
|
||||
@Nullable final Consumer<Boolean> dialogClickListener)
|
||||
{
|
||||
if (sCurrentErrorDialog != null)
|
||||
{
|
||||
AlertDialog dlg = sCurrentErrorDialog.get();
|
||||
if (dlg != null && dlg.isShowing())
|
||||
return;
|
||||
}
|
||||
|
||||
final AlertDialog dlg = new MaterialAlertDialogBuilder(activity, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.country_status_download_failed)
|
||||
.setMessage(getErrorCodeStrRes(errorData.errorCode))
|
||||
.setNegativeButton(R.string.cancel,
|
||||
(dialog, which) -> {
|
||||
sCurrentErrorDialog = null;
|
||||
if (dialogClickListener != null)
|
||||
dialogClickListener.accept(false);
|
||||
})
|
||||
.setPositiveButton(R.string.downloader_retry,
|
||||
(dialog, which) -> {
|
||||
ExpandRetryConfirmationListener listener =
|
||||
new ExpandRetryConfirmationListener(dialogClickListener);
|
||||
warn3gAndRetry(activity, errorData.countryId, listener);
|
||||
})
|
||||
.create();
|
||||
dlg.setCanceledOnTouchOutside(false);
|
||||
dlg.show();
|
||||
sCurrentErrorDialog = new WeakReference<>(dlg);
|
||||
}
|
||||
|
||||
private static void notifyNoSpaceInternal(Activity activity)
|
||||
{
|
||||
new MaterialAlertDialogBuilder(activity, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.downloader_no_space_title)
|
||||
.setMessage(R.string.downloader_no_space_message)
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.show();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if there is no space to update the given {@code root}, so the alert dialog will be shown.
|
||||
*/
|
||||
private static boolean notifyNoSpaceToUpdate(Activity activity, String root)
|
||||
{
|
||||
if (MapManager.nativeHasSpaceToUpdate(root))
|
||||
return false;
|
||||
|
||||
notifyNoSpaceInternal(activity);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if there is no space to download the given {@code root}, so the alert dialog will be shown.
|
||||
*/
|
||||
private static boolean notifyNoSpace(Activity activity, String root)
|
||||
{
|
||||
if (MapManager.nativeHasSpaceToDownloadCountry(root))
|
||||
return false;
|
||||
|
||||
notifyNoSpaceInternal(activity);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if there is no space to download {@code size} bytes, so the alert dialog will be shown.
|
||||
*/
|
||||
private static boolean notifyNoSpace(Activity activity, long size)
|
||||
{
|
||||
if (MapManager.nativeHasSpaceToDownloadAmount(size))
|
||||
return false;
|
||||
|
||||
notifyNoSpaceInternal(activity);
|
||||
return true;
|
||||
}
|
||||
|
||||
private static boolean warnOn3gInternal(Activity activity, @NonNull final Runnable onAcceptListener)
|
||||
{
|
||||
if (MapManager.nativeIsDownloadOn3gEnabled() || !ConnectionState.INSTANCE.isMobileConnected())
|
||||
{
|
||||
onAcceptListener.run();
|
||||
return false;
|
||||
}
|
||||
|
||||
new MaterialAlertDialogBuilder(activity, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.download_over_mobile_header)
|
||||
.setMessage(R.string.download_over_mobile_message)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(R.string.ok,
|
||||
(dlg, which) -> {
|
||||
MapManager.nativeEnableDownloadOn3g();
|
||||
onAcceptListener.run();
|
||||
})
|
||||
.show();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean warnOn3gUpdate(Activity activity, @Nullable String countryId,
|
||||
@NonNull final Runnable onAcceptListener)
|
||||
{
|
||||
// noinspection SimplifiableIfStatement
|
||||
if (TextUtils.isEmpty(countryId) || !notifyNoSpaceToUpdate(activity, countryId))
|
||||
return warnOn3gInternal(activity, onAcceptListener);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean warnOn3g(Activity activity, @Nullable String countryId,
|
||||
@NonNull final Runnable onAcceptListener)
|
||||
{
|
||||
// noinspection SimplifiableIfStatement
|
||||
if (TextUtils.isEmpty(countryId) || !notifyNoSpace(activity, countryId))
|
||||
return warnOn3gInternal(activity, onAcceptListener);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean warnOn3g(Activity activity, long size, @NonNull Runnable onAcceptListener)
|
||||
{
|
||||
return !notifyNoSpace(activity, size) && warnOn3gInternal(activity, onAcceptListener);
|
||||
}
|
||||
|
||||
public static boolean warn3gAndDownload(Activity activity, final String countryId,
|
||||
@Nullable final Runnable onAcceptListener)
|
||||
{
|
||||
return warnOn3g(activity, countryId, () -> {
|
||||
if (onAcceptListener != null)
|
||||
onAcceptListener.run();
|
||||
startDownload(countryId);
|
||||
});
|
||||
}
|
||||
|
||||
public static boolean warn3gAndRetry(Activity activity, final String countryId,
|
||||
@Nullable final Runnable onAcceptListener)
|
||||
{
|
||||
return warnOn3g(activity, countryId, () -> {
|
||||
if (onAcceptListener != null)
|
||||
onAcceptListener.run();
|
||||
retryDownload(countryId);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueues failed items under given {@code root} node in downloader.
|
||||
*/
|
||||
public static void retryDownload(@NonNull String countryId)
|
||||
{
|
||||
DownloaderService.startForegroundService();
|
||||
MapManager.retryDownload(countryId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueues given {@code root} node with its children in downloader.
|
||||
*/
|
||||
public static void startUpdate(@NonNull String root)
|
||||
{
|
||||
DownloaderService.startForegroundService();
|
||||
MapManager.startUpdate(root);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueues the given list of nodes and its children in downloader.
|
||||
*/
|
||||
public static void startDownload(String... countries)
|
||||
{
|
||||
DownloaderService.startForegroundService();
|
||||
for (var countryId : countries)
|
||||
{
|
||||
MapManager.startDownload(countryId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueues given {@code root} node and its children in downloader.
|
||||
*/
|
||||
public static void startDownload(@NonNull String countryId)
|
||||
{
|
||||
DownloaderService.startForegroundService();
|
||||
MapManager.startDownload(countryId);
|
||||
}
|
||||
}
|
||||
@@ -15,7 +15,7 @@ import app.organicmaps.sdk.routing.RoutingController;
|
||||
import app.organicmaps.sdk.util.Config;
|
||||
import app.organicmaps.sdk.util.ConnectionState;
|
||||
import app.organicmaps.sdk.util.StringUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.util.WindowInsetUtils.PaddingInsetsListener;
|
||||
import app.organicmaps.widget.WheelProgressView;
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
@@ -52,7 +52,7 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
|
||||
continue;
|
||||
|
||||
if (item.newStatus == CountryItem.STATUS_FAILED)
|
||||
MapManagerHelper.showError(mActivity, item, null);
|
||||
MapManager.showError(mActivity, item, null);
|
||||
|
||||
if (mCurrentCountry.id.equals(item.countryId))
|
||||
{
|
||||
@@ -163,7 +163,7 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
|
||||
if (TextUtils.equals(mCurrentCountry.id, country)
|
||||
&& MapManager.nativeHasSpaceToDownloadCountry(country))
|
||||
{
|
||||
MapManagerHelper.startDownload(mCurrentCountry.id);
|
||||
MapManager.startDownload(mCurrentCountry.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -199,18 +199,18 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
|
||||
setAutodownloadLocked(true);
|
||||
});
|
||||
mButton.setOnClickListener(
|
||||
v -> MapManagerHelper.warnOn3g(mActivity, mCurrentCountry == null ? null : mCurrentCountry.id, () -> {
|
||||
v -> MapManager.warnOn3g(mActivity, mCurrentCountry == null ? null : mCurrentCountry.id, () -> {
|
||||
if (mCurrentCountry == null)
|
||||
return;
|
||||
|
||||
boolean retry = (mCurrentCountry.status == CountryItem.STATUS_FAILED);
|
||||
if (retry)
|
||||
{
|
||||
MapManagerHelper.retryDownload(mCurrentCountry.id);
|
||||
MapManager.retryDownload(mCurrentCountry.id);
|
||||
}
|
||||
else
|
||||
{
|
||||
MapManagerHelper.startDownload(mCurrentCountry.id);
|
||||
MapManager.startDownload(mCurrentCountry.id);
|
||||
mActivity.requestPostNotificationsPermission();
|
||||
}
|
||||
}));
|
||||
|
||||
@@ -14,9 +14,9 @@ import app.organicmaps.R;
|
||||
import app.organicmaps.base.BaseMwmFragment;
|
||||
import app.organicmaps.sdk.editor.OpeningHours;
|
||||
import app.organicmaps.sdk.util.Constants;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.util.Graphics;
|
||||
import app.organicmaps.util.InputUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import com.google.android.material.imageview.ShapeableImageView;
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
|
||||
@@ -29,10 +29,10 @@ import app.organicmaps.sdk.editor.data.LocalizedName;
|
||||
import app.organicmaps.sdk.editor.data.LocalizedStreet;
|
||||
import app.organicmaps.sdk.editor.data.Timetable;
|
||||
import app.organicmaps.sdk.util.StringUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.Utils;
|
||||
import app.organicmaps.util.Graphics;
|
||||
import app.organicmaps.util.InputUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.imageview.ShapeableImageView;
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
@@ -287,8 +287,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
|
||||
return validateNames();
|
||||
}
|
||||
|
||||
private boolean beforeSavingValidation()
|
||||
{
|
||||
private boolean beforeSavingValidation() {
|
||||
// Validation to make sure address features have a house number
|
||||
if (!Editor.nativeCheckHouseNumberWhenIsAddress())
|
||||
{
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package app.organicmaps.editor;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
@@ -24,7 +25,7 @@ import app.organicmaps.sdk.editor.data.Language;
|
||||
import app.organicmaps.sdk.editor.data.LocalizedName;
|
||||
import app.organicmaps.sdk.editor.data.LocalizedStreet;
|
||||
import app.organicmaps.sdk.editor.data.NamesDataSource;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
import app.organicmaps.util.WindowInsetUtils.PaddingInsetsListener;
|
||||
import app.organicmaps.widget.SearchToolbarController;
|
||||
|
||||
@@ -10,7 +10,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.editor.data.FeatureCategory;
|
||||
import app.organicmaps.sdk.util.StringUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
|
||||
|
||||
@@ -79,8 +79,8 @@ public class HoursMinutesPickerFragment extends BaseMwmDialogFragment
|
||||
mTabs.getTabAt(mSelectedTab).select();
|
||||
|
||||
@StyleRes
|
||||
final int theme = ThemeUtils.isNightTheme() ? R.style.MwmMain_DialogFragment_TimePicker_Night
|
||||
: R.style.MwmMain_DialogFragment_TimePicker;
|
||||
final int theme = ThemeUtils.isNightTheme(requireContext()) ? R.style.MwmMain_DialogFragment_TimePicker_Night
|
||||
: R.style.MwmMain_DialogFragment_TimePicker;
|
||||
final AlertDialog dialog = new MaterialAlertDialogBuilder(requireActivity(), theme)
|
||||
.setView(root)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
@@ -141,8 +141,8 @@ public class HoursMinutesPickerFragment extends BaseMwmDialogFragment
|
||||
MaterialTextView tabView = (MaterialTextView) inflater.inflate(R.layout.tab_timepicker, mTabs, false);
|
||||
tabView.setText(getResources().getString(R.string.editor_time_from));
|
||||
final ColorStateList textColor = AppCompatResources.getColorStateList(
|
||||
requireContext(),
|
||||
ThemeUtils.isNightTheme() ? R.color.accent_color_selector_night : R.color.accent_color_selector);
|
||||
requireContext(), ThemeUtils.isNightTheme(requireContext()) ? R.color.accent_color_selector_night
|
||||
: R.color.accent_color_selector);
|
||||
tabView.setTextColor(textColor);
|
||||
mTabs.addTab(mTabs.newTab().setCustomView(tabView), true);
|
||||
tabView = (MaterialTextView) inflater.inflate(R.layout.tab_timepicker, mTabs, false);
|
||||
|
||||
@@ -10,7 +10,7 @@ import app.organicmaps.sdk.editor.Editor;
|
||||
import app.organicmaps.sdk.editor.data.Language;
|
||||
import app.organicmaps.sdk.editor.data.LocalizedName;
|
||||
import app.organicmaps.sdk.util.StringUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package app.organicmaps.sdk.editor;
|
||||
package app.organicmaps.editor;
|
||||
|
||||
import androidx.annotation.Keep;
|
||||
|
||||
@@ -15,11 +15,10 @@ import app.organicmaps.R;
|
||||
import app.organicmaps.base.BaseMwmToolbarFragment;
|
||||
import app.organicmaps.sdk.editor.OsmOAuth;
|
||||
import app.organicmaps.sdk.util.Constants;
|
||||
import app.organicmaps.sdk.util.DateUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.concurrency.ThreadPool;
|
||||
import app.organicmaps.sdk.util.concurrency.UiThread;
|
||||
import app.organicmaps.util.InputUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
import app.organicmaps.util.WindowInsetUtils.ScrollableContentInsetsListener;
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
|
||||
@@ -9,7 +9,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.editor.Editor;
|
||||
import app.organicmaps.sdk.util.StringUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import com.google.android.material.imageview.ShapeableImageView;
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
|
||||
@@ -11,17 +11,14 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.base.BaseMwmToolbarFragment;
|
||||
import app.organicmaps.sdk.editor.OsmOAuth;
|
||||
import app.organicmaps.sdk.util.NetworkPolicy;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.concurrency.ThreadPool;
|
||||
import app.organicmaps.sdk.util.concurrency.UiThread;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
import app.organicmaps.util.WindowInsetUtils;
|
||||
import app.organicmaps.widget.StackedButtonDialogFragment;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.imageview.ShapeableImageView;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
@@ -29,24 +26,6 @@ import java.text.NumberFormat;
|
||||
|
||||
public class ProfileFragment extends BaseMwmToolbarFragment
|
||||
{
|
||||
@NonNull
|
||||
private static final NetworkPolicy.DialogPresenter mDialogPresenter = new NetworkPolicy.DialogPresenter() {
|
||||
@Override
|
||||
public void showDialogIfNeeded(@NonNull FragmentManager fragmentManager,
|
||||
@NonNull NetworkPolicy.NetworkPolicyListener listener, @NonNull NetworkPolicy policy,
|
||||
boolean isToday)
|
||||
{
|
||||
StackedButtonDialogFragment.showDialogIfNeeded(fragmentManager, listener, policy, isToday);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showDialog(@NonNull FragmentManager fragmentManager,
|
||||
@NonNull NetworkPolicy.NetworkPolicyListener listener)
|
||||
{
|
||||
StackedButtonDialogFragment.showDialog(fragmentManager, listener);
|
||||
}
|
||||
};
|
||||
|
||||
private View mUserInfoBlock;
|
||||
private MaterialTextView mEditsSent;
|
||||
private MaterialTextView mProfileName;
|
||||
@@ -105,7 +84,7 @@ public class ProfileFragment extends BaseMwmToolbarFragment
|
||||
UiUtils.show(mProfileInfoLoading);
|
||||
UiUtils.hide(mUserInfoBlock);
|
||||
}
|
||||
final int profileEditCount = OsmOAuth.getOsmChangesetsCount(mDialogPresenter, getParentFragmentManager());
|
||||
final int profileEditCount = OsmOAuth.getOsmChangesetsCount(getParentFragmentManager());
|
||||
final String profileUsername = OsmOAuth.getUsername();
|
||||
final Bitmap profilePicture = OsmOAuth.getProfilePicture();
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ import androidx.core.view.ViewCompat;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.base.BaseMwmToolbarFragment;
|
||||
import app.organicmaps.sdk.editor.Editor;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.util.WindowInsetUtils.ScrollableContentInsetsListener;
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
|
||||
|
||||
@@ -18,8 +18,7 @@ import app.organicmaps.sdk.editor.OpeningHours;
|
||||
import app.organicmaps.sdk.editor.data.HoursMinutes;
|
||||
import app.organicmaps.sdk.editor.data.Timespan;
|
||||
import app.organicmaps.sdk.editor.data.Timetable;
|
||||
import app.organicmaps.sdk.util.Utils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
import com.google.android.material.checkbox.MaterialCheckBox;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
@@ -225,7 +224,7 @@ class SimpleTimetableAdapter extends RecyclerView.Adapter<SimpleTimetableAdapter
|
||||
LayoutInflater.from(itemView.getContext()).inflate(R.layout.item_timetable_closed_hours, closedHost, false);
|
||||
closedHost.addView(
|
||||
span, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
|
||||
Utils.dimen(closedHost.getContext(), R.dimen.editor_height_closed)));
|
||||
UiUtils.dimen(closedHost.getContext(), R.dimen.editor_height_closed)));
|
||||
closedHours[i] = span;
|
||||
final int finalI = i;
|
||||
span.findViewById(R.id.iv__remove_closed)
|
||||
|
||||
@@ -10,7 +10,7 @@ import app.organicmaps.MwmApplication;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.dialog.EditTextDialogFragment;
|
||||
import app.organicmaps.sdk.editor.data.LocalizedStreet;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import com.google.android.material.radiobutton.MaterialRadioButton;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ import androidx.fragment.app.FragmentActivity;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.base.BaseMwmFragment;
|
||||
import app.organicmaps.sdk.editor.OpeningHours;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
|
||||
|
||||
@@ -7,12 +7,15 @@ import android.text.util.Linkify;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.annotation.IdRes;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.view.ViewCompat;
|
||||
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
|
||||
import app.organicmaps.BuildConfig;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.base.BaseMwmFragment;
|
||||
@@ -24,8 +27,6 @@ import app.organicmaps.util.Graphics;
|
||||
import app.organicmaps.util.SharingUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
import app.organicmaps.util.WindowInsetUtils.ScrollableContentInsetsListener;
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
|
||||
public class HelpFragment extends BaseMwmFragment implements View.OnClickListener
|
||||
{
|
||||
@@ -34,7 +35,15 @@ public class HelpFragment extends BaseMwmFragment implements View.OnClickListene
|
||||
|
||||
private void setupItem(@IdRes int id, boolean tint, @NonNull View frame)
|
||||
{
|
||||
final TextView view = frame.findViewById(id);
|
||||
final MaterialTextView view = frame.findViewById(id);
|
||||
view.setOnClickListener(this);
|
||||
if (tint)
|
||||
Graphics.tint(view);
|
||||
}
|
||||
|
||||
private void setupButton(@IdRes int id, boolean tint, @NonNull View frame)
|
||||
{
|
||||
final MaterialButton view = frame.findViewById(id);
|
||||
view.setOnClickListener(this);
|
||||
if (tint)
|
||||
Graphics.tint(view);
|
||||
@@ -43,7 +52,7 @@ public class HelpFragment extends BaseMwmFragment implements View.OnClickListene
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
|
||||
{
|
||||
mDonateUrl = Utils.getDonateUrl(requireContext());
|
||||
mDonateUrl = Config.getDonateUrl(requireContext());
|
||||
View root = inflater.inflate(R.layout.about, container, false);
|
||||
|
||||
((MaterialTextView) root.findViewById(R.id.version)).setText(BuildConfig.VERSION_NAME);
|
||||
@@ -70,7 +79,7 @@ public class HelpFragment extends BaseMwmFragment implements View.OnClickListene
|
||||
setupItem(R.id.mastodon, false, root);
|
||||
setupItem(R.id.openstreetmap, true, root);
|
||||
setupItem(R.id.faq, true, root);
|
||||
setupItem(R.id.report, isLandscape, root);
|
||||
setupButton(R.id.report, isLandscape, root);
|
||||
setupItem(R.id.copyright, false, root);
|
||||
|
||||
final MaterialTextView supportUsView = root.findViewById(R.id.support_us);
|
||||
@@ -86,7 +95,7 @@ public class HelpFragment extends BaseMwmFragment implements View.OnClickListene
|
||||
{
|
||||
/*donateView.setCompoundDrawablesRelativeWithIntrinsicBounds(R.drawable.ic_donate, 0,
|
||||
R.drawable.ic_donate, 0);*/
|
||||
setupItem(R.id.donate, isLandscape, root);
|
||||
setupButton(R.id.donate, isLandscape, root);
|
||||
}
|
||||
|
||||
if (BuildConfig.REVIEW_URL.isEmpty())
|
||||
|
||||
@@ -8,7 +8,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.util.SharedPropertiesUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import java.util.List;
|
||||
|
||||
public class LayersAdapter extends RecyclerView.Adapter<LayerHolder>
|
||||
|
||||
@@ -36,9 +36,8 @@ import app.organicmaps.sdk.maplayer.subway.SubwayManager;
|
||||
import app.organicmaps.sdk.maplayer.traffic.TrafficManager;
|
||||
import app.organicmaps.sdk.routing.RoutingController;
|
||||
import app.organicmaps.sdk.util.Config;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.util.ThemeUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
import app.organicmaps.util.WindowInsetUtils;
|
||||
import app.organicmaps.widget.menu.MyPositionButton;
|
||||
import app.organicmaps.widget.placepage.PlacePageViewModel;
|
||||
@@ -215,7 +214,7 @@ public class MapButtonsController extends Fragment
|
||||
// helpButton.setImageResource(R.drawable.ic_launcher);
|
||||
// }
|
||||
// // Keep this button colorful in normal theme.
|
||||
// if (!ThemeUtils.isNightTheme())
|
||||
// if (!ThemeUtils.isNightTheme(requireContext()))
|
||||
// helpButton.getDrawable().setTintList(null);
|
||||
}
|
||||
else if (leftButtonView != null)
|
||||
|
||||
@@ -16,9 +16,9 @@ import androidx.annotation.StringRes;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.routing.RoutingController;
|
||||
import app.organicmaps.sdk.search.SearchEngine;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.concurrency.UiThread;
|
||||
import app.organicmaps.util.Graphics;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
|
||||
public class SearchWheel implements View.OnClickListener
|
||||
{
|
||||
|
||||
@@ -10,8 +10,8 @@ import android.widget.RelativeLayout;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.content.res.ResourcesCompat;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.util.ThemeUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import java.util.Objects;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
@@ -43,20 +43,22 @@ public class TrafficButton
|
||||
void turnOff()
|
||||
{
|
||||
stopWaitingAnimation();
|
||||
mButton.setImageResource(ThemeUtils.isNightTheme() ? R.drawable.ic_traffic_on_night : R.drawable.ic_traffic_on);
|
||||
mButton.setImageResource(ThemeUtils.isNightTheme(mButton.getContext()) ? R.drawable.ic_traffic_on_night
|
||||
: R.drawable.ic_traffic_on);
|
||||
}
|
||||
|
||||
void turnOn()
|
||||
{
|
||||
stopWaitingAnimation();
|
||||
mButton.setImageResource(ThemeUtils.isNightTheme() ? R.drawable.ic_traffic_on_night : R.drawable.ic_traffic_on);
|
||||
mButton.setImageResource(ThemeUtils.isNightTheme(mButton.getContext()) ? R.drawable.ic_traffic_on_night
|
||||
: R.drawable.ic_traffic_on);
|
||||
}
|
||||
|
||||
void markAsOutdated()
|
||||
{
|
||||
stopWaitingAnimation();
|
||||
mButton.setImageResource(ThemeUtils.isNightTheme() ? R.drawable.ic_traffic_outdated_night
|
||||
: R.drawable.ic_traffic_outdated);
|
||||
mButton.setImageResource(ThemeUtils.isNightTheme(mButton.getContext()) ? R.drawable.ic_traffic_outdated_night
|
||||
: R.drawable.ic_traffic_outdated);
|
||||
}
|
||||
|
||||
void startWaitingAnimation()
|
||||
|
||||
@@ -12,14 +12,14 @@ import android.widget.ExpandableListView;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.adapter.DisabledChildSimpleExpandableListAdapter;
|
||||
import app.organicmaps.base.BaseMwmDialogFragment;
|
||||
import app.organicmaps.sdk.downloader.CountryItem;
|
||||
import app.organicmaps.sdk.routing.RoutingController;
|
||||
import app.organicmaps.sdk.util.StringUtils;
|
||||
import app.organicmaps.sdk.util.Utils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
import java.util.ArrayList;
|
||||
@@ -128,7 +128,7 @@ abstract class BaseRoutingErrorDialogFragment extends BaseMwmDialogFragment
|
||||
|
||||
UiUtils.waitLayout(listView, () -> {
|
||||
final int width = listView.getWidth();
|
||||
final int indicatorWidth = Utils.dimen(requireContext(), R.dimen.margin_quadruple);
|
||||
final int indicatorWidth = UiUtils.dimen(requireContext(), R.dimen.margin_quadruple);
|
||||
listView.setIndicatorBounds(width - indicatorWidth, width);
|
||||
listView.setIndicatorBoundsRelative(width - indicatorWidth, width);
|
||||
});
|
||||
|
||||
@@ -16,7 +16,7 @@ import app.organicmaps.sdk.bookmarks.data.MapObject;
|
||||
import app.organicmaps.sdk.routing.RouteMarkData;
|
||||
import app.organicmaps.sdk.routing.RouteMarkType;
|
||||
import app.organicmaps.sdk.util.StringUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import com.google.android.material.imageview.ShapeableImageView;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
import java.util.ArrayList;
|
||||
@@ -94,7 +94,7 @@ public class ManageRouteAdapter extends RecyclerView.Adapter<ManageRouteAdapter.
|
||||
if (mRoutePoints.get(position).mIsMyPosition)
|
||||
{
|
||||
// My position point.
|
||||
title = mContext.getString(app.organicmaps.sdk.R.string.core_my_position);
|
||||
title = mContext.getString(R.string.core_my_position);
|
||||
|
||||
if (mRoutePoints.get(position).mPointType != RouteMarkType.Start)
|
||||
subtitle = mRoutePoints.get(position).mTitle;
|
||||
|
||||
@@ -23,7 +23,7 @@ import app.organicmaps.sdk.Framework;
|
||||
import app.organicmaps.sdk.bookmarks.data.MapObject;
|
||||
import app.organicmaps.sdk.routing.RouteMarkData;
|
||||
import app.organicmaps.sdk.routing.RoutingController;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import com.google.android.material.bottomsheet.BottomSheetBehavior;
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialog;
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package app.organicmaps.routing;
|
||||
|
||||
import static app.organicmaps.sdk.util.Utils.dimen;
|
||||
|
||||
import android.location.Location;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
@@ -23,7 +21,7 @@ import app.organicmaps.sdk.routing.CarDirection;
|
||||
import app.organicmaps.sdk.routing.RoutingController;
|
||||
import app.organicmaps.sdk.routing.RoutingInfo;
|
||||
import app.organicmaps.sdk.util.StringUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
import app.organicmaps.util.WindowInsetUtils;
|
||||
import app.organicmaps.widget.LanesView;
|
||||
@@ -168,7 +166,7 @@ public class NavigationController implements TrafficManager.TrafficCallback, Nav
|
||||
UiUtils.visibleIf(hasStreet, mStreetFrame);
|
||||
if (!TextUtils.isEmpty(info.nextStreet))
|
||||
mNextStreet.setText(info.nextStreet);
|
||||
int margin = dimen(mFrame.getContext(), R.dimen.nav_frame_padding);
|
||||
int margin = UiUtils.dimen(mFrame.getContext(), R.dimen.nav_frame_padding);
|
||||
if (hasStreet)
|
||||
margin += mStreetFrame.getHeight();
|
||||
mMapButtonsViewModel.setTopButtonsMarginTop(margin);
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package app.organicmaps.routing;
|
||||
|
||||
import static app.organicmaps.sdk.util.Utils.dimen;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
@@ -39,9 +37,9 @@ import app.organicmaps.sdk.routing.RoutingInfo;
|
||||
import app.organicmaps.sdk.routing.TransitRouteInfo;
|
||||
import app.organicmaps.sdk.routing.TransitStepInfo;
|
||||
import app.organicmaps.sdk.util.Distance;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.util.Graphics;
|
||||
import app.organicmaps.util.ThemeUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
import app.organicmaps.widget.recycler.DotDividerItemDecoration;
|
||||
import app.organicmaps.widget.recycler.MultilineLayoutManager;
|
||||
@@ -347,17 +345,16 @@ final class RoutingBottomMenuController implements View.OnClickListener
|
||||
|
||||
UiUtils.hide(mTimeVehicle);
|
||||
|
||||
int chartWidth = dimen(mContext, R.dimen.altitude_chart_image_width);
|
||||
int chartHeight = dimen(mContext, R.dimen.altitude_chart_image_height);
|
||||
int chartWidth = UiUtils.dimen(mContext, R.dimen.altitude_chart_image_width);
|
||||
int chartHeight = UiUtils.dimen(mContext, R.dimen.altitude_chart_image_height);
|
||||
Framework.RouteAltitudeLimits limits = new Framework.RouteAltitudeLimits();
|
||||
Bitmap bm = Framework.generateRouteAltitudeChart(chartWidth, chartHeight, limits);
|
||||
if (bm != null)
|
||||
{
|
||||
mAltitudeChart.setImageBitmap(bm);
|
||||
UiUtils.show(mAltitudeChart);
|
||||
final String unit = limits.isMetricUnits
|
||||
? mAltitudeDifference.getResources().getString(app.organicmaps.sdk.R.string.m)
|
||||
: mAltitudeDifference.getResources().getString(app.organicmaps.sdk.R.string.ft);
|
||||
final String unit = limits.isMetricUnits ? mAltitudeDifference.getResources().getString(R.string.m)
|
||||
: mAltitudeDifference.getResources().getString(R.string.ft);
|
||||
mAltitudeDifference.setText("↗ " + limits.totalAscentString + " " + unit + " ↘ " + limits.totalDescentString + " "
|
||||
+ unit);
|
||||
UiUtils.show(mAltitudeDifference);
|
||||
|
||||
@@ -14,10 +14,9 @@ import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.fragment.app.FragmentFactory;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.downloader.MapManagerHelper;
|
||||
import app.organicmaps.sdk.downloader.CountryItem;
|
||||
import app.organicmaps.sdk.downloader.MapManager;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
|
||||
public class RoutingErrorDialogFragment extends BaseRoutingErrorDialogFragment
|
||||
@@ -109,7 +108,7 @@ public class RoutingErrorDialogFragment extends BaseRoutingErrorDialogFragment
|
||||
}
|
||||
}
|
||||
|
||||
MapManagerHelper.warnOn3g(requireActivity(), size, () -> {
|
||||
MapManager.warnOn3g(requireActivity(), size, () -> {
|
||||
final FragmentManager manager = requireActivity().getSupportFragmentManager();
|
||||
RoutingMapsDownloadFragment downloader =
|
||||
RoutingMapsDownloadFragment.create(manager.getFragmentFactory(), getAppContextOrThrow(), mMapsArray);
|
||||
|
||||
@@ -9,11 +9,10 @@ import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.fragment.app.FragmentFactory;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.downloader.MapManagerHelper;
|
||||
import app.organicmaps.sdk.downloader.CountryItem;
|
||||
import app.organicmaps.sdk.downloader.MapManager;
|
||||
import app.organicmaps.sdk.routing.RoutingController;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.widget.WheelProgressView;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
@@ -41,7 +40,7 @@ public class RoutingMapsDownloadFragment extends BaseRoutingErrorDialogFragment
|
||||
mMapsArray[i] = item.id;
|
||||
}
|
||||
|
||||
MapManagerHelper.startDownload(mMapsArray);
|
||||
MapManager.startDownload(mMapsArray);
|
||||
}
|
||||
|
||||
private View setupFrame(View frame)
|
||||
|
||||
@@ -21,8 +21,8 @@ import app.organicmaps.sdk.routing.RoutingController;
|
||||
import app.organicmaps.sdk.routing.RoutingInfo;
|
||||
import app.organicmaps.sdk.routing.RoutingOptions;
|
||||
import app.organicmaps.sdk.routing.TransitRouteInfo;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.settings.DrivingOptionsActivity;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.util.WindowInsetUtils.PaddingInsetsListener;
|
||||
import app.organicmaps.widget.RoutingToolbarButton;
|
||||
import app.organicmaps.widget.ToolbarController;
|
||||
@@ -141,8 +141,7 @@ public class RoutingPlanController extends ToolbarController
|
||||
setupRouterButton(R.id.vehicle, R.drawable.ic_car, this::onVehicleModeSelected);
|
||||
setupRouterButton(R.id.pedestrian, R.drawable.ic_pedestrian, this::onPedestrianModeSelected);
|
||||
// setupRouterButton(R.id.taxi, R.drawable.ic_taxi, this::onTaxiModeSelected);
|
||||
setupRouterButton(R.id.transit, app.organicmaps.sdk.R.drawable.ic_route_planning_metro_40px,
|
||||
this::onTransitModeSelected);
|
||||
setupRouterButton(R.id.transit, R.drawable.ic_route_planning_metro_40px, this::onTransitModeSelected);
|
||||
setupRouterButton(R.id.bicycle, R.drawable.ic_bike, this::onBicycleModeSelected);
|
||||
setupRouterButton(R.id.ruler, app.organicmaps.sdk.R.drawable.ic_ruler_route, this::onRulerModeSelected);
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import app.organicmaps.MwmActivity;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
|
||||
public class RoutingPlanInplaceController extends RoutingPlanController
|
||||
{
|
||||
|
||||
@@ -90,7 +90,7 @@ public class TransitStepView extends View implements MultilineLayoutManager.Sque
|
||||
{
|
||||
mDrawable = null;
|
||||
mText = info.getDistance() + " " + info.getDistanceUnits();
|
||||
mTextPaint.setColor(ThemeUtils.isDefaultTheme() ? Color.BLACK : Color.WHITE);
|
||||
mTextPaint.setColor(ThemeUtils.isDefaultTheme(getContext()) ? Color.BLACK : Color.WHITE);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -17,7 +17,7 @@ public class DownloadResourcesLegacyActivity
|
||||
{
|
||||
// Called by JNI.
|
||||
@Keep
|
||||
void onProgress(int bytesDownloaded);
|
||||
void onProgress(int percent);
|
||||
|
||||
// Called by JNI.
|
||||
@Keep
|
||||
@@ -6,11 +6,13 @@ import android.view.MotionEvent;
|
||||
import android.view.Surface;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import app.organicmaps.BuildConfig;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.display.DisplayType;
|
||||
import app.organicmaps.sdk.location.LocationHelper;
|
||||
import app.organicmaps.sdk.util.Config;
|
||||
import app.organicmaps.sdk.util.ROMUtils;
|
||||
import app.organicmaps.sdk.util.Utils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.concurrency.UiThread;
|
||||
import app.organicmaps.sdk.util.log.Logger;
|
||||
|
||||
@@ -100,9 +102,9 @@ public final class Map
|
||||
{
|
||||
final int x = offsetX < 0 ? mCurrentCompassOffsetX : offsetX;
|
||||
final int y = offsetY < 0 ? mCurrentCompassOffsetY : offsetY;
|
||||
final int navPadding = Utils.dimen(context, R.dimen.nav_frame_padding);
|
||||
final int marginX = Utils.dimen(context, R.dimen.margin_compass) + navPadding;
|
||||
final int marginY = Utils.dimen(context, R.dimen.margin_compass_top) + navPadding;
|
||||
final int navPadding = UiUtils.dimen(context, R.dimen.nav_frame_padding);
|
||||
final int marginX = UiUtils.dimen(context, R.dimen.margin_compass) + navPadding;
|
||||
final int marginY = UiUtils.dimen(context, R.dimen.margin_compass_top) + navPadding;
|
||||
nativeSetupWidget(WIDGET_COMPASS, mWidth - x - marginX, y + marginY, ANCHOR_CENTER);
|
||||
if (forceRedraw && mSurfaceCreated)
|
||||
nativeApplyWidgets();
|
||||
@@ -146,7 +148,7 @@ public final class Map
|
||||
{
|
||||
assert mLocationHelper != null : "LocationHelper must be initialized before calling onSurfaceCreated";
|
||||
|
||||
if (isThemeChangingProcess())
|
||||
if (isThemeChangingProcess(context))
|
||||
{
|
||||
Logger.d(TAG, "Theme changing process, skip 'onSurfaceCreated' callback");
|
||||
return;
|
||||
@@ -179,7 +181,7 @@ public final class Map
|
||||
setupWidgets(context, surfaceFrame.width(), surfaceFrame.height());
|
||||
|
||||
final boolean firstStart = mLocationHelper.isInFirstRun();
|
||||
if (!nativeCreateEngine(surface, surfaceDpi, firstStart, mLaunchByDeepLink, Config.getVersionCode(),
|
||||
if (!nativeCreateEngine(surface, surfaceDpi, firstStart, mLaunchByDeepLink, BuildConfig.VERSION_CODE,
|
||||
ROMUtils.isCustomROM()))
|
||||
{
|
||||
if (mCallbackUnsupported != null)
|
||||
@@ -201,7 +203,7 @@ public final class Map
|
||||
public void onSurfaceChanged(final Context context, final Surface surface, Rect surfaceFrame,
|
||||
boolean isSurfaceCreating)
|
||||
{
|
||||
if (isThemeChangingProcess())
|
||||
if (isThemeChangingProcess(context))
|
||||
{
|
||||
Logger.d(TAG, "Theme changing process, skip 'onSurfaceChanged' callback");
|
||||
return;
|
||||
@@ -263,7 +265,7 @@ public final class Map
|
||||
|
||||
public void onPause(final Context context)
|
||||
{
|
||||
mUiThemeOnPause = Config.UiTheme.getCurrent();
|
||||
mUiThemeOnPause = Config.getCurrentUiTheme(context);
|
||||
|
||||
// Pause/Resume can be called without surface creation/destroy.
|
||||
if (mSurfaceAttached)
|
||||
@@ -340,37 +342,37 @@ public final class Map
|
||||
updateBottomWidgetsOffset(context, mBottomWidgetOffsetX, mBottomWidgetOffsetY);
|
||||
if (mDisplayType == DisplayType.Device)
|
||||
{
|
||||
nativeSetupWidget(WIDGET_SCALE_FPS_LABEL, Utils.dimen(context, R.dimen.margin_base),
|
||||
Utils.dimen(context, R.dimen.margin_base) * 2, ANCHOR_LEFT_TOP);
|
||||
nativeSetupWidget(WIDGET_SCALE_FPS_LABEL, UiUtils.dimen(context, R.dimen.margin_base),
|
||||
UiUtils.dimen(context, R.dimen.margin_base) * 2, ANCHOR_LEFT_TOP);
|
||||
updateCompassOffset(context, mCurrentCompassOffsetX, mCurrentCompassOffsetY, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
nativeSetupWidget(WIDGET_SCALE_FPS_LABEL, (float) mWidth / 2 + Utils.dimen(context, R.dimen.margin_base) * 2,
|
||||
Utils.dimen(context, R.dimen.margin_base), ANCHOR_LEFT_TOP);
|
||||
nativeSetupWidget(WIDGET_SCALE_FPS_LABEL, (float) mWidth / 2 + UiUtils.dimen(context, R.dimen.margin_base) * 2,
|
||||
UiUtils.dimen(context, R.dimen.margin_base), ANCHOR_LEFT_TOP);
|
||||
updateCompassOffset(context, mWidth, mCurrentCompassOffsetY, true);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateRulerOffset(final Context context, int offsetX, int offsetY)
|
||||
{
|
||||
nativeSetupWidget(WIDGET_RULER, Utils.dimen(context, R.dimen.margin_ruler) + offsetX,
|
||||
mHeight - Utils.dimen(context, R.dimen.margin_ruler) - offsetY, ANCHOR_LEFT_BOTTOM);
|
||||
nativeSetupWidget(WIDGET_RULER, UiUtils.dimen(context, R.dimen.margin_ruler) + offsetX,
|
||||
mHeight - UiUtils.dimen(context, R.dimen.margin_ruler) - offsetY, ANCHOR_LEFT_BOTTOM);
|
||||
if (mSurfaceCreated)
|
||||
nativeApplyWidgets();
|
||||
}
|
||||
|
||||
private void updateAttributionOffset(final Context context, int offsetX, int offsetY)
|
||||
{
|
||||
nativeSetupWidget(WIDGET_COPYRIGHT, Utils.dimen(context, R.dimen.margin_ruler) + offsetX,
|
||||
mHeight - Utils.dimen(context, R.dimen.margin_ruler) - offsetY, ANCHOR_LEFT_BOTTOM);
|
||||
nativeSetupWidget(WIDGET_COPYRIGHT, UiUtils.dimen(context, R.dimen.margin_ruler) + offsetX,
|
||||
mHeight - UiUtils.dimen(context, R.dimen.margin_ruler) - offsetY, ANCHOR_LEFT_BOTTOM);
|
||||
if (mSurfaceCreated)
|
||||
nativeApplyWidgets();
|
||||
}
|
||||
|
||||
private boolean isThemeChangingProcess()
|
||||
private boolean isThemeChangingProcess(final Context context)
|
||||
{
|
||||
return mUiThemeOnPause != null && !mUiThemeOnPause.equals(Config.UiTheme.getCurrent());
|
||||
return mUiThemeOnPause != null && !mUiThemeOnPause.equals(Config.getCurrentUiTheme(context));
|
||||
}
|
||||
|
||||
// Engine
|
||||
@@ -6,12 +6,12 @@ import androidx.annotation.NonNull;
|
||||
import androidx.lifecycle.DefaultLifecycleObserver;
|
||||
import androidx.lifecycle.LifecycleOwner;
|
||||
import androidx.lifecycle.ProcessLifecycleOwner;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.bookmarks.data.BookmarkManager;
|
||||
import app.organicmaps.sdk.bookmarks.data.Icon;
|
||||
import app.organicmaps.sdk.downloader.Android7RootCertificateWorkaround;
|
||||
import app.organicmaps.sdk.editor.OsmOAuth;
|
||||
import app.organicmaps.sdk.location.LocationHelper;
|
||||
import app.organicmaps.sdk.location.LocationProviderFactory;
|
||||
import app.organicmaps.sdk.location.SensorHelper;
|
||||
import app.organicmaps.sdk.maplayer.isolines.IsolinesManager;
|
||||
import app.organicmaps.sdk.maplayer.subway.SubwayManager;
|
||||
@@ -23,6 +23,7 @@ import app.organicmaps.sdk.sound.TtsPlayer;
|
||||
import app.organicmaps.sdk.util.Config;
|
||||
import app.organicmaps.sdk.util.SharedPropertiesUtils;
|
||||
import app.organicmaps.sdk.util.StorageUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
import app.organicmaps.sdk.util.log.Logger;
|
||||
import app.organicmaps.sdk.util.log.LogsManager;
|
||||
import java.io.IOException;
|
||||
@@ -31,9 +32,6 @@ public final class OrganicMaps implements DefaultLifecycleObserver
|
||||
{
|
||||
private static final String TAG = OrganicMaps.class.getSimpleName();
|
||||
|
||||
@NonNull
|
||||
private final String mFlavor;
|
||||
|
||||
@NonNull
|
||||
private final Context mContext;
|
||||
|
||||
@@ -77,13 +75,11 @@ public final class OrganicMaps implements DefaultLifecycleObserver
|
||||
return mIsolinesManager;
|
||||
}
|
||||
|
||||
public OrganicMaps(@NonNull Context context, @NonNull String flavor, @NonNull String applicationId, int versionCode,
|
||||
@NonNull String versionName, @NonNull String fileProviderAuthority,
|
||||
@NonNull LocationProviderFactory locationProviderFactory)
|
||||
public OrganicMaps(@NonNull Context context)
|
||||
{
|
||||
mFlavor = flavor;
|
||||
mContext = context.getApplicationContext();
|
||||
mPreferences = mContext.getSharedPreferences(context.getString(R.string.pref_file_name), Context.MODE_PRIVATE);
|
||||
mPreferences = mContext.getSharedPreferences(context.getString(app.organicmaps.sdk.R.string.pref_file_name),
|
||||
Context.MODE_PRIVATE);
|
||||
|
||||
// Set configuration directory as early as possible.
|
||||
// Other methods may explicitly use Config, which requires settingsDir to be set.
|
||||
@@ -93,7 +89,7 @@ public final class OrganicMaps implements DefaultLifecycleObserver
|
||||
Logger.d(TAG, "Settings path = " + settingsPath);
|
||||
nativeSetSettingsDir(settingsPath);
|
||||
|
||||
Config.init(mContext, mPreferences, flavor, applicationId, versionCode, versionName, fileProviderAuthority);
|
||||
Config.init(mContext, mPreferences);
|
||||
OsmOAuth.init(mPreferences);
|
||||
SharedPropertiesUtils.init(mPreferences);
|
||||
LogsManager.INSTANCE.initFileLogging(mContext, mPreferences);
|
||||
@@ -103,7 +99,7 @@ public final class OrganicMaps implements DefaultLifecycleObserver
|
||||
Icon.loadDefaultIcons(mContext.getResources(), mContext.getPackageName());
|
||||
|
||||
mSensorHelper = new SensorHelper(mContext);
|
||||
mLocationHelper = new LocationHelper(mContext, mSensorHelper, locationProviderFactory);
|
||||
mLocationHelper = new LocationHelper(mContext, mSensorHelper);
|
||||
mIsolinesManager = new IsolinesManager();
|
||||
mSubwayManager = new SubwayManager(mContext);
|
||||
}
|
||||
@@ -163,8 +159,8 @@ public final class OrganicMaps implements DefaultLifecycleObserver
|
||||
// external storage is damaged or not available (read-only).
|
||||
createPlatformDirectories(writablePath, privatePath, tempPath);
|
||||
|
||||
nativeInitPlatform(mContext, apkPath, writablePath, privatePath, tempPath, mFlavor, BuildConfig.BUILD_TYPE,
|
||||
/* isTablet */ false);
|
||||
nativeInitPlatform(mContext, apkPath, writablePath, privatePath, tempPath, app.organicmaps.BuildConfig.FLAVOR,
|
||||
app.organicmaps.BuildConfig.BUILD_TYPE, UiUtils.isTablet(mContext));
|
||||
Config.setStoragePath(writablePath);
|
||||
Config.setStatisticsEnabled(SharedPropertiesUtils.isStatisticsEnabled());
|
||||
|
||||
@@ -2,7 +2,6 @@ package app.organicmaps.sdk.bookmarks.data;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.os.Parcel;
|
||||
import androidx.annotation.ColorInt;
|
||||
import androidx.annotation.IntRange;
|
||||
import androidx.annotation.Keep;
|
||||
import androidx.annotation.NonNull;
|
||||
@@ -111,14 +110,6 @@ public class Bookmark extends MapObject
|
||||
mCategoryId = catId;
|
||||
}
|
||||
|
||||
public void setIconColor(@ColorInt int color)
|
||||
{
|
||||
Icon icon = new Icon(PredefinedColors.getPredefinedColorIndex(color),
|
||||
BookmarkManager.INSTANCE.getBookmarkIcon(mBookmarkId));
|
||||
BookmarkManager.INSTANCE.notifyParametersUpdating(this, getName(), icon, getBookmarkDescription());
|
||||
mIcon = icon;
|
||||
}
|
||||
|
||||
public void setParams(@NonNull String title, @Nullable Icon icon, @NonNull String description)
|
||||
{
|
||||
BookmarkManager.INSTANCE.notifyParametersUpdating(this, title, icon, description);
|
||||
@@ -162,10 +162,10 @@ public class BookmarkCategory implements Parcelable
|
||||
|
||||
public enum AccessRules
|
||||
{
|
||||
ACCESS_RULES_LOCAL(R.string.not_shared, R.drawable.ic_lock),
|
||||
ACCESS_RULES_PUBLIC(R.string.public_access, R.drawable.ic_public_inline),
|
||||
ACCESS_RULES_DIRECT_LINK(R.string.limited_access, R.drawable.ic_link_inline),
|
||||
ACCESS_RULES_AUTHOR_ONLY(R.string.access_rules_author_only, R.drawable.ic_lock);
|
||||
ACCESS_RULES_LOCAL(app.organicmaps.R.string.not_shared, R.drawable.ic_lock),
|
||||
ACCESS_RULES_PUBLIC(app.organicmaps.R.string.public_access, R.drawable.ic_public_inline),
|
||||
ACCESS_RULES_DIRECT_LINK(app.organicmaps.R.string.limited_access, R.drawable.ic_link_inline),
|
||||
ACCESS_RULES_AUTHOR_ONLY(app.organicmaps.R.string.access_rules_author_only, R.drawable.ic_lock);
|
||||
|
||||
private final int mResId;
|
||||
private final int mDrawableResId;
|
||||
@@ -263,12 +263,6 @@ public enum BookmarkManager {
|
||||
return nativeUpdateBookmarkPlacePage(bmkId);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public void updateTrackPlacePage()
|
||||
{
|
||||
nativeUpdateTrackPlacePage();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public BookmarkInfo getBookmarkInfo(long bmkId)
|
||||
{
|
||||
@@ -735,9 +729,9 @@ public enum BookmarkManager {
|
||||
return nativeGetElevationCurPositionDistance(trackId);
|
||||
}
|
||||
|
||||
public void setElevationActivePoint(long trackId, double distance, ElevationInfo.Point point)
|
||||
public void setElevationActivePoint(long trackId, double distance)
|
||||
{
|
||||
nativeSetElevationActivePoint(trackId, distance, point.getLatitude(), point.getLongitude());
|
||||
nativeSetElevationActivePoint(trackId, distance);
|
||||
}
|
||||
|
||||
public double getElevationActivePointDistance(long trackId)
|
||||
@@ -745,14 +739,9 @@ public enum BookmarkManager {
|
||||
return nativeGetElevationActivePointDistance(trackId);
|
||||
}
|
||||
|
||||
private static native ElevationInfo.Point nativeGetElevationActivePointCoordinates(long trackId);
|
||||
|
||||
@Nullable
|
||||
private native Bookmark nativeUpdateBookmarkPlacePage(long bmkId);
|
||||
|
||||
@Nullable
|
||||
private native void nativeUpdateTrackPlacePage();
|
||||
|
||||
@Nullable
|
||||
private native BookmarkInfo nativeGetBookmarkInfo(long bmkId);
|
||||
|
||||
@@ -903,23 +892,14 @@ public enum BookmarkManager {
|
||||
|
||||
public static native void nativeRemoveElevationCurrentPositionChangedListener();
|
||||
|
||||
private static native void nativeSetElevationActivePoint(long trackId, double distanceInMeters, double latitude,
|
||||
double longitude);
|
||||
private static native void nativeSetElevationActivePoint(long trackId, double distanceInMeters);
|
||||
|
||||
private static native double nativeGetElevationActivePointDistance(long trackId);
|
||||
|
||||
public ElevationInfo.Point getElevationActivePointCoordinates(long trackId)
|
||||
{
|
||||
return nativeGetElevationActivePointCoordinates(trackId);
|
||||
}
|
||||
|
||||
private static native void nativeSetElevationActiveChangedListener();
|
||||
|
||||
public static native void nativeRemoveElevationActiveChangedListener();
|
||||
|
||||
public static native ElevationInfo nativeGetTrackElevationInfo(long trackId);
|
||||
|
||||
public static native TrackStatistics nativeGetTrackStatistics(long trackId);
|
||||
public interface BookmarksLoadingListener
|
||||
{
|
||||
default void onBookmarksLoadingStarted() {}
|
||||
@@ -15,19 +15,42 @@ import java.util.List;
|
||||
@SuppressWarnings("unused")
|
||||
public class ElevationInfo implements PlacePageData
|
||||
{
|
||||
private final long mId;
|
||||
@NonNull
|
||||
private final String mName;
|
||||
@NonNull
|
||||
private final List<Point> mPoints;
|
||||
private final int mAscent;
|
||||
private final int mDescent;
|
||||
private final int mMinAltitude;
|
||||
private final int mMaxAltitude;
|
||||
private final int mDifficulty;
|
||||
private final long mDuration;
|
||||
|
||||
public ElevationInfo(@NonNull Point[] points, int difficulty)
|
||||
public ElevationInfo(long trackId, @NonNull String name, @NonNull Point[] points, int ascent, int descent,
|
||||
int minAltitude, int maxAltitude, int difficulty, long duration)
|
||||
{
|
||||
mId = trackId;
|
||||
mName = name;
|
||||
mPoints = Arrays.asList(points);
|
||||
mAscent = ascent;
|
||||
mDescent = descent;
|
||||
mMinAltitude = minAltitude;
|
||||
mMaxAltitude = maxAltitude;
|
||||
mDifficulty = difficulty;
|
||||
mDuration = duration;
|
||||
}
|
||||
|
||||
protected ElevationInfo(Parcel in)
|
||||
{
|
||||
mId = in.readLong();
|
||||
mName = in.readString();
|
||||
mAscent = in.readInt();
|
||||
mDescent = in.readInt();
|
||||
mMinAltitude = in.readInt();
|
||||
mMaxAltitude = in.readInt();
|
||||
mDifficulty = in.readInt();
|
||||
mDuration = in.readLong();
|
||||
mPoints = readPoints(in);
|
||||
}
|
||||
|
||||
@@ -39,17 +62,53 @@ public class ElevationInfo implements PlacePageData
|
||||
return points;
|
||||
}
|
||||
|
||||
public long getId()
|
||||
{
|
||||
return mId;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String getName()
|
||||
{
|
||||
return mName;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public List<Point> getPoints()
|
||||
{
|
||||
return Collections.unmodifiableList(mPoints);
|
||||
}
|
||||
|
||||
public int getAscent()
|
||||
{
|
||||
return mAscent;
|
||||
}
|
||||
|
||||
public int getDescent()
|
||||
{
|
||||
return mDescent;
|
||||
}
|
||||
|
||||
public int getMinAltitude()
|
||||
{
|
||||
return mMinAltitude;
|
||||
}
|
||||
|
||||
public int getMaxAltitude()
|
||||
{
|
||||
return mMaxAltitude;
|
||||
}
|
||||
|
||||
public int getDifficulty()
|
||||
{
|
||||
return mDifficulty;
|
||||
}
|
||||
|
||||
public long getDuration()
|
||||
{
|
||||
return mDuration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents()
|
||||
{
|
||||
@@ -59,7 +118,14 @@ public class ElevationInfo implements PlacePageData
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags)
|
||||
{
|
||||
dest.writeLong(mId);
|
||||
dest.writeString(mName);
|
||||
dest.writeInt(mAscent);
|
||||
dest.writeInt(mDescent);
|
||||
dest.writeInt(mMinAltitude);
|
||||
dest.writeInt(mMaxAltitude);
|
||||
dest.writeInt(mDifficulty);
|
||||
dest.writeLong(mDuration);
|
||||
// All collections are deserialized AFTER non-collection and primitive type objects,
|
||||
// so collections must be always serialized at the end.
|
||||
dest.writeTypedList(mPoints);
|
||||
@@ -72,23 +138,17 @@ public class ElevationInfo implements PlacePageData
|
||||
{
|
||||
private final double mDistance;
|
||||
private final int mAltitude;
|
||||
private final double mLatitude;
|
||||
private final double mLongitude;
|
||||
|
||||
public Point(double distance, int altitude, double latitude, double longitude)
|
||||
public Point(double distance, int altitude)
|
||||
{
|
||||
mDistance = distance;
|
||||
mAltitude = altitude;
|
||||
mLatitude = latitude;
|
||||
mLongitude = longitude;
|
||||
}
|
||||
|
||||
protected Point(Parcel in)
|
||||
{
|
||||
mDistance = in.readDouble();
|
||||
mAltitude = in.readInt();
|
||||
mLatitude = in.readDouble();
|
||||
mLongitude = in.readDouble();
|
||||
}
|
||||
|
||||
public static final Creator<Point> CREATOR = new Creator<>() {
|
||||
@@ -115,16 +175,6 @@ public class ElevationInfo implements PlacePageData
|
||||
return mAltitude;
|
||||
}
|
||||
|
||||
public double getLatitude()
|
||||
{
|
||||
return mLatitude;
|
||||
}
|
||||
|
||||
public double getLongitude()
|
||||
{
|
||||
return mLongitude;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents()
|
||||
{
|
||||
@@ -27,7 +27,7 @@ public class FeatureId implements Parcelable
|
||||
};
|
||||
|
||||
@NonNull
|
||||
public static final FeatureId EMPTY = new FeatureId("", -1L, 0);
|
||||
public static final FeatureId EMPTY = new FeatureId("", 0L, 0);
|
||||
|
||||
@NonNull
|
||||
private final String mMwmName;
|
||||
@@ -6,12 +6,11 @@ import android.os.Parcelable;
|
||||
import androidx.annotation.ColorInt;
|
||||
import androidx.annotation.DrawableRes;
|
||||
import androidx.annotation.NonNull;
|
||||
import app.organicmaps.sdk.BuildConfig;
|
||||
import app.organicmaps.sdk.R;
|
||||
import app.organicmaps.BuildConfig;
|
||||
import app.organicmaps.sdk.util.StringUtils;
|
||||
import app.organicmaps.sdk.util.log.Logger;
|
||||
import com.google.common.base.Objects;
|
||||
import dalvik.annotation.optimization.FastNative;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class Icon implements Parcelable
|
||||
{
|
||||
@@ -87,7 +86,7 @@ public class Icon implements Parcelable
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
return Arrays.hashCode(new int[] {mColor, mType});
|
||||
return Objects.hashCode(mColor, mType);
|
||||
}
|
||||
|
||||
public static final Parcelable.Creator<Icon> CREATOR = new Parcelable.Creator<>() {
|
||||
@@ -116,7 +115,7 @@ public class Icon implements Parcelable
|
||||
// Force devs to add an icon for each bookmark type.
|
||||
if (BuildConfig.DEBUG)
|
||||
throw new RuntimeException("Error getting icon for " + name);
|
||||
icons[i] = R.drawable.ic_bookmark_none; // Fallback icon
|
||||
icons[i] = app.organicmaps.sdk.R.drawable.ic_bookmark_none; // Fallback icon
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ import java.util.Objects;
|
||||
public class MapObject implements PlacePageData
|
||||
{
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@IntDef({POI, API_POINT, BOOKMARK, MY_POSITION, SEARCH, TRACK})
|
||||
@IntDef({POI, API_POINT, BOOKMARK, MY_POSITION, SEARCH})
|
||||
public @interface MapObjectType
|
||||
{}
|
||||
|
||||
@@ -34,7 +34,6 @@ public class MapObject implements PlacePageData
|
||||
public static final int BOOKMARK = 2;
|
||||
public static final int MY_POSITION = 3;
|
||||
public static final int SEARCH = 4;
|
||||
public static final int TRACK = 5;
|
||||
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@IntDef({OPENING_MODE_PREVIEW, OPENING_MODE_PREVIEW_PLUS, OPENING_MODE_DETAILS, OPENING_MODE_FULL})
|
||||
@@ -316,11 +315,6 @@ public class MapObject implements PlacePageData
|
||||
return mMapObjectType == BOOKMARK;
|
||||
}
|
||||
|
||||
public final boolean isTrack()
|
||||
{
|
||||
return mMapObjectType == TRACK;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public RoutePointInfo getRoutePointInfo()
|
||||
{
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user