mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-21 13:53:37 +00:00
[android][sdk] Fix dependecies in sdk package
Signed-off-by: Andrei Shkrob <github@shkrob.dev>
This commit is contained in:
committed by
Konstantin Pastbin
parent
6136abb33a
commit
3920988ef4
@@ -80,7 +80,7 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
|
|||||||
|
|
||||||
private final LocationListener mLocationListener = new LocationListener() {
|
private final LocationListener mLocationListener = new LocationListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onLocationUpdated(Location location)
|
public void onLocationUpdated(@NonNull Location location)
|
||||||
{
|
{
|
||||||
if (mCurrentCountry != null)
|
if (mCurrentCountry != null)
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ public class MapPlaceholderActivity extends BaseMwmFragmentActivity implements D
|
|||||||
super.onSafeCreate(savedInstanceState);
|
super.onSafeCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_map_placeholder);
|
setContentView(R.layout.activity_map_placeholder);
|
||||||
|
|
||||||
mDisplayManager = DisplayManager.from(this);
|
mDisplayManager = MwmApplication.from(this).getDisplayManager();
|
||||||
mDisplayManager.addListener(DisplayType.Device, this);
|
mDisplayManager.addListener(DisplayType.Device, this);
|
||||||
|
|
||||||
findViewById(R.id.btn_continue).setOnClickListener((unused) -> mDisplayManager.changeDisplay(DisplayType.Device));
|
findViewById(R.id.btn_continue).setOnClickListener((unused) -> mDisplayManager.changeDisplay(DisplayType.Device));
|
||||||
|
|||||||
@@ -569,7 +569,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
|||||||
|
|
||||||
mShareLauncher = SharingUtils.RegisterLauncher(this);
|
mShareLauncher = SharingUtils.RegisterLauncher(this);
|
||||||
|
|
||||||
mDisplayManager = DisplayManager.from(this);
|
mDisplayManager = MwmApplication.from(this).getDisplayManager();
|
||||||
if (mDisplayManager.isCarDisplayUsed())
|
if (mDisplayManager.isCarDisplayUsed())
|
||||||
{
|
{
|
||||||
mRemoveDisplayListener = false;
|
mRemoveDisplayListener = false;
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ public class SplashActivity extends AppCompatActivity
|
|||||||
});
|
});
|
||||||
mShareLauncher = SharingUtils.RegisterLauncher(this);
|
mShareLauncher = SharingUtils.RegisterLauncher(this);
|
||||||
|
|
||||||
if (DisplayManager.from(this).isCarDisplayUsed())
|
if (MwmApplication.from(this).getDisplayManager().isCarDisplayUsed())
|
||||||
{
|
{
|
||||||
startActivity(new Intent(this, MapPlaceholderActivity.class));
|
startActivity(new Intent(this, MapPlaceholderActivity.class));
|
||||||
finish();
|
finish();
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import app.organicmaps.dialog.EditTextDialogFragment;
|
|||||||
import app.organicmaps.sdk.bookmarks.data.BookmarkCategory;
|
import app.organicmaps.sdk.bookmarks.data.BookmarkCategory;
|
||||||
import app.organicmaps.sdk.bookmarks.data.BookmarkManager;
|
import app.organicmaps.sdk.bookmarks.data.BookmarkManager;
|
||||||
import app.organicmaps.sdk.bookmarks.data.BookmarkSharingResult;
|
import app.organicmaps.sdk.bookmarks.data.BookmarkSharingResult;
|
||||||
|
import app.organicmaps.sdk.bookmarks.data.DataChangedListener;
|
||||||
import app.organicmaps.sdk.bookmarks.data.KmlFileType;
|
import app.organicmaps.sdk.bookmarks.data.KmlFileType;
|
||||||
import app.organicmaps.sdk.util.StorageUtils;
|
import app.organicmaps.sdk.util.StorageUtils;
|
||||||
import app.organicmaps.sdk.util.concurrency.ThreadPool;
|
import app.organicmaps.sdk.util.concurrency.ThreadPool;
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ public final class CarAppSession extends Session implements DefaultLifecycleObse
|
|||||||
{
|
{
|
||||||
Logger.d(TAG);
|
Logger.d(TAG);
|
||||||
mSensorsManager = new CarSensorsManager(getCarContext());
|
mSensorsManager = new CarSensorsManager(getCarContext());
|
||||||
mDisplayManager = DisplayManager.from(getCarContext());
|
mDisplayManager = MwmApplication.from(getCarContext()).getDisplayManager();
|
||||||
mDisplayManager.addListener(DisplayType.Car, this);
|
mDisplayManager.addListener(DisplayType.Car, this);
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,11 +14,11 @@ import androidx.car.app.SurfaceContainer;
|
|||||||
import androidx.lifecycle.DefaultLifecycleObserver;
|
import androidx.lifecycle.DefaultLifecycleObserver;
|
||||||
import androidx.lifecycle.Lifecycle;
|
import androidx.lifecycle.Lifecycle;
|
||||||
import androidx.lifecycle.LifecycleOwner;
|
import androidx.lifecycle.LifecycleOwner;
|
||||||
|
import app.organicmaps.MwmApplication;
|
||||||
import app.organicmaps.R;
|
import app.organicmaps.R;
|
||||||
import app.organicmaps.sdk.Framework;
|
import app.organicmaps.sdk.Framework;
|
||||||
import app.organicmaps.sdk.Map;
|
import app.organicmaps.sdk.Map;
|
||||||
import app.organicmaps.sdk.MapRenderingListener;
|
import app.organicmaps.sdk.MapRenderingListener;
|
||||||
import app.organicmaps.sdk.display.DisplayManager;
|
|
||||||
import app.organicmaps.sdk.settings.UnitLocale;
|
import app.organicmaps.sdk.settings.UnitLocale;
|
||||||
import app.organicmaps.sdk.util.concurrency.UiThread;
|
import app.organicmaps.sdk.util.concurrency.UiThread;
|
||||||
import app.organicmaps.sdk.util.log.Logger;
|
import app.organicmaps.sdk.util.log.Logger;
|
||||||
@@ -116,7 +116,7 @@ public class SurfaceRenderer implements DefaultLifecycleObserver, SurfaceCallbac
|
|||||||
{
|
{
|
||||||
Logger.d(TAG);
|
Logger.d(TAG);
|
||||||
mMap.onResume();
|
mMap.onResume();
|
||||||
if (DisplayManager.from(mCarContext).isCarDisplayUsed())
|
if (MwmApplication.from(mCarContext).getDisplayManager().isCarDisplayUsed())
|
||||||
UiThread.runLater(() -> mMap.updateMyPositionRoutingOffset(0));
|
UiThread.runLater(() -> mMap.updateMyPositionRoutingOffset(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,9 +8,9 @@ import androidx.car.app.model.Header;
|
|||||||
import androidx.car.app.model.MessageTemplate;
|
import androidx.car.app.model.MessageTemplate;
|
||||||
import androidx.car.app.model.Template;
|
import androidx.car.app.model.Template;
|
||||||
import androidx.core.graphics.drawable.IconCompat;
|
import androidx.core.graphics.drawable.IconCompat;
|
||||||
|
import app.organicmaps.MwmApplication;
|
||||||
import app.organicmaps.R;
|
import app.organicmaps.R;
|
||||||
import app.organicmaps.car.screens.base.BaseScreen;
|
import app.organicmaps.car.screens.base.BaseScreen;
|
||||||
import app.organicmaps.sdk.display.DisplayManager;
|
|
||||||
import app.organicmaps.sdk.display.DisplayType;
|
import app.organicmaps.sdk.display.DisplayType;
|
||||||
|
|
||||||
public class MapPlaceholderScreen extends BaseScreen
|
public class MapPlaceholderScreen extends BaseScreen
|
||||||
@@ -33,9 +33,11 @@ public class MapPlaceholderScreen extends BaseScreen
|
|||||||
builder.setHeader(headerBuilder.build());
|
builder.setHeader(headerBuilder.build());
|
||||||
builder.setIcon(
|
builder.setIcon(
|
||||||
new CarIcon.Builder(IconCompat.createWithResource(getCarContext(), R.drawable.ic_phone_android)).build());
|
new CarIcon.Builder(IconCompat.createWithResource(getCarContext(), R.drawable.ic_phone_android)).build());
|
||||||
builder.addAction(new Action.Builder()
|
builder.addAction(
|
||||||
|
new Action.Builder()
|
||||||
.setTitle(getCarContext().getString(R.string.car_continue_in_the_car))
|
.setTitle(getCarContext().getString(R.string.car_continue_in_the_car))
|
||||||
.setOnClickListener(() -> DisplayManager.from(getCarContext()).changeDisplay(DisplayType.Car))
|
.setOnClickListener(
|
||||||
|
() -> MwmApplication.from(getCarContext()).getDisplayManager().changeDisplay(DisplayType.Car))
|
||||||
.build());
|
.build());
|
||||||
|
|
||||||
return builder.build();
|
return builder.build();
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import androidx.car.app.CarContext;
|
|||||||
import androidx.car.app.Screen;
|
import androidx.car.app.Screen;
|
||||||
import androidx.car.app.ScreenManager;
|
import androidx.car.app.ScreenManager;
|
||||||
import androidx.car.app.notification.CarPendingIntent;
|
import androidx.car.app.notification.CarPendingIntent;
|
||||||
|
import app.organicmaps.MwmApplication;
|
||||||
import app.organicmaps.api.Const;
|
import app.organicmaps.api.Const;
|
||||||
import app.organicmaps.car.CarAppService;
|
import app.organicmaps.car.CarAppService;
|
||||||
import app.organicmaps.car.SurfaceRenderer;
|
import app.organicmaps.car.SurfaceRenderer;
|
||||||
@@ -106,7 +107,7 @@ public final class IntentUtils
|
|||||||
{
|
{
|
||||||
final ScreenManager screenManager = carContext.getCarService(ScreenManager.class);
|
final ScreenManager screenManager = carContext.getCarService(ScreenManager.class);
|
||||||
final Screen top = screenManager.getTop();
|
final Screen top = screenManager.getTop();
|
||||||
final DisplayManager displayManager = DisplayManager.from(carContext);
|
final DisplayManager displayManager = MwmApplication.from(carContext).getDisplayManager();
|
||||||
if (!displayManager.isCarDisplayUsed())
|
if (!displayManager.isCarDisplayUsed())
|
||||||
displayManager.changeDisplay(DisplayType.Car);
|
displayManager.changeDisplay(DisplayType.Car);
|
||||||
if (!(top instanceof NavigationScreen))
|
if (!(top instanceof NavigationScreen))
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ import app.organicmaps.sdk.editor.Editor;
|
|||||||
import app.organicmaps.sdk.editor.OpeningHours;
|
import app.organicmaps.sdk.editor.OpeningHours;
|
||||||
import app.organicmaps.sdk.editor.data.LocalizedName;
|
import app.organicmaps.sdk.editor.data.LocalizedName;
|
||||||
import app.organicmaps.sdk.editor.data.LocalizedStreet;
|
import app.organicmaps.sdk.editor.data.LocalizedStreet;
|
||||||
import app.organicmaps.sdk.editor.data.TimeFormatUtils;
|
import app.organicmaps.editor.data.TimeFormatUtils;
|
||||||
import app.organicmaps.sdk.editor.data.Timetable;
|
import app.organicmaps.sdk.editor.data.Timetable;
|
||||||
import app.organicmaps.sdk.util.StringUtils;
|
import app.organicmaps.sdk.util.StringUtils;
|
||||||
import app.organicmaps.sdk.util.UiUtils;
|
import app.organicmaps.sdk.util.UiUtils;
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
|||||||
import app.organicmaps.R;
|
import app.organicmaps.R;
|
||||||
import app.organicmaps.sdk.editor.OpeningHours;
|
import app.organicmaps.sdk.editor.OpeningHours;
|
||||||
import app.organicmaps.sdk.editor.data.HoursMinutes;
|
import app.organicmaps.sdk.editor.data.HoursMinutes;
|
||||||
import app.organicmaps.sdk.editor.data.TimeFormatUtils;
|
import app.organicmaps.editor.data.TimeFormatUtils;
|
||||||
import app.organicmaps.sdk.editor.data.Timespan;
|
import app.organicmaps.sdk.editor.data.Timespan;
|
||||||
import app.organicmaps.sdk.editor.data.Timetable;
|
import app.organicmaps.sdk.editor.data.Timetable;
|
||||||
import app.organicmaps.sdk.util.UiUtils;
|
import app.organicmaps.sdk.util.UiUtils;
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
package app.organicmaps.sdk.editor.data;
|
package app.organicmaps.editor.data;
|
||||||
|
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import androidx.annotation.IntRange;
|
import androidx.annotation.IntRange;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import app.organicmaps.R;
|
import app.organicmaps.R;
|
||||||
|
import app.organicmaps.sdk.editor.data.Timespan;
|
||||||
|
import app.organicmaps.sdk.editor.data.Timetable;
|
||||||
import app.organicmaps.util.Utils;
|
import app.organicmaps.util.Utils;
|
||||||
import java.text.DateFormatSymbols;
|
import java.text.DateFormatSymbols;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
@@ -82,8 +82,8 @@ public final class OrganicMaps implements DefaultLifecycleObserver
|
|||||||
|
|
||||||
Config.init(mContext);
|
Config.init(mContext);
|
||||||
|
|
||||||
mLocationHelper = new LocationHelper(mContext);
|
|
||||||
mSensorHelper = new SensorHelper(mContext);
|
mSensorHelper = new SensorHelper(mContext);
|
||||||
|
mLocationHelper = new LocationHelper(mContext, mSensorHelper);
|
||||||
mIsolinesManager = new IsolinesManager(mContext);
|
mIsolinesManager = new IsolinesManager(mContext);
|
||||||
mSubwayManager = new SubwayManager(mContext);
|
mSubwayManager = new SubwayManager(mContext);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import androidx.annotation.MainThread;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.WorkerThread;
|
import androidx.annotation.WorkerThread;
|
||||||
import app.organicmaps.bookmarks.DataChangedListener;
|
|
||||||
import app.organicmaps.sdk.Framework;
|
import app.organicmaps.sdk.Framework;
|
||||||
import app.organicmaps.sdk.util.KeyValue;
|
import app.organicmaps.sdk.util.KeyValue;
|
||||||
import app.organicmaps.sdk.util.StorageUtils;
|
import app.organicmaps.sdk.util.StorageUtils;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package app.organicmaps.bookmarks;
|
package app.organicmaps.sdk.bookmarks.data;
|
||||||
|
|
||||||
public interface DataChangedListener
|
public interface DataChangedListener
|
||||||
{
|
{
|
||||||
@@ -1,11 +1,9 @@
|
|||||||
package app.organicmaps.sdk.display;
|
package app.organicmaps.sdk.display;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import app.organicmaps.MwmApplication;
|
|
||||||
import app.organicmaps.sdk.util.log.Logger;
|
import app.organicmaps.sdk.util.log.Logger;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@@ -39,13 +37,6 @@ public class DisplayManager
|
|||||||
@Nullable
|
@Nullable
|
||||||
private DisplayHolder mCar;
|
private DisplayHolder mCar;
|
||||||
|
|
||||||
@NonNull
|
|
||||||
public static DisplayManager from(@NonNull Context context)
|
|
||||||
{
|
|
||||||
final MwmApplication app = (MwmApplication) context.getApplicationContext();
|
|
||||||
return app.getDisplayManager();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isCarConnected()
|
public boolean isCarConnected()
|
||||||
{
|
{
|
||||||
return mCar != null;
|
return mCar != null;
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ import androidx.annotation.Keep;
|
|||||||
import app.organicmaps.downloader.Android7RootCertificateWorkaround;
|
import app.organicmaps.downloader.Android7RootCertificateWorkaround;
|
||||||
import app.organicmaps.sdk.util.Constants;
|
import app.organicmaps.sdk.util.Constants;
|
||||||
import app.organicmaps.sdk.util.StringUtils;
|
import app.organicmaps.sdk.util.StringUtils;
|
||||||
|
import app.organicmaps.sdk.util.Utils;
|
||||||
import app.organicmaps.sdk.util.log.Logger;
|
import app.organicmaps.sdk.util.log.Logger;
|
||||||
import app.organicmaps.util.Utils;
|
|
||||||
import java.io.BufferedInputStream;
|
import java.io.BufferedInputStream;
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
package app.organicmaps.sdk.downloader;
|
package app.organicmaps.sdk.downloader;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import app.organicmaps.util.Utils;
|
import androidx.core.util.Consumer;
|
||||||
|
|
||||||
class ExpandRetryConfirmationListener implements Runnable
|
class ExpandRetryConfirmationListener implements Runnable
|
||||||
{
|
{
|
||||||
@Nullable
|
@Nullable
|
||||||
private final Utils.Proc<Boolean> mDialogClickListener;
|
private final Consumer<Boolean> mDialogClickListener;
|
||||||
|
|
||||||
ExpandRetryConfirmationListener(@Nullable Utils.Proc<Boolean> dialogClickListener)
|
ExpandRetryConfirmationListener(@Nullable Consumer<Boolean> dialogClickListener)
|
||||||
{
|
{
|
||||||
mDialogClickListener = dialogClickListener;
|
mDialogClickListener = dialogClickListener;
|
||||||
}
|
}
|
||||||
@@ -18,6 +18,6 @@ class ExpandRetryConfirmationListener implements Runnable
|
|||||||
{
|
{
|
||||||
if (mDialogClickListener == null)
|
if (mDialogClickListener == null)
|
||||||
return;
|
return;
|
||||||
mDialogClickListener.invoke(true);
|
mDialogClickListener.accept(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package app.organicmaps.sdk.downloader;
|
package app.organicmaps.sdk.downloader;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.Application;
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import androidx.annotation.Keep;
|
import androidx.annotation.Keep;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
@@ -9,10 +8,10 @@ import androidx.annotation.Nullable;
|
|||||||
import androidx.annotation.StringRes;
|
import androidx.annotation.StringRes;
|
||||||
import androidx.annotation.UiThread;
|
import androidx.annotation.UiThread;
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
|
import androidx.core.util.Consumer;
|
||||||
import app.organicmaps.R;
|
import app.organicmaps.R;
|
||||||
import app.organicmaps.downloader.DownloaderService;
|
import app.organicmaps.downloader.DownloaderService;
|
||||||
import app.organicmaps.sdk.util.ConnectionState;
|
import app.organicmaps.sdk.util.ConnectionState;
|
||||||
import app.organicmaps.util.Utils;
|
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -22,7 +21,6 @@ public final class MapManager
|
|||||||
{
|
{
|
||||||
// Used by JNI.
|
// Used by JNI.
|
||||||
@Keep
|
@Keep
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public static class StorageCallbackData
|
public static class StorageCallbackData
|
||||||
{
|
{
|
||||||
public final String countryId;
|
public final String countryId;
|
||||||
@@ -43,12 +41,10 @@ public final class MapManager
|
|||||||
{
|
{
|
||||||
// Called from JNI.
|
// Called from JNI.
|
||||||
@Keep
|
@Keep
|
||||||
@SuppressWarnings("unused")
|
|
||||||
void onStatusChanged(List<StorageCallbackData> data);
|
void onStatusChanged(List<StorageCallbackData> data);
|
||||||
|
|
||||||
// Called from JNI.
|
// Called from JNI.
|
||||||
@Keep
|
@Keep
|
||||||
@SuppressWarnings("unused")
|
|
||||||
void onProgress(String countryId, long localSize, long remoteSize);
|
void onProgress(String countryId, long localSize, long remoteSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,7 +72,7 @@ public final class MapManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void showError(final Activity activity, final StorageCallbackData errorData,
|
public static void showError(final Activity activity, final StorageCallbackData errorData,
|
||||||
@Nullable final Utils.Proc<Boolean> dialogClickListener)
|
@Nullable final Consumer<Boolean> dialogClickListener)
|
||||||
{
|
{
|
||||||
if (!nativeIsAutoretryFailed())
|
if (!nativeIsAutoretryFailed())
|
||||||
return;
|
return;
|
||||||
@@ -85,7 +81,7 @@ public final class MapManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void showErrorDialog(final Activity activity, final StorageCallbackData errorData,
|
public static void showErrorDialog(final Activity activity, final StorageCallbackData errorData,
|
||||||
@Nullable final Utils.Proc<Boolean> dialogClickListener)
|
@Nullable final Consumer<Boolean> dialogClickListener)
|
||||||
{
|
{
|
||||||
if (sCurrentErrorDialog != null)
|
if (sCurrentErrorDialog != null)
|
||||||
{
|
{
|
||||||
@@ -101,11 +97,10 @@ public final class MapManager
|
|||||||
(dialog, which) -> {
|
(dialog, which) -> {
|
||||||
sCurrentErrorDialog = null;
|
sCurrentErrorDialog = null;
|
||||||
if (dialogClickListener != null)
|
if (dialogClickListener != null)
|
||||||
dialogClickListener.invoke(false);
|
dialogClickListener.accept(false);
|
||||||
})
|
})
|
||||||
.setPositiveButton(R.string.downloader_retry,
|
.setPositiveButton(R.string.downloader_retry,
|
||||||
(dialog, which) -> {
|
(dialog, which) -> {
|
||||||
Application app = activity.getApplication();
|
|
||||||
ExpandRetryConfirmationListener listener =
|
ExpandRetryConfirmationListener listener =
|
||||||
new ExpandRetryConfirmationListener(dialogClickListener);
|
new ExpandRetryConfirmationListener(dialogClickListener);
|
||||||
warn3gAndRetry(activity, errorData.countryId, listener);
|
warn3gAndRetry(activity, errorData.countryId, listener);
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import androidx.annotation.Keep;
|
|||||||
*/
|
*/
|
||||||
// Called from JNI.
|
// Called from JNI.
|
||||||
@Keep
|
@Keep
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public final class UpdateInfo
|
public final class UpdateInfo
|
||||||
{
|
{
|
||||||
public final int filesCount;
|
public final int filesCount;
|
||||||
|
|||||||
@@ -24,12 +24,6 @@ public final class OpeningHours
|
|||||||
@NonNull
|
@NonNull
|
||||||
public static native Timetable nativeGetComplementTimetable(Timetable[] timetableSet);
|
public static native Timetable nativeGetComplementTimetable(Timetable[] timetableSet);
|
||||||
|
|
||||||
@NonNull
|
|
||||||
public static native Timetable[] nativeAddTimetable(Timetable[] timetableSet);
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
public static native Timetable[] nativeRemoveTimetable(Timetable[] timetableSet, int timetableIndex);
|
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
public static native Timetable nativeSetIsFullday(Timetable timetable, boolean isFullday);
|
public static native Timetable nativeSetIsFullday(Timetable timetable, boolean isFullday);
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ public class LocationHelper implements BaseLocationProvider.Listener
|
|||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
|
@NonNull
|
||||||
|
private final SensorHelper mSensorHelper;
|
||||||
|
|
||||||
private static final String TAG = LocationState.LOCATION_TAG;
|
private static final String TAG = LocationState.LOCATION_TAG;
|
||||||
|
|
||||||
@@ -95,9 +97,10 @@ public class LocationHelper implements BaseLocationProvider.Listener
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public LocationHelper(@NonNull Context context)
|
public LocationHelper(@NonNull Context context, @NonNull SensorHelper sensorHelper)
|
||||||
{
|
{
|
||||||
mContext = context;
|
mContext = context;
|
||||||
|
mSensorHelper = sensorHelper;
|
||||||
mLocationProvider = LocationProviderFactory.getProvider(mContext, this);
|
mLocationProvider = LocationProviderFactory.getProvider(mContext, this);
|
||||||
mHandler = new Handler();
|
mHandler = new Handler();
|
||||||
}
|
}
|
||||||
@@ -361,7 +364,7 @@ public class LocationHelper implements BaseLocationProvider.Listener
|
|||||||
checkForAgpsUpdates();
|
checkForAgpsUpdates();
|
||||||
|
|
||||||
if (LocationUtils.checkFineLocationPermission(mContext))
|
if (LocationUtils.checkFineLocationPermission(mContext))
|
||||||
MwmApplication.from(mContext).getSensorHelper().start();
|
mSensorHelper.start();
|
||||||
|
|
||||||
final long oldInterval = mInterval;
|
final long oldInterval = mInterval;
|
||||||
mInterval = calcLocationUpdatesInterval();
|
mInterval = calcLocationUpdatesInterval();
|
||||||
@@ -387,7 +390,7 @@ public class LocationHelper implements BaseLocationProvider.Listener
|
|||||||
Logger.i(TAG);
|
Logger.i(TAG);
|
||||||
mLocationProvider.stop();
|
mLocationProvider.stop();
|
||||||
unsubscribeFromGnssStatusUpdates();
|
unsubscribeFromGnssStatusUpdates();
|
||||||
MwmApplication.from(mContext).getSensorHelper().stop();
|
mSensorHelper.stop();
|
||||||
mHandler.removeCallbacks(mLocationTimeoutRunnable);
|
mHandler.removeCallbacks(mLocationTimeoutRunnable);
|
||||||
mActive = false;
|
mActive = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import java.lang.annotation.RetentionPolicy;
|
|||||||
|
|
||||||
public final class LocationState
|
public final class LocationState
|
||||||
{
|
{
|
||||||
public static final String LOCATION_TAG = LocationState.class.getPackage().getName();
|
public static final String LOCATION_TAG = LocationState.class.getSimpleName();
|
||||||
|
|
||||||
public interface ModeChangeListener
|
public interface ModeChangeListener
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import androidx.annotation.IntDef;
|
|||||||
import androidx.annotation.IntRange;
|
import androidx.annotation.IntRange;
|
||||||
import androidx.annotation.Keep;
|
import androidx.annotation.Keep;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import app.organicmaps.MwmApplication;
|
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
|
||||||
@@ -31,7 +30,7 @@ public final class BatteryState
|
|||||||
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
|
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
|
||||||
// Because it's a sticky intent, you don't need to register a BroadcastReceiver
|
// Because it's a sticky intent, you don't need to register a BroadcastReceiver
|
||||||
// by simply calling registerReceiver passing in null
|
// by simply calling registerReceiver passing in null
|
||||||
Intent batteryStatus = MwmApplication.from(context).registerReceiver(null, filter);
|
Intent batteryStatus = context.getApplicationContext().registerReceiver(null, filter);
|
||||||
if (batteryStatus == null)
|
if (batteryStatus == null)
|
||||||
return new State(0, CHARGING_STATUS_UNKNOWN);
|
return new State(0, CHARGING_STATUS_UNKNOWN);
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package app.organicmaps.sdk.util;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import app.organicmaps.util.Utils;
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.security.KeyStore;
|
import java.security.KeyStore;
|
||||||
|
|||||||
@@ -219,8 +219,8 @@ public final class Config
|
|||||||
public static String getCurrentUiTheme(@NonNull Context context)
|
public static String getCurrentUiTheme(@NonNull Context context)
|
||||||
{
|
{
|
||||||
// This is the actual map theme, only set to theme_default/night
|
// This is the actual map theme, only set to theme_default/night
|
||||||
String defaultTheme = MwmApplication.from(context).getString(R.string.theme_default);
|
final String defaultTheme = context.getString(R.string.theme_default);
|
||||||
String res = getString(KEY_MISC_UI_THEME, defaultTheme);
|
final String res = getString(KEY_MISC_UI_THEME, defaultTheme);
|
||||||
|
|
||||||
if (ThemeUtils.isValidTheme(context, res))
|
if (ThemeUtils.isValidTheme(context, res))
|
||||||
return res;
|
return res;
|
||||||
@@ -240,8 +240,8 @@ public final class Config
|
|||||||
public static String getUiThemeSettings(@NonNull Context context)
|
public static String getUiThemeSettings(@NonNull Context context)
|
||||||
{
|
{
|
||||||
// This is the default theme *mode*, eg. auto/dark/nav_auto/light.
|
// This is the default theme *mode*, eg. auto/dark/nav_auto/light.
|
||||||
String defaultSetting = MwmApplication.from(context).getString(R.string.theme_nav_auto);
|
final String defaultSetting = context.getString(R.string.theme_nav_auto);
|
||||||
String res = getString(KEY_MISC_UI_THEME_SETTINGS, defaultSetting);
|
final String res = getString(KEY_MISC_UI_THEME_SETTINGS, defaultSetting);
|
||||||
if (ThemeUtils.isValidTheme(context, res) || ThemeUtils.isAutoTheme(context, res)
|
if (ThemeUtils.isValidTheme(context, res) || ThemeUtils.isAutoTheme(context, res)
|
||||||
|| ThemeUtils.isNavAutoTheme(context, res))
|
|| ThemeUtils.isNavAutoTheme(context, res))
|
||||||
return res;
|
return res;
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import androidx.annotation.IntDef;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import app.organicmaps.sdk.Framework;
|
import app.organicmaps.sdk.Framework;
|
||||||
import app.organicmaps.util.Utils;
|
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import androidx.core.content.FileProvider;
|
|||||||
import androidx.documentfile.provider.DocumentFile;
|
import androidx.documentfile.provider.DocumentFile;
|
||||||
import app.organicmaps.BuildConfig;
|
import app.organicmaps.BuildConfig;
|
||||||
import app.organicmaps.sdk.util.log.Logger;
|
import app.organicmaps.sdk.util.log.Logger;
|
||||||
import app.organicmaps.util.Utils;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
@@ -155,14 +154,6 @@ public class StorageUtils
|
|||||||
new File(path));
|
new File(path));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Copy data from a URI into a local file.
|
|
||||||
* @param resolver content resolver
|
|
||||||
* @param from a source URI.
|
|
||||||
* @param to a destination file
|
|
||||||
* @return true on success and false if the provider recently crashed.
|
|
||||||
* @throws IOException - if I/O error occurs.
|
|
||||||
*/
|
|
||||||
static private boolean copyFile(InputStream from, OutputStream to) throws IOException
|
static private boolean copyFile(InputStream from, OutputStream to) throws IOException
|
||||||
{
|
{
|
||||||
if (from == null || to == null)
|
if (from == null || to == null)
|
||||||
@@ -175,6 +166,15 @@ public class StorageUtils
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copy data from a URI into a local file.
|
||||||
|
* @param resolver content resolver
|
||||||
|
* @param from a source URI.
|
||||||
|
* @param to a destination file
|
||||||
|
* @return true on success and false if the provider recently crashed.
|
||||||
|
* @throws IOException - if I/O error occurs.
|
||||||
|
*/
|
||||||
public static boolean copyFile(@NonNull ContentResolver resolver, @NonNull Uri from, @NonNull File to)
|
public static boolean copyFile(@NonNull ContentResolver resolver, @NonNull Uri from, @NonNull File to)
|
||||||
throws IOException
|
throws IOException
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import android.text.Editable;
|
|||||||
import android.text.TextWatcher;
|
import android.text.TextWatcher;
|
||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import app.organicmaps.MwmApplication;
|
|
||||||
import app.organicmaps.R;
|
import app.organicmaps.R;
|
||||||
import java.text.NumberFormat;
|
import java.text.NumberFormat;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
@@ -74,11 +73,11 @@ public class StringUtils
|
|||||||
if (value == 0)
|
if (value == 0)
|
||||||
value = 1;
|
value = 1;
|
||||||
|
|
||||||
return formatUsingUsLocale("%1$d %2$s", value, MwmApplication.from(context).getString(R.string.mb));
|
return formatUsingUsLocale("%1$d %2$s", value, context.getString(R.string.mb));
|
||||||
}
|
}
|
||||||
|
|
||||||
float value = ((float) size / Constants.GB);
|
float value = ((float) size / Constants.GB);
|
||||||
return formatUsingSystemLocale("%1$.1f %2$s", value, MwmApplication.from(context).getString(R.string.gb));
|
return formatUsingSystemLocale("%1$.1f %2$s", value, context.getString(R.string.gb));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isRtl()
|
public static boolean isRtl()
|
||||||
|
|||||||
@@ -134,7 +134,7 @@ public enum ThemeSwitcher
|
|||||||
{
|
{
|
||||||
// Because of the distinct behavior in auto theme, Android Auto employs its own mechanism for theme switching.
|
// Because of the distinct behavior in auto theme, Android Auto employs its own mechanism for theme switching.
|
||||||
// For the Android Auto theme switcher, please consult the app.organicmaps.car.util.ThemeUtils module.
|
// For the Android Auto theme switcher, please consult the app.organicmaps.car.util.ThemeUtils module.
|
||||||
if (DisplayManager.from(mContext).isCarDisplayUsed())
|
if (MwmApplication.from(mContext).getDisplayManager().isCarDisplayUsed())
|
||||||
return;
|
return;
|
||||||
// If rendering is not active we can mark map style, because all graphics
|
// If rendering is not active we can mark map style, because all graphics
|
||||||
// will be recreated after rendering activation.
|
// will be recreated after rendering activation.
|
||||||
|
|||||||
@@ -2,6 +2,10 @@ package app.organicmaps.sdk.util;
|
|||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.pm.ApplicationInfo;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
import android.content.pm.ResolveInfo;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
@@ -14,9 +18,12 @@ import androidx.annotation.Nullable;
|
|||||||
import androidx.annotation.StringRes;
|
import androidx.annotation.StringRes;
|
||||||
import app.organicmaps.BuildConfig;
|
import app.organicmaps.BuildConfig;
|
||||||
import app.organicmaps.sdk.util.log.Logger;
|
import app.organicmaps.sdk.util.log.Logger;
|
||||||
|
import java.io.Closeable;
|
||||||
|
import java.io.IOException;
|
||||||
import java.text.DecimalFormatSymbols;
|
import java.text.DecimalFormatSymbols;
|
||||||
import java.util.Currency;
|
import java.util.Currency;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@Keep
|
@Keep
|
||||||
public class Utils
|
public class Utils
|
||||||
@@ -262,8 +269,75 @@ public class Utils
|
|||||||
return brand;
|
return brand;
|
||||||
return context.getString(nameId);
|
return context.getString(nameId);
|
||||||
}
|
}
|
||||||
catch (Resources.NotFoundException e)
|
catch (Resources.NotFoundException ignored)
|
||||||
{}
|
{}
|
||||||
return brand;
|
return brand;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void closeSafely(@NonNull Closeable... closeable)
|
||||||
|
{
|
||||||
|
for (Closeable each : closeable)
|
||||||
|
{
|
||||||
|
if (each != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
each.close();
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
Logger.e(TAG, "Failed to close '" + each + "'", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <K, V> String mapPrettyPrint(Map<K, V> map)
|
||||||
|
{
|
||||||
|
if (map == null)
|
||||||
|
return "[null]";
|
||||||
|
if (map.isEmpty())
|
||||||
|
return "[]";
|
||||||
|
|
||||||
|
String joined = "";
|
||||||
|
for (final K key : map.keySet())
|
||||||
|
{
|
||||||
|
final String keyVal = key + "=" + map.get(key);
|
||||||
|
if (!joined.isEmpty())
|
||||||
|
joined = TextUtils.join(",", new Object[] {joined, keyVal});
|
||||||
|
else
|
||||||
|
joined = keyVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
return "[" + joined + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecated")
|
||||||
|
private static @Nullable ResolveInfo resolveActivity(@NonNull PackageManager pm, @NonNull Intent intent, int flags)
|
||||||
|
{
|
||||||
|
return pm.resolveActivity(intent, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isIntentSupported(@NonNull Context context, @NonNull Intent intent)
|
||||||
|
{
|
||||||
|
final PackageManager pm = context.getPackageManager();
|
||||||
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU)
|
||||||
|
return resolveActivity(pm, intent, 0) != null;
|
||||||
|
return pm.resolveActivity(intent, PackageManager.ResolveInfoFlags.of(0)) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
private static ApplicationInfo getApplicationInfoOld(@NonNull PackageManager manager, @NonNull String packageName,
|
||||||
|
int flags) throws PackageManager.NameNotFoundException
|
||||||
|
{
|
||||||
|
return manager.getApplicationInfo(packageName, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ApplicationInfo getApplicationInfo(@NonNull PackageManager manager, @NonNull String packageName,
|
||||||
|
int flags) throws PackageManager.NameNotFoundException
|
||||||
|
{
|
||||||
|
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU)
|
||||||
|
return getApplicationInfoOld(manager, packageName, flags);
|
||||||
|
return manager.getApplicationInfo(packageName, PackageManager.ApplicationInfoFlags.of(flags));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -176,7 +176,7 @@ public class SearchFragment extends BaseMwmFragment implements SearchListener, C
|
|||||||
|
|
||||||
private final LocationListener mLocationListener = new LocationListener() {
|
private final LocationListener mLocationListener = new LocationListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onLocationUpdated(Location location)
|
public void onLocationUpdated(@NonNull Location location)
|
||||||
{
|
{
|
||||||
mLastPosition.set(location.getLatitude(), location.getLongitude());
|
mLastPosition.set(location.getLatitude(), location.getLongitude());
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import android.view.View;
|
|||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import app.organicmaps.sdk.util.Utils;
|
||||||
import app.organicmaps.sdk.util.concurrency.UiThread;
|
import app.organicmaps.sdk.util.concurrency.UiThread;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package app.organicmaps.util;
|
package app.organicmaps.util;
|
||||||
|
|
||||||
|
import static app.organicmaps.sdk.util.Utils.isIntentSupported;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.ActivityNotFoundException;
|
import android.content.ActivityNotFoundException;
|
||||||
import android.content.ClipData;
|
import android.content.ClipData;
|
||||||
@@ -8,7 +10,6 @@ import android.content.Intent;
|
|||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.ResolveInfo;
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@@ -45,10 +46,7 @@ import app.organicmaps.sdk.util.concurrency.UiThread;
|
|||||||
import app.organicmaps.sdk.util.log.Logger;
|
import app.organicmaps.sdk.util.log.Logger;
|
||||||
import app.organicmaps.sdk.util.log.LogsManager;
|
import app.organicmaps.sdk.util.log.LogsManager;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
import java.io.Closeable;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Keep
|
@Keep
|
||||||
public class Utils
|
public class Utils
|
||||||
@@ -130,20 +128,6 @@ public class Utils
|
|||||||
showSnackbarAbove(view, viewAbove, message);
|
showSnackbarAbove(view, viewAbove, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecated")
|
|
||||||
private static @Nullable ResolveInfo resolveActivity(@NonNull PackageManager pm, @NonNull Intent intent, int flags)
|
|
||||||
{
|
|
||||||
return pm.resolveActivity(intent, flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isIntentSupported(@NonNull Context context, @NonNull Intent intent)
|
|
||||||
{
|
|
||||||
final PackageManager pm = context.getPackageManager();
|
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU)
|
|
||||||
return resolveActivity(pm, intent, 0) != null;
|
|
||||||
return pm.resolveActivity(intent, PackageManager.ResolveInfoFlags.of(0)) != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static @Nullable Intent makeSystemLocationSettingIntent(@NonNull Context context)
|
public static @Nullable Intent makeSystemLocationSettingIntent(@NonNull Context context)
|
||||||
{
|
{
|
||||||
Intent intent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
|
Intent intent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
|
||||||
@@ -173,27 +157,6 @@ public class Utils
|
|||||||
final ClipData clip = ClipData.newPlainText(context.getString(R.string.project_name) + ": " + text, text);
|
final ClipData clip = ClipData.newPlainText(context.getString(R.string.project_name) + ": " + text, text);
|
||||||
clipboard.setPrimaryClip(clip);
|
clipboard.setPrimaryClip(clip);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <K, V> String mapPrettyPrint(Map<K, V> map)
|
|
||||||
{
|
|
||||||
if (map == null)
|
|
||||||
return "[null]";
|
|
||||||
if (map.isEmpty())
|
|
||||||
return "[]";
|
|
||||||
|
|
||||||
String joined = "";
|
|
||||||
for (final K key : map.keySet())
|
|
||||||
{
|
|
||||||
final String keyVal = key + "=" + map.get(key);
|
|
||||||
if (!joined.isEmpty())
|
|
||||||
joined = TextUtils.join(",", new Object[] {joined, keyVal});
|
|
||||||
else
|
|
||||||
joined = keyVal;
|
|
||||||
}
|
|
||||||
|
|
||||||
return "[" + joined + "]";
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Uri buildMailUri(String to, String subject, String body)
|
public static Uri buildMailUri(String to, String subject, String body)
|
||||||
{
|
{
|
||||||
String uriString = Constants.Url.MAILTO_SCHEME + Uri.encode(to) + Constants.Url.MAIL_SUBJECT + Uri.encode(subject)
|
String uriString = Constants.Url.MAILTO_SCHEME + Uri.encode(to) + Constants.Url.MAIL_SUBJECT + Uri.encode(subject)
|
||||||
@@ -285,24 +248,6 @@ public class Utils
|
|||||||
return url.startsWith("http://") || url.startsWith("https://");
|
return url.startsWith("http://") || url.startsWith("https://");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void closeSafely(@NonNull Closeable... closeable)
|
|
||||||
{
|
|
||||||
for (Closeable each : closeable)
|
|
||||||
{
|
|
||||||
if (each != null)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
each.close();
|
|
||||||
}
|
|
||||||
catch (IOException e)
|
|
||||||
{
|
|
||||||
Logger.e(TAG, "Failed to close '" + each + "'", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// subject is optional (could be an empty string).
|
// subject is optional (could be an empty string).
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -421,12 +366,6 @@ public class Utils
|
|||||||
|
|
||||||
return Character.toLowerCase(src.charAt(0)) + src.substring(1);
|
return Character.toLowerCase(src.charAt(0)) + src.substring(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface Proc<T>
|
|
||||||
{
|
|
||||||
void invoke(@NonNull T param);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getLocalizedLevel(@NonNull Context context, @Nullable String level)
|
public static String getLocalizedLevel(@NonNull Context context, @Nullable String level)
|
||||||
{
|
{
|
||||||
if (TextUtils.isEmpty(level))
|
if (TextUtils.isEmpty(level))
|
||||||
@@ -507,21 +446,6 @@ public class Utils
|
|||||||
return Html.fromHtml(htmlDescription, Html.FROM_HTML_MODE_LEGACY);
|
return Html.fromHtml(htmlDescription, Html.FROM_HTML_MODE_LEGACY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
private static ApplicationInfo getApplicationInfoOld(@NonNull PackageManager manager, @NonNull String packageName,
|
|
||||||
int flags) throws PackageManager.NameNotFoundException
|
|
||||||
{
|
|
||||||
return manager.getApplicationInfo(packageName, flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ApplicationInfo getApplicationInfo(@NonNull PackageManager manager, @NonNull String packageName,
|
|
||||||
int flags) throws PackageManager.NameNotFoundException
|
|
||||||
{
|
|
||||||
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU)
|
|
||||||
return getApplicationInfoOld(manager, packageName, flags);
|
|
||||||
return manager.getApplicationInfo(packageName, PackageManager.ApplicationInfoFlags.of(flags));
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
private static PackageInfo getPackageInfoOld(@NonNull PackageManager manager, @NonNull String packageName, int flags)
|
private static PackageInfo getPackageInfoOld(@NonNull PackageManager manager, @NonNull String packageName, int flags)
|
||||||
throws PackageManager.NameNotFoundException
|
throws PackageManager.NameNotFoundException
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ import android.view.Menu;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.PopupMenu;
|
import android.widget.PopupMenu;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import app.organicmaps.MwmApplication;
|
||||||
import app.organicmaps.R;
|
import app.organicmaps.R;
|
||||||
import app.organicmaps.sdk.Framework;
|
import app.organicmaps.sdk.Framework;
|
||||||
import app.organicmaps.sdk.display.DisplayManager;
|
|
||||||
import app.organicmaps.util.Utils;
|
import app.organicmaps.util.Utils;
|
||||||
import com.google.android.material.bottomsheet.BottomSheetBehavior;
|
import com.google.android.material.bottomsheet.BottomSheetBehavior;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -21,7 +21,7 @@ public class PlacePageUtils
|
|||||||
parent.post(() -> {
|
parent.post(() -> {
|
||||||
// Because of the post(), this lambda is called after the car.SurfaceRenderer.onStableAreaChanged() and breaks the
|
// Because of the post(), this lambda is called after the car.SurfaceRenderer.onStableAreaChanged() and breaks the
|
||||||
// visibleRect configuration
|
// visibleRect configuration
|
||||||
if (DisplayManager.from(parent.getContext()).isCarDisplayUsed())
|
if (MwmApplication.from(parent.getContext()).getDisplayManager().isCarDisplayUsed())
|
||||||
return;
|
return;
|
||||||
final int screenWidth = parent.getWidth();
|
final int screenWidth = parent.getWidth();
|
||||||
if (placePageDistanceToTop >= viewportMinHeight)
|
if (placePageDistanceToTop >= viewportMinHeight)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package app.organicmaps.widget.placepage.sections;
|
package app.organicmaps.widget.placepage.sections;
|
||||||
|
|
||||||
import static app.organicmaps.sdk.editor.data.TimeFormatUtils.formatNonBusinessTime;
|
import static app.organicmaps.editor.data.TimeFormatUtils.formatNonBusinessTime;
|
||||||
import static app.organicmaps.sdk.editor.data.TimeFormatUtils.formatWeekdaysRange;
|
import static app.organicmaps.editor.data.TimeFormatUtils.formatWeekdaysRange;
|
||||||
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@@ -18,7 +18,6 @@ import java.util.Arrays;
|
|||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class PlaceOpeningHoursAdapter extends RecyclerView.Adapter<PlaceOpeningHoursAdapter.ViewHolder>
|
public class PlaceOpeningHoursAdapter extends RecyclerView.Adapter<PlaceOpeningHoursAdapter.ViewHolder>
|
||||||
{
|
{
|
||||||
private List<WeekScheduleData> mWeekSchedule = Collections.emptyList();
|
private List<WeekScheduleData> mWeekSchedule = Collections.emptyList();
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import app.organicmaps.R;
|
|||||||
import app.organicmaps.sdk.bookmarks.data.MapObject;
|
import app.organicmaps.sdk.bookmarks.data.MapObject;
|
||||||
import app.organicmaps.sdk.bookmarks.data.Metadata;
|
import app.organicmaps.sdk.bookmarks.data.Metadata;
|
||||||
import app.organicmaps.sdk.editor.OpeningHours;
|
import app.organicmaps.sdk.editor.OpeningHours;
|
||||||
import app.organicmaps.sdk.editor.data.TimeFormatUtils;
|
import app.organicmaps.editor.data.TimeFormatUtils;
|
||||||
import app.organicmaps.sdk.editor.data.Timespan;
|
import app.organicmaps.sdk.editor.data.Timespan;
|
||||||
import app.organicmaps.sdk.editor.data.Timetable;
|
import app.organicmaps.sdk.editor.data.Timetable;
|
||||||
import app.organicmaps.sdk.util.UiUtils;
|
import app.organicmaps.sdk.util.UiUtils;
|
||||||
|
|||||||
Reference in New Issue
Block a user