[android][sdk] Fix dependecies in sdk package

Signed-off-by: Andrei Shkrob <github@shkrob.dev>
This commit is contained in:
Andrei Shkrob
2025-06-25 23:01:05 +02:00
committed by Konstantin Pastbin
parent 6136abb33a
commit 3920988ef4
37 changed files with 141 additions and 160 deletions

View File

@@ -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;

View File

@@ -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));

View File

@@ -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;

View File

@@ -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();

View File

@@ -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;

View File

@@ -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();
}

View File

@@ -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));
}

View File

@@ -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();

View File

@@ -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))

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -1,4 +1,4 @@
package app.organicmaps.bookmarks;
package app.organicmaps.sdk.bookmarks.data;
public interface DataChangedListener
{

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);
}
}

View File

@@ -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);

View File

@@ -7,7 +7,6 @@ import androidx.annotation.Keep;
*/
// Called from JNI.
@Keep
@SuppressWarnings("unused")
public final class UpdateInfo
{
public final int filesCount;

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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
{

View File

@@ -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);

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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
{

View File

@@ -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()

View File

@@ -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.

View File

@@ -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));
}
}

View File

@@ -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());

View File

@@ -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;

View File

@@ -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

View File

@@ -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)

View File

@@ -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();

View File

@@ -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;