mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-21 22:03: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() {
|
||||
@Override
|
||||
public void onLocationUpdated(Location location)
|
||||
public void onLocationUpdated(@NonNull Location location)
|
||||
{
|
||||
if (mCurrentCountry != null)
|
||||
return;
|
||||
|
||||
@@ -22,7 +22,7 @@ public class MapPlaceholderActivity extends BaseMwmFragmentActivity implements D
|
||||
super.onSafeCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_map_placeholder);
|
||||
|
||||
mDisplayManager = DisplayManager.from(this);
|
||||
mDisplayManager = MwmApplication.from(this).getDisplayManager();
|
||||
mDisplayManager.addListener(DisplayType.Device, this);
|
||||
|
||||
findViewById(R.id.btn_continue).setOnClickListener((unused) -> mDisplayManager.changeDisplay(DisplayType.Device));
|
||||
|
||||
@@ -569,7 +569,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
|
||||
mShareLauncher = SharingUtils.RegisterLauncher(this);
|
||||
|
||||
mDisplayManager = DisplayManager.from(this);
|
||||
mDisplayManager = MwmApplication.from(this).getDisplayManager();
|
||||
if (mDisplayManager.isCarDisplayUsed())
|
||||
{
|
||||
mRemoveDisplayListener = false;
|
||||
|
||||
@@ -90,7 +90,7 @@ public class SplashActivity extends AppCompatActivity
|
||||
});
|
||||
mShareLauncher = SharingUtils.RegisterLauncher(this);
|
||||
|
||||
if (DisplayManager.from(this).isCarDisplayUsed())
|
||||
if (MwmApplication.from(this).getDisplayManager().isCarDisplayUsed())
|
||||
{
|
||||
startActivity(new Intent(this, MapPlaceholderActivity.class));
|
||||
finish();
|
||||
|
||||
@@ -27,6 +27,7 @@ import app.organicmaps.dialog.EditTextDialogFragment;
|
||||
import app.organicmaps.sdk.bookmarks.data.BookmarkCategory;
|
||||
import app.organicmaps.sdk.bookmarks.data.BookmarkManager;
|
||||
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.util.StorageUtils;
|
||||
import app.organicmaps.sdk.util.concurrency.ThreadPool;
|
||||
|
||||
@@ -112,7 +112,7 @@ public final class CarAppSession extends Session implements DefaultLifecycleObse
|
||||
{
|
||||
Logger.d(TAG);
|
||||
mSensorsManager = new CarSensorsManager(getCarContext());
|
||||
mDisplayManager = DisplayManager.from(getCarContext());
|
||||
mDisplayManager = MwmApplication.from(getCarContext()).getDisplayManager();
|
||||
mDisplayManager.addListener(DisplayType.Car, this);
|
||||
init();
|
||||
}
|
||||
|
||||
@@ -14,11 +14,11 @@ import androidx.car.app.SurfaceContainer;
|
||||
import androidx.lifecycle.DefaultLifecycleObserver;
|
||||
import androidx.lifecycle.Lifecycle;
|
||||
import androidx.lifecycle.LifecycleOwner;
|
||||
import app.organicmaps.MwmApplication;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.Framework;
|
||||
import app.organicmaps.sdk.Map;
|
||||
import app.organicmaps.sdk.MapRenderingListener;
|
||||
import app.organicmaps.sdk.display.DisplayManager;
|
||||
import app.organicmaps.sdk.settings.UnitLocale;
|
||||
import app.organicmaps.sdk.util.concurrency.UiThread;
|
||||
import app.organicmaps.sdk.util.log.Logger;
|
||||
@@ -116,7 +116,7 @@ public class SurfaceRenderer implements DefaultLifecycleObserver, SurfaceCallbac
|
||||
{
|
||||
Logger.d(TAG);
|
||||
mMap.onResume();
|
||||
if (DisplayManager.from(mCarContext).isCarDisplayUsed())
|
||||
if (MwmApplication.from(mCarContext).getDisplayManager().isCarDisplayUsed())
|
||||
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.Template;
|
||||
import androidx.core.graphics.drawable.IconCompat;
|
||||
import app.organicmaps.MwmApplication;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.car.screens.base.BaseScreen;
|
||||
import app.organicmaps.sdk.display.DisplayManager;
|
||||
import app.organicmaps.sdk.display.DisplayType;
|
||||
|
||||
public class MapPlaceholderScreen extends BaseScreen
|
||||
@@ -33,9 +33,11 @@ public class MapPlaceholderScreen extends BaseScreen
|
||||
builder.setHeader(headerBuilder.build());
|
||||
builder.setIcon(
|
||||
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))
|
||||
.setOnClickListener(() -> DisplayManager.from(getCarContext()).changeDisplay(DisplayType.Car))
|
||||
.setOnClickListener(
|
||||
() -> MwmApplication.from(getCarContext()).getDisplayManager().changeDisplay(DisplayType.Car))
|
||||
.build());
|
||||
|
||||
return builder.build();
|
||||
|
||||
@@ -9,6 +9,7 @@ import androidx.car.app.CarContext;
|
||||
import androidx.car.app.Screen;
|
||||
import androidx.car.app.ScreenManager;
|
||||
import androidx.car.app.notification.CarPendingIntent;
|
||||
import app.organicmaps.MwmApplication;
|
||||
import app.organicmaps.api.Const;
|
||||
import app.organicmaps.car.CarAppService;
|
||||
import app.organicmaps.car.SurfaceRenderer;
|
||||
@@ -106,7 +107,7 @@ public final class IntentUtils
|
||||
{
|
||||
final ScreenManager screenManager = carContext.getCarService(ScreenManager.class);
|
||||
final Screen top = screenManager.getTop();
|
||||
final DisplayManager displayManager = DisplayManager.from(carContext);
|
||||
final DisplayManager displayManager = MwmApplication.from(carContext).getDisplayManager();
|
||||
if (!displayManager.isCarDisplayUsed())
|
||||
displayManager.changeDisplay(DisplayType.Car);
|
||||
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.data.LocalizedName;
|
||||
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.util.StringUtils;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
|
||||
@@ -15,7 +15,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.editor.OpeningHours;
|
||||
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.Timetable;
|
||||
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 androidx.annotation.IntRange;
|
||||
import androidx.annotation.NonNull;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.editor.data.Timespan;
|
||||
import app.organicmaps.sdk.editor.data.Timetable;
|
||||
import app.organicmaps.util.Utils;
|
||||
import java.text.DateFormatSymbols;
|
||||
import java.util.Locale;
|
||||
@@ -82,8 +82,8 @@ public final class OrganicMaps implements DefaultLifecycleObserver
|
||||
|
||||
Config.init(mContext);
|
||||
|
||||
mLocationHelper = new LocationHelper(mContext);
|
||||
mSensorHelper = new SensorHelper(mContext);
|
||||
mLocationHelper = new LocationHelper(mContext, mSensorHelper);
|
||||
mIsolinesManager = new IsolinesManager(mContext);
|
||||
mSubwayManager = new SubwayManager(mContext);
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@ import androidx.annotation.MainThread;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.WorkerThread;
|
||||
import app.organicmaps.bookmarks.DataChangedListener;
|
||||
import app.organicmaps.sdk.Framework;
|
||||
import app.organicmaps.sdk.util.KeyValue;
|
||||
import app.organicmaps.sdk.util.StorageUtils;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package app.organicmaps.bookmarks;
|
||||
package app.organicmaps.sdk.bookmarks.data;
|
||||
|
||||
public interface DataChangedListener
|
||||
{
|
||||
@@ -1,11 +1,9 @@
|
||||
package app.organicmaps.sdk.display;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import app.organicmaps.MwmApplication;
|
||||
import app.organicmaps.sdk.util.log.Logger;
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -39,13 +37,6 @@ public class DisplayManager
|
||||
@Nullable
|
||||
private DisplayHolder mCar;
|
||||
|
||||
@NonNull
|
||||
public static DisplayManager from(@NonNull Context context)
|
||||
{
|
||||
final MwmApplication app = (MwmApplication) context.getApplicationContext();
|
||||
return app.getDisplayManager();
|
||||
}
|
||||
|
||||
public boolean isCarConnected()
|
||||
{
|
||||
return mCar != null;
|
||||
|
||||
@@ -6,8 +6,8 @@ import androidx.annotation.Keep;
|
||||
import app.organicmaps.downloader.Android7RootCertificateWorkaround;
|
||||
import app.organicmaps.sdk.util.Constants;
|
||||
import app.organicmaps.sdk.util.StringUtils;
|
||||
import app.organicmaps.sdk.util.Utils;
|
||||
import app.organicmaps.sdk.util.log.Logger;
|
||||
import app.organicmaps.util.Utils;
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
package app.organicmaps.sdk.downloader;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import app.organicmaps.util.Utils;
|
||||
import androidx.core.util.Consumer;
|
||||
|
||||
class ExpandRetryConfirmationListener implements Runnable
|
||||
{
|
||||
@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;
|
||||
}
|
||||
@@ -18,6 +18,6 @@ class ExpandRetryConfirmationListener implements Runnable
|
||||
{
|
||||
if (mDialogClickListener == null)
|
||||
return;
|
||||
mDialogClickListener.invoke(true);
|
||||
mDialogClickListener.accept(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package app.organicmaps.sdk.downloader;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Application;
|
||||
import android.text.TextUtils;
|
||||
import androidx.annotation.Keep;
|
||||
import androidx.annotation.NonNull;
|
||||
@@ -9,10 +8,10 @@ import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.annotation.UiThread;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.core.util.Consumer;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.downloader.DownloaderService;
|
||||
import app.organicmaps.sdk.util.ConnectionState;
|
||||
import app.organicmaps.util.Utils;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.List;
|
||||
@@ -22,7 +21,6 @@ public final class MapManager
|
||||
{
|
||||
// Used by JNI.
|
||||
@Keep
|
||||
@SuppressWarnings("unused")
|
||||
public static class StorageCallbackData
|
||||
{
|
||||
public final String countryId;
|
||||
@@ -43,12 +41,10 @@ public final class MapManager
|
||||
{
|
||||
// Called from JNI.
|
||||
@Keep
|
||||
@SuppressWarnings("unused")
|
||||
void onStatusChanged(List<StorageCallbackData> data);
|
||||
|
||||
// Called from JNI.
|
||||
@Keep
|
||||
@SuppressWarnings("unused")
|
||||
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,
|
||||
@Nullable final Utils.Proc<Boolean> dialogClickListener)
|
||||
@Nullable final Consumer<Boolean> dialogClickListener)
|
||||
{
|
||||
if (!nativeIsAutoretryFailed())
|
||||
return;
|
||||
@@ -85,7 +81,7 @@ public final class MapManager
|
||||
}
|
||||
|
||||
public static void showErrorDialog(final Activity activity, final StorageCallbackData errorData,
|
||||
@Nullable final Utils.Proc<Boolean> dialogClickListener)
|
||||
@Nullable final Consumer<Boolean> dialogClickListener)
|
||||
{
|
||||
if (sCurrentErrorDialog != null)
|
||||
{
|
||||
@@ -101,11 +97,10 @@ public final class MapManager
|
||||
(dialog, which) -> {
|
||||
sCurrentErrorDialog = null;
|
||||
if (dialogClickListener != null)
|
||||
dialogClickListener.invoke(false);
|
||||
dialogClickListener.accept(false);
|
||||
})
|
||||
.setPositiveButton(R.string.downloader_retry,
|
||||
(dialog, which) -> {
|
||||
Application app = activity.getApplication();
|
||||
ExpandRetryConfirmationListener listener =
|
||||
new ExpandRetryConfirmationListener(dialogClickListener);
|
||||
warn3gAndRetry(activity, errorData.countryId, listener);
|
||||
|
||||
@@ -7,7 +7,6 @@ import androidx.annotation.Keep;
|
||||
*/
|
||||
// Called from JNI.
|
||||
@Keep
|
||||
@SuppressWarnings("unused")
|
||||
public final class UpdateInfo
|
||||
{
|
||||
public final int filesCount;
|
||||
|
||||
@@ -24,12 +24,6 @@ public final class OpeningHours
|
||||
@NonNull
|
||||
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
|
||||
public static native Timetable nativeSetIsFullday(Timetable timetable, boolean isFullday);
|
||||
|
||||
|
||||
@@ -41,6 +41,8 @@ public class LocationHelper implements BaseLocationProvider.Listener
|
||||
|
||||
@NonNull
|
||||
private final Context mContext;
|
||||
@NonNull
|
||||
private final SensorHelper mSensorHelper;
|
||||
|
||||
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;
|
||||
mSensorHelper = sensorHelper;
|
||||
mLocationProvider = LocationProviderFactory.getProvider(mContext, this);
|
||||
mHandler = new Handler();
|
||||
}
|
||||
@@ -361,7 +364,7 @@ public class LocationHelper implements BaseLocationProvider.Listener
|
||||
checkForAgpsUpdates();
|
||||
|
||||
if (LocationUtils.checkFineLocationPermission(mContext))
|
||||
MwmApplication.from(mContext).getSensorHelper().start();
|
||||
mSensorHelper.start();
|
||||
|
||||
final long oldInterval = mInterval;
|
||||
mInterval = calcLocationUpdatesInterval();
|
||||
@@ -387,7 +390,7 @@ public class LocationHelper implements BaseLocationProvider.Listener
|
||||
Logger.i(TAG);
|
||||
mLocationProvider.stop();
|
||||
unsubscribeFromGnssStatusUpdates();
|
||||
MwmApplication.from(mContext).getSensorHelper().stop();
|
||||
mSensorHelper.stop();
|
||||
mHandler.removeCallbacks(mLocationTimeoutRunnable);
|
||||
mActive = false;
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
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
|
||||
{
|
||||
|
||||
@@ -8,7 +8,6 @@ import androidx.annotation.IntDef;
|
||||
import androidx.annotation.IntRange;
|
||||
import androidx.annotation.Keep;
|
||||
import androidx.annotation.NonNull;
|
||||
import app.organicmaps.MwmApplication;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
@@ -31,7 +30,7 @@ public final class BatteryState
|
||||
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
|
||||
// Because it's a sticky intent, you don't need to register a BroadcastReceiver
|
||||
// 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)
|
||||
return new State(0, CHARGING_STATUS_UNKNOWN);
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@ package app.organicmaps.sdk.util;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import app.organicmaps.util.Utils;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.InputStream;
|
||||
import java.security.KeyStore;
|
||||
|
||||
@@ -219,8 +219,8 @@ public final class Config
|
||||
public static String getCurrentUiTheme(@NonNull Context context)
|
||||
{
|
||||
// This is the actual map theme, only set to theme_default/night
|
||||
String defaultTheme = MwmApplication.from(context).getString(R.string.theme_default);
|
||||
String res = getString(KEY_MISC_UI_THEME, defaultTheme);
|
||||
final String defaultTheme = context.getString(R.string.theme_default);
|
||||
final String res = getString(KEY_MISC_UI_THEME, defaultTheme);
|
||||
|
||||
if (ThemeUtils.isValidTheme(context, res))
|
||||
return res;
|
||||
@@ -240,8 +240,8 @@ public final class Config
|
||||
public static String getUiThemeSettings(@NonNull Context context)
|
||||
{
|
||||
// This is the default theme *mode*, eg. auto/dark/nav_auto/light.
|
||||
String defaultSetting = MwmApplication.from(context).getString(R.string.theme_nav_auto);
|
||||
String res = getString(KEY_MISC_UI_THEME_SETTINGS, defaultSetting);
|
||||
final String defaultSetting = context.getString(R.string.theme_nav_auto);
|
||||
final String res = getString(KEY_MISC_UI_THEME_SETTINGS, defaultSetting);
|
||||
if (ThemeUtils.isValidTheme(context, res) || ThemeUtils.isAutoTheme(context, res)
|
||||
|| ThemeUtils.isNavAutoTheme(context, res))
|
||||
return res;
|
||||
|
||||
@@ -13,7 +13,6 @@ import androidx.annotation.IntDef;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import app.organicmaps.sdk.Framework;
|
||||
import app.organicmaps.util.Utils;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
|
||||
@@ -13,7 +13,6 @@ import androidx.core.content.FileProvider;
|
||||
import androidx.documentfile.provider.DocumentFile;
|
||||
import app.organicmaps.BuildConfig;
|
||||
import app.organicmaps.sdk.util.log.Logger;
|
||||
import app.organicmaps.util.Utils;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
@@ -155,14 +154,6 @@ public class StorageUtils
|
||||
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
|
||||
{
|
||||
if (from == null || to == null)
|
||||
@@ -175,6 +166,15 @@ public class StorageUtils
|
||||
|
||||
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)
|
||||
throws IOException
|
||||
{
|
||||
|
||||
@@ -5,7 +5,6 @@ import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.Pair;
|
||||
import androidx.annotation.NonNull;
|
||||
import app.organicmaps.MwmApplication;
|
||||
import app.organicmaps.R;
|
||||
import java.text.NumberFormat;
|
||||
import java.util.Locale;
|
||||
@@ -74,11 +73,11 @@ public class StringUtils
|
||||
if (value == 0)
|
||||
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);
|
||||
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()
|
||||
|
||||
@@ -134,7 +134,7 @@ public enum ThemeSwitcher
|
||||
{
|
||||
// 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.
|
||||
if (DisplayManager.from(mContext).isCarDisplayUsed())
|
||||
if (MwmApplication.from(mContext).getDisplayManager().isCarDisplayUsed())
|
||||
return;
|
||||
// If rendering is not active we can mark map style, because all graphics
|
||||
// will be recreated after rendering activation.
|
||||
|
||||
@@ -2,6 +2,10 @@ package app.organicmaps.sdk.util;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
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.os.Build;
|
||||
import android.text.TextUtils;
|
||||
@@ -14,9 +18,12 @@ import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
import app.organicmaps.BuildConfig;
|
||||
import app.organicmaps.sdk.util.log.Logger;
|
||||
import java.io.Closeable;
|
||||
import java.io.IOException;
|
||||
import java.text.DecimalFormatSymbols;
|
||||
import java.util.Currency;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
@Keep
|
||||
public class Utils
|
||||
@@ -262,8 +269,75 @@ public class Utils
|
||||
return brand;
|
||||
return context.getString(nameId);
|
||||
}
|
||||
catch (Resources.NotFoundException e)
|
||||
catch (Resources.NotFoundException ignored)
|
||||
{}
|
||||
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() {
|
||||
@Override
|
||||
public void onLocationUpdated(Location location)
|
||||
public void onLocationUpdated(@NonNull Location location)
|
||||
{
|
||||
mLastPosition.set(location.getLatitude(), location.getLongitude());
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ import android.view.View;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
import androidx.annotation.NonNull;
|
||||
import app.organicmaps.sdk.util.Utils;
|
||||
import app.organicmaps.sdk.util.concurrency.UiThread;
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package app.organicmaps.util;
|
||||
|
||||
import static app.organicmaps.sdk.util.Utils.isIntentSupported;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.ClipData;
|
||||
@@ -8,7 +10,6 @@ import android.content.Intent;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
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.LogsManager;
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
import java.io.Closeable;
|
||||
import java.io.IOException;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.Map;
|
||||
|
||||
@Keep
|
||||
public class Utils
|
||||
@@ -130,20 +128,6 @@ public class Utils
|
||||
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)
|
||||
{
|
||||
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);
|
||||
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)
|
||||
{
|
||||
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://");
|
||||
}
|
||||
|
||||
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).
|
||||
|
||||
/**
|
||||
@@ -421,12 +366,6 @@ public class Utils
|
||||
|
||||
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)
|
||||
{
|
||||
if (TextUtils.isEmpty(level))
|
||||
@@ -507,21 +446,6 @@ public class Utils
|
||||
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")
|
||||
private static PackageInfo getPackageInfoOld(@NonNull PackageManager manager, @NonNull String packageName, int flags)
|
||||
throws PackageManager.NameNotFoundException
|
||||
|
||||
@@ -7,9 +7,9 @@ import android.view.Menu;
|
||||
import android.view.View;
|
||||
import android.widget.PopupMenu;
|
||||
import androidx.annotation.NonNull;
|
||||
import app.organicmaps.MwmApplication;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.Framework;
|
||||
import app.organicmaps.sdk.display.DisplayManager;
|
||||
import app.organicmaps.util.Utils;
|
||||
import com.google.android.material.bottomsheet.BottomSheetBehavior;
|
||||
import java.util.List;
|
||||
@@ -21,7 +21,7 @@ public class PlacePageUtils
|
||||
parent.post(() -> {
|
||||
// Because of the post(), this lambda is called after the car.SurfaceRenderer.onStableAreaChanged() and breaks the
|
||||
// visibleRect configuration
|
||||
if (DisplayManager.from(parent.getContext()).isCarDisplayUsed())
|
||||
if (MwmApplication.from(parent.getContext()).getDisplayManager().isCarDisplayUsed())
|
||||
return;
|
||||
final int screenWidth = parent.getWidth();
|
||||
if (placePageDistanceToTop >= viewportMinHeight)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package app.organicmaps.widget.placepage.sections;
|
||||
|
||||
import static app.organicmaps.sdk.editor.data.TimeFormatUtils.formatNonBusinessTime;
|
||||
import static app.organicmaps.sdk.editor.data.TimeFormatUtils.formatWeekdaysRange;
|
||||
import static app.organicmaps.editor.data.TimeFormatUtils.formatNonBusinessTime;
|
||||
import static app.organicmaps.editor.data.TimeFormatUtils.formatWeekdaysRange;
|
||||
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
@@ -18,7 +18,6 @@ import java.util.Arrays;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class PlaceOpeningHoursAdapter extends RecyclerView.Adapter<PlaceOpeningHoursAdapter.ViewHolder>
|
||||
{
|
||||
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.Metadata;
|
||||
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.Timetable;
|
||||
import app.organicmaps.sdk.util.UiUtils;
|
||||
|
||||
Reference in New Issue
Block a user