diff --git a/android/app/src/main/java/app/organicmaps/DownloadResourcesLegacyActivity.java b/android/app/src/main/java/app/organicmaps/DownloadResourcesLegacyActivity.java index e022488a8..afbb787d5 100644 --- a/android/app/src/main/java/app/organicmaps/DownloadResourcesLegacyActivity.java +++ b/android/app/src/main/java/app/organicmaps/DownloadResourcesLegacyActivity.java @@ -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; diff --git a/android/app/src/main/java/app/organicmaps/MapPlaceholderActivity.java b/android/app/src/main/java/app/organicmaps/MapPlaceholderActivity.java index c1e4addc6..bf1651c04 100644 --- a/android/app/src/main/java/app/organicmaps/MapPlaceholderActivity.java +++ b/android/app/src/main/java/app/organicmaps/MapPlaceholderActivity.java @@ -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)); diff --git a/android/app/src/main/java/app/organicmaps/MwmActivity.java b/android/app/src/main/java/app/organicmaps/MwmActivity.java index 74eed74f6..c4c38ffca 100644 --- a/android/app/src/main/java/app/organicmaps/MwmActivity.java +++ b/android/app/src/main/java/app/organicmaps/MwmActivity.java @@ -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; diff --git a/android/app/src/main/java/app/organicmaps/SplashActivity.java b/android/app/src/main/java/app/organicmaps/SplashActivity.java index 592d016cb..620f6d500 100644 --- a/android/app/src/main/java/app/organicmaps/SplashActivity.java +++ b/android/app/src/main/java/app/organicmaps/SplashActivity.java @@ -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(); diff --git a/android/app/src/main/java/app/organicmaps/bookmarks/BookmarkCategoriesFragment.java b/android/app/src/main/java/app/organicmaps/bookmarks/BookmarkCategoriesFragment.java index 5401985e5..e0948e4ca 100644 --- a/android/app/src/main/java/app/organicmaps/bookmarks/BookmarkCategoriesFragment.java +++ b/android/app/src/main/java/app/organicmaps/bookmarks/BookmarkCategoriesFragment.java @@ -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; diff --git a/android/app/src/main/java/app/organicmaps/car/CarAppSession.java b/android/app/src/main/java/app/organicmaps/car/CarAppSession.java index 0047bea0b..e4eb30450 100644 --- a/android/app/src/main/java/app/organicmaps/car/CarAppSession.java +++ b/android/app/src/main/java/app/organicmaps/car/CarAppSession.java @@ -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(); } diff --git a/android/app/src/main/java/app/organicmaps/car/SurfaceRenderer.java b/android/app/src/main/java/app/organicmaps/car/SurfaceRenderer.java index f9ab49110..9cb01e40d 100644 --- a/android/app/src/main/java/app/organicmaps/car/SurfaceRenderer.java +++ b/android/app/src/main/java/app/organicmaps/car/SurfaceRenderer.java @@ -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)); } diff --git a/android/app/src/main/java/app/organicmaps/car/screens/MapPlaceholderScreen.java b/android/app/src/main/java/app/organicmaps/car/screens/MapPlaceholderScreen.java index 3026c6a47..467ddb0af 100644 --- a/android/app/src/main/java/app/organicmaps/car/screens/MapPlaceholderScreen.java +++ b/android/app/src/main/java/app/organicmaps/car/screens/MapPlaceholderScreen.java @@ -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,10 +33,12 @@ 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() - .setTitle(getCarContext().getString(R.string.car_continue_in_the_car)) - .setOnClickListener(() -> DisplayManager.from(getCarContext()).changeDisplay(DisplayType.Car)) - .build()); + builder.addAction( + new Action.Builder() + .setTitle(getCarContext().getString(R.string.car_continue_in_the_car)) + .setOnClickListener( + () -> MwmApplication.from(getCarContext()).getDisplayManager().changeDisplay(DisplayType.Car)) + .build()); return builder.build(); } diff --git a/android/app/src/main/java/app/organicmaps/car/util/IntentUtils.java b/android/app/src/main/java/app/organicmaps/car/util/IntentUtils.java index 9ace96788..776e95e63 100644 --- a/android/app/src/main/java/app/organicmaps/car/util/IntentUtils.java +++ b/android/app/src/main/java/app/organicmaps/car/util/IntentUtils.java @@ -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)) diff --git a/android/app/src/main/java/app/organicmaps/editor/EditorFragment.java b/android/app/src/main/java/app/organicmaps/editor/EditorFragment.java index 0268cb468..2f9b02caa 100644 --- a/android/app/src/main/java/app/organicmaps/editor/EditorFragment.java +++ b/android/app/src/main/java/app/organicmaps/editor/EditorFragment.java @@ -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; diff --git a/android/app/src/main/java/app/organicmaps/editor/SimpleTimetableAdapter.java b/android/app/src/main/java/app/organicmaps/editor/SimpleTimetableAdapter.java index 4e25eccbf..0b2d20002 100644 --- a/android/app/src/main/java/app/organicmaps/editor/SimpleTimetableAdapter.java +++ b/android/app/src/main/java/app/organicmaps/editor/SimpleTimetableAdapter.java @@ -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; diff --git a/android/app/src/main/java/app/organicmaps/sdk/editor/data/TimeFormatUtils.java b/android/app/src/main/java/app/organicmaps/editor/data/TimeFormatUtils.java similarity index 96% rename from android/app/src/main/java/app/organicmaps/sdk/editor/data/TimeFormatUtils.java rename to android/app/src/main/java/app/organicmaps/editor/data/TimeFormatUtils.java index 77371d27e..f70b601af 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/editor/data/TimeFormatUtils.java +++ b/android/app/src/main/java/app/organicmaps/editor/data/TimeFormatUtils.java @@ -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; diff --git a/android/app/src/main/java/app/organicmaps/sdk/OrganicMaps.java b/android/app/src/main/java/app/organicmaps/sdk/OrganicMaps.java index cc25e0c95..4c3aa699e 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/OrganicMaps.java +++ b/android/app/src/main/java/app/organicmaps/sdk/OrganicMaps.java @@ -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); } diff --git a/android/app/src/main/java/app/organicmaps/sdk/bookmarks/data/BookmarkManager.java b/android/app/src/main/java/app/organicmaps/sdk/bookmarks/data/BookmarkManager.java index c2e34b256..ae0fdc7fa 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/bookmarks/data/BookmarkManager.java +++ b/android/app/src/main/java/app/organicmaps/sdk/bookmarks/data/BookmarkManager.java @@ -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; diff --git a/android/app/src/main/java/app/organicmaps/bookmarks/DataChangedListener.java b/android/app/src/main/java/app/organicmaps/sdk/bookmarks/data/DataChangedListener.java similarity index 58% rename from android/app/src/main/java/app/organicmaps/bookmarks/DataChangedListener.java rename to android/app/src/main/java/app/organicmaps/sdk/bookmarks/data/DataChangedListener.java index 07b5c51cf..fc8afa41a 100644 --- a/android/app/src/main/java/app/organicmaps/bookmarks/DataChangedListener.java +++ b/android/app/src/main/java/app/organicmaps/sdk/bookmarks/data/DataChangedListener.java @@ -1,4 +1,4 @@ -package app.organicmaps.bookmarks; +package app.organicmaps.sdk.bookmarks.data; public interface DataChangedListener { diff --git a/android/app/src/main/java/app/organicmaps/sdk/display/DisplayManager.java b/android/app/src/main/java/app/organicmaps/sdk/display/DisplayManager.java index df81cc2b4..8fff80abd 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/display/DisplayManager.java +++ b/android/app/src/main/java/app/organicmaps/sdk/display/DisplayManager.java @@ -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; diff --git a/android/app/src/main/java/app/organicmaps/sdk/downloader/ChunkTask.java b/android/app/src/main/java/app/organicmaps/sdk/downloader/ChunkTask.java index cf99e1715..ce2133137 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/downloader/ChunkTask.java +++ b/android/app/src/main/java/app/organicmaps/sdk/downloader/ChunkTask.java @@ -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; diff --git a/android/app/src/main/java/app/organicmaps/sdk/downloader/ExpandRetryConfirmationListener.java b/android/app/src/main/java/app/organicmaps/sdk/downloader/ExpandRetryConfirmationListener.java index 11bc06d65..29e05694b 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/downloader/ExpandRetryConfirmationListener.java +++ b/android/app/src/main/java/app/organicmaps/sdk/downloader/ExpandRetryConfirmationListener.java @@ -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 mDialogClickListener; + private final Consumer mDialogClickListener; - ExpandRetryConfirmationListener(@Nullable Utils.Proc dialogClickListener) + ExpandRetryConfirmationListener(@Nullable Consumer dialogClickListener) { mDialogClickListener = dialogClickListener; } @@ -18,6 +18,6 @@ class ExpandRetryConfirmationListener implements Runnable { if (mDialogClickListener == null) return; - mDialogClickListener.invoke(true); + mDialogClickListener.accept(true); } } diff --git a/android/app/src/main/java/app/organicmaps/sdk/downloader/MapManager.java b/android/app/src/main/java/app/organicmaps/sdk/downloader/MapManager.java index 29fc4e026..d98778132 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/downloader/MapManager.java +++ b/android/app/src/main/java/app/organicmaps/sdk/downloader/MapManager.java @@ -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 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 dialogClickListener) + @Nullable final Consumer 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 dialogClickListener) + @Nullable final Consumer 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); diff --git a/android/app/src/main/java/app/organicmaps/sdk/downloader/UpdateInfo.java b/android/app/src/main/java/app/organicmaps/sdk/downloader/UpdateInfo.java index 244a983cd..5ced20b0e 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/downloader/UpdateInfo.java +++ b/android/app/src/main/java/app/organicmaps/sdk/downloader/UpdateInfo.java @@ -7,7 +7,6 @@ import androidx.annotation.Keep; */ // Called from JNI. @Keep -@SuppressWarnings("unused") public final class UpdateInfo { public final int filesCount; diff --git a/android/app/src/main/java/app/organicmaps/sdk/editor/OpeningHours.java b/android/app/src/main/java/app/organicmaps/sdk/editor/OpeningHours.java index 86f018c44..511839c48 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/editor/OpeningHours.java +++ b/android/app/src/main/java/app/organicmaps/sdk/editor/OpeningHours.java @@ -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); diff --git a/android/app/src/main/java/app/organicmaps/sdk/location/LocationHelper.java b/android/app/src/main/java/app/organicmaps/sdk/location/LocationHelper.java index 10d5bdbfd..7cf9cfdda 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/location/LocationHelper.java +++ b/android/app/src/main/java/app/organicmaps/sdk/location/LocationHelper.java @@ -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; } diff --git a/android/app/src/main/java/app/organicmaps/sdk/location/LocationState.java b/android/app/src/main/java/app/organicmaps/sdk/location/LocationState.java index 1d039fd9a..2478a15cd 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/location/LocationState.java +++ b/android/app/src/main/java/app/organicmaps/sdk/location/LocationState.java @@ -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 { diff --git a/android/app/src/main/java/app/organicmaps/sdk/util/BatteryState.java b/android/app/src/main/java/app/organicmaps/sdk/util/BatteryState.java index a14058608..f6fe33387 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/util/BatteryState.java +++ b/android/app/src/main/java/app/organicmaps/sdk/util/BatteryState.java @@ -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); diff --git a/android/app/src/main/java/app/organicmaps/sdk/util/ClientCertTLSSocketFactory.java b/android/app/src/main/java/app/organicmaps/sdk/util/ClientCertTLSSocketFactory.java index 1b95aaedc..c9e0f7054 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/util/ClientCertTLSSocketFactory.java +++ b/android/app/src/main/java/app/organicmaps/sdk/util/ClientCertTLSSocketFactory.java @@ -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; diff --git a/android/app/src/main/java/app/organicmaps/sdk/util/Config.java b/android/app/src/main/java/app/organicmaps/sdk/util/Config.java index c041b3a42..693ddba52 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/util/Config.java +++ b/android/app/src/main/java/app/organicmaps/sdk/util/Config.java @@ -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; diff --git a/android/app/src/main/java/app/organicmaps/sdk/util/PowerManagment.java b/android/app/src/main/java/app/organicmaps/sdk/util/PowerManagment.java index 1ab5c2f8a..7fd1daeb5 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/util/PowerManagment.java +++ b/android/app/src/main/java/app/organicmaps/sdk/util/PowerManagment.java @@ -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; diff --git a/android/app/src/main/java/app/organicmaps/sdk/util/StorageUtils.java b/android/app/src/main/java/app/organicmaps/sdk/util/StorageUtils.java index 47556bb82..15eb6fbbc 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/util/StorageUtils.java +++ b/android/app/src/main/java/app/organicmaps/sdk/util/StorageUtils.java @@ -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 { diff --git a/android/app/src/main/java/app/organicmaps/sdk/util/StringUtils.java b/android/app/src/main/java/app/organicmaps/sdk/util/StringUtils.java index 8e81cdb62..1512c6898 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/util/StringUtils.java +++ b/android/app/src/main/java/app/organicmaps/sdk/util/StringUtils.java @@ -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() diff --git a/android/app/src/main/java/app/organicmaps/sdk/util/ThemeSwitcher.java b/android/app/src/main/java/app/organicmaps/sdk/util/ThemeSwitcher.java index 5b41dc9b4..0acd89688 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/util/ThemeSwitcher.java +++ b/android/app/src/main/java/app/organicmaps/sdk/util/ThemeSwitcher.java @@ -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. diff --git a/android/app/src/main/java/app/organicmaps/sdk/util/Utils.java b/android/app/src/main/java/app/organicmaps/sdk/util/Utils.java index 4d9a69840..481db78b6 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/util/Utils.java +++ b/android/app/src/main/java/app/organicmaps/sdk/util/Utils.java @@ -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 String mapPrettyPrint(Map 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)); + } } diff --git a/android/app/src/main/java/app/organicmaps/search/SearchFragment.java b/android/app/src/main/java/app/organicmaps/search/SearchFragment.java index 4a6867449..bdfefb629 100644 --- a/android/app/src/main/java/app/organicmaps/search/SearchFragment.java +++ b/android/app/src/main/java/app/organicmaps/search/SearchFragment.java @@ -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()); diff --git a/android/app/src/main/java/app/organicmaps/util/InputUtils.java b/android/app/src/main/java/app/organicmaps/util/InputUtils.java index 78eaa82d5..6bdc550af 100644 --- a/android/app/src/main/java/app/organicmaps/util/InputUtils.java +++ b/android/app/src/main/java/app/organicmaps/util/InputUtils.java @@ -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; diff --git a/android/app/src/main/java/app/organicmaps/util/Utils.java b/android/app/src/main/java/app/organicmaps/util/Utils.java index d970619b7..5c6614da1 100644 --- a/android/app/src/main/java/app/organicmaps/util/Utils.java +++ b/android/app/src/main/java/app/organicmaps/util/Utils.java @@ -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 String mapPrettyPrint(Map 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 - { - 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 diff --git a/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageUtils.java b/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageUtils.java index 06be329c9..ff3b05d6e 100644 --- a/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageUtils.java +++ b/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageUtils.java @@ -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) diff --git a/android/app/src/main/java/app/organicmaps/widget/placepage/sections/PlaceOpeningHoursAdapter.java b/android/app/src/main/java/app/organicmaps/widget/placepage/sections/PlaceOpeningHoursAdapter.java index cb32d82d0..b1b5297f9 100644 --- a/android/app/src/main/java/app/organicmaps/widget/placepage/sections/PlaceOpeningHoursAdapter.java +++ b/android/app/src/main/java/app/organicmaps/widget/placepage/sections/PlaceOpeningHoursAdapter.java @@ -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 { private List mWeekSchedule = Collections.emptyList(); diff --git a/android/app/src/main/java/app/organicmaps/widget/placepage/sections/PlacePageOpeningHoursFragment.java b/android/app/src/main/java/app/organicmaps/widget/placepage/sections/PlacePageOpeningHoursFragment.java index b81019035..060cdea8a 100644 --- a/android/app/src/main/java/app/organicmaps/widget/placepage/sections/PlacePageOpeningHoursFragment.java +++ b/android/app/src/main/java/app/organicmaps/widget/placepage/sections/PlacePageOpeningHoursFragment.java @@ -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;