diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0bb769674..600bd5211 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -207,9 +207,7 @@ dependencies { implementation("com.github.QuadFlask:colorpicker:0.0.15") implementation("com.github.openid:AppAuth-Android:27b62d5") - // https://github.com/mapbox/mapbox-gl-native-android/issues/316 - genericImplementation("com.mapbox.mapboxsdk:mapbox-android-sdk:7.4.1") - genericImplementation("com.mapbox.mapboxsdk:mapbox-android-telemetry:6.1.0") + genericImplementation("org.osmdroid:osmdroid-android:6.1.10@aar") googleplayImplementation("com.google.firebase:firebase-crashlytics:${Versions.crashlytics}") googleplayImplementation("com.google.firebase:firebase-analytics:${Versions.analytics}") { diff --git a/app/src/generic/java/org/tasks/injection/LocationModule.kt b/app/src/generic/java/org/tasks/injection/LocationModule.kt index 213bfe4b4..86af508b9 100644 --- a/app/src/generic/java/org/tasks/injection/LocationModule.kt +++ b/app/src/generic/java/org/tasks/injection/LocationModule.kt @@ -10,8 +10,8 @@ import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.scopes.ActivityScoped import dagger.hilt.android.scopes.ViewModelScoped import org.tasks.location.MapFragment -import org.tasks.location.MapboxMapFragment import org.tasks.location.MapboxSearchProvider +import org.tasks.location.OsmMapFragment import org.tasks.location.PlaceSearchProvider @Module @@ -26,6 +26,6 @@ class LocationModule { @Provides @ActivityScoped fun getMapFragment(@ApplicationContext context: Context): MapFragment { - return MapboxMapFragment(context) + return OsmMapFragment(context) } } \ No newline at end of file diff --git a/app/src/generic/java/org/tasks/location/MapboxMapFragment.java b/app/src/generic/java/org/tasks/location/MapboxMapFragment.java deleted file mode 100644 index 7c106db91..000000000 --- a/app/src/generic/java/org/tasks/location/MapboxMapFragment.java +++ /dev/null @@ -1,133 +0,0 @@ -package org.tasks.location; - -import android.annotation.SuppressLint; -import android.content.Context; -import androidx.annotation.NonNull; -import androidx.fragment.app.FragmentManager; -import com.mapbox.mapboxsdk.Mapbox; -import com.mapbox.mapboxsdk.annotations.Marker; -import com.mapbox.mapboxsdk.annotations.MarkerOptions; -import com.mapbox.mapboxsdk.camera.CameraPosition; -import com.mapbox.mapboxsdk.camera.CameraUpdate; -import com.mapbox.mapboxsdk.camera.CameraUpdateFactory; -import com.mapbox.mapboxsdk.geometry.LatLng; -import com.mapbox.mapboxsdk.location.LocationComponent; -import com.mapbox.mapboxsdk.location.modes.CameraMode; -import com.mapbox.mapboxsdk.location.modes.RenderMode; -import com.mapbox.mapboxsdk.maps.MapboxMap; -import com.mapbox.mapboxsdk.maps.MapboxMap.OnMarkerClickListener; -import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; -import com.mapbox.mapboxsdk.maps.Style; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.tasks.R; -import org.tasks.data.Place; - -public class MapboxMapFragment implements MapFragment, OnMapReadyCallback, OnMarkerClickListener { - - private static final String FRAG_TAG_MAP = "frag_tag_map"; - private final Context context; - private MapFragmentCallback callbacks; - private boolean dark; - private MapboxMap map; - private final Map markers = new HashMap<>(); - - public MapboxMapFragment(Context context) { - this.context = context; - } - - @Override - public void init(FragmentManager fragmentManager, MapFragmentCallback callbacks, boolean dark) { - this.callbacks = callbacks; - this.dark = dark; - Mapbox.getInstance(context, context.getString(R.string.mapbox_key)); - com.mapbox.mapboxsdk.maps.SupportMapFragment mapFragment = - (com.mapbox.mapboxsdk.maps.SupportMapFragment) - fragmentManager.findFragmentByTag(FRAG_TAG_MAP); - if (mapFragment == null) { - mapFragment = new com.mapbox.mapboxsdk.maps.SupportMapFragment(); - fragmentManager.beginTransaction().replace(R.id.map, mapFragment).commit(); - } - mapFragment.getMapAsync(this); - } - - @Override - public MapPosition getMapPosition() { - if (map == null) { - return null; - } - CameraPosition cameraPosition = map.getCameraPosition(); - LatLng target = cameraPosition.target; - return new MapPosition( - target.getLatitude(), target.getLongitude(), (float) cameraPosition.zoom); - } - - @Override - public void movePosition(MapPosition mapPosition, boolean animate) { - CameraUpdate cameraUpdate = - CameraUpdateFactory.newCameraPosition( - new CameraPosition.Builder() - .target(new LatLng(mapPosition.getLatitude(), mapPosition.getLongitude())) - .zoom(mapPosition.getZoom()) - .build()); - if (animate) { - map.animateCamera(cameraUpdate); - } else { - map.moveCamera(cameraUpdate); - } - } - - @Override - public void setMarkers(List places) { - if (map == null) { - return; - } - for (Marker marker : map.getMarkers()) { - map.removeMarker(marker); - } - markers.clear(); - for (Place place : places) { - Marker marker = - map.addMarker( - new MarkerOptions() - .setPosition(new LatLng(place.getLatitude(), place.getLongitude()))); - markers.put(marker, place); - } - } - - @Override - public void disableGestures() { - map.getUiSettings().setAllGesturesEnabled(false); - } - - @SuppressLint("MissingPermission") - @Override - public void showMyLocation() { - LocationComponent locationComponent = map.getLocationComponent(); - locationComponent.activateLocationComponent(context, map.getStyle()); - locationComponent.setLocationComponentEnabled(true); - locationComponent.setCameraMode(CameraMode.NONE); - locationComponent.setRenderMode(RenderMode.NORMAL); - } - - @Override - public void onMapReady(@NonNull MapboxMap mapboxMap) { - map = mapboxMap; - map.getUiSettings().setRotateGesturesEnabled(false); - map.setOnMarkerClickListener(this); - map.setStyle(dark ? Style.DARK : Style.MAPBOX_STREETS, style -> callbacks.onMapReady(this)); - } - - @Override - public int getMarkerId() { - return R.id.mapbox_marker; - } - - @Override - public boolean onMarkerClick(@NonNull Marker marker) { - Place place = markers.get(marker); - callbacks.onPlaceSelected(place); - return false; - } -} diff --git a/app/src/generic/java/org/tasks/location/OsmMapFragment.kt b/app/src/generic/java/org/tasks/location/OsmMapFragment.kt new file mode 100644 index 000000000..4124bd584 --- /dev/null +++ b/app/src/generic/java/org/tasks/location/OsmMapFragment.kt @@ -0,0 +1,98 @@ +package org.tasks.location + +import android.annotation.SuppressLint +import android.content.Context +import android.view.ViewGroup +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat +import androidx.preference.PreferenceManager +import org.osmdroid.config.Configuration +import org.osmdroid.tileprovider.tilesource.TileSourceFactory +import org.osmdroid.util.GeoPoint +import org.osmdroid.views.CustomZoomButtonsController +import org.osmdroid.views.MapView +import org.osmdroid.views.overlay.Marker +import org.osmdroid.views.overlay.TilesOverlay +import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider +import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay +import org.tasks.R +import org.tasks.data.Place +import org.tasks.location.MapFragment.MapFragmentCallback + +class OsmMapFragment(private val context: Context) : MapFragment { + private lateinit var callbacks: MapFragmentCallback + private lateinit var map: MapView + private var locationOverlay: MyLocationNewOverlay? = null + + override fun init(activity: AppCompatActivity, callbacks: MapFragmentCallback, dark: Boolean) { + this.callbacks = callbacks + Configuration.getInstance() + .load(activity, PreferenceManager.getDefaultSharedPreferences(activity)) + map = MapView(activity).apply { + isTilesScaledToDpi = true + setTileSource(TileSourceFactory.MAPNIK) + zoomController.setVisibility(CustomZoomButtonsController.Visibility.NEVER) + setMultiTouchControls(true) + if (dark) { + overlayManager.tilesOverlay.setColorFilter(TilesOverlay.INVERT_COLORS) + } + activity.findViewById(R.id.map).addView(this) + } + callbacks.onMapReady(this) + } + + override fun getMapPosition(): MapPosition { + val center = map.mapCenter + return MapPosition(center.latitude, center.longitude, map.zoomLevelDouble.toFloat()) + } + + override fun movePosition(mapPosition: MapPosition, animate: Boolean) { + val controller = map.controller + controller.setZoom(mapPosition.zoom.toDouble()) + val geoPoint = GeoPoint(mapPosition.latitude, mapPosition.longitude) + if (animate) { + controller.animateTo(geoPoint) + } else { + controller.setCenter(geoPoint) + } + } + + override fun setMarkers(places: List) { + val overlays = map.overlays + overlays.removeIf { it is Marker } + for (place in places) { + overlays.add(Marker(map).apply { + position = GeoPoint(place.latitude, place.longitude) + setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_CENTER) + icon = ContextCompat.getDrawable(context, R.drawable.map_marker_padding)!!.mutate() + setOnMarkerClickListener { _, _ -> + callbacks.onPlaceSelected(place) + false + } + }) + } + } + + override fun disableGestures() = map.setMultiTouchControls(false) + + @SuppressLint("MissingPermission") + override fun showMyLocation() { + locationOverlay = MyLocationNewOverlay(GpsMyLocationProvider(context), map).apply { + enableMyLocation() + enableAutoStop = false + } + map.overlays.add(locationOverlay) + } + + override fun onPause() { + locationOverlay?.disableMyLocation() + map.onPause() + } + + override fun onResume() { + locationOverlay?.enableMyLocation() + map.onResume() + } + + override fun onDestroy() = map.onDetach() +} \ No newline at end of file diff --git a/app/src/generic/res/drawable/map_marker_padding.xml b/app/src/generic/res/drawable/map_marker_padding.xml new file mode 100644 index 000000000..5dc65216a --- /dev/null +++ b/app/src/generic/res/drawable/map_marker_padding.xml @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/app/src/googleplay/java/org/tasks/location/GoogleMapFragment.kt b/app/src/googleplay/java/org/tasks/location/GoogleMapFragment.kt index f096c7ed4..5bc733402 100644 --- a/app/src/googleplay/java/org/tasks/location/GoogleMapFragment.kt +++ b/app/src/googleplay/java/org/tasks/location/GoogleMapFragment.kt @@ -2,7 +2,7 @@ package org.tasks.location import android.annotation.SuppressLint import android.content.Context -import androidx.fragment.app.FragmentManager +import androidx.appcompat.app.AppCompatActivity import com.google.android.gms.maps.CameraUpdateFactory import com.google.android.gms.maps.GoogleMap import com.google.android.gms.maps.OnMapReadyCallback @@ -19,9 +19,10 @@ class GoogleMapFragment(private val context: Context) : MapFragment, OnMapReadyC private var dark = false private var map: GoogleMap? = null - override fun init(fragmentManager: FragmentManager, callbacks: MapFragmentCallback, dark: Boolean) { + override fun init(activity: AppCompatActivity, callbacks: MapFragmentCallback, dark: Boolean) { this.callbacks = callbacks this.dark = dark + val fragmentManager = activity.supportFragmentManager var mapFragment = fragmentManager.findFragmentByTag(FRAG_TAG_MAP) as SupportMapFragment? if (mapFragment == null) { mapFragment = SupportMapFragment() @@ -89,7 +90,11 @@ class GoogleMapFragment(private val context: Context) : MapFragment, OnMapReadyC callbacks.onMapReady(this) } - override fun getMarkerId() = R.id.google_marker + override fun onPause() {} + + override fun onResume() {} + + override fun onDestroy() {} override fun onMarkerClick(marker: Marker): Boolean { callbacks.onPlaceSelected(marker.tag as Place?) diff --git a/app/src/googleplay/res/drawable/mapbox_marker_icon_default.xml b/app/src/googleplay/res/drawable/mapbox_marker_icon_default.xml deleted file mode 100644 index 7934ee66d..000000000 --- a/app/src/googleplay/res/drawable/mapbox_marker_icon_default.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/app/src/main/java/org/tasks/activities/PlaceSettingsActivity.kt b/app/src/main/java/org/tasks/activities/PlaceSettingsActivity.kt index f7e70d1f1..a2fb0e4c0 100644 --- a/app/src/main/java/org/tasks/activities/PlaceSettingsActivity.kt +++ b/app/src/main/java/org/tasks/activities/PlaceSettingsActivity.kt @@ -54,7 +54,7 @@ class PlaceSettingsActivity : BaseListSettingsActivity(), MapFragment.MapFragmen selectedIcon = place.getIcon()!! } - map.init(supportFragmentManager, this, tasksTheme.themeBase.isDarkTheme(this)) + map.init(this, this, tasksTheme.themeBase.isDarkTheme(this)) updateTheme() } diff --git a/app/src/main/java/org/tasks/location/LocationPickerActivity.kt b/app/src/main/java/org/tasks/location/LocationPickerActivity.kt index a8fce2b98..f8e21bd0d 100644 --- a/app/src/main/java/org/tasks/location/LocationPickerActivity.kt +++ b/app/src/main/java/org/tasks/location/LocationPickerActivity.kt @@ -140,7 +140,7 @@ class LocationPickerActivity : InjectingAppCompatActivity(), Toolbar.OnMenuItemC themeColor.setStatusBarColor(toolbarLayout) themeColor.apply(toolbar) val dark = theme.themeBase.isDarkTheme(this) - map.init(supportFragmentManager, this, dark) + map.init(this, this, dark) val params = appBarLayout.layoutParams as CoordinatorLayout.LayoutParams val behavior = AppBarLayout.Behavior() behavior.setDragCallback( @@ -166,13 +166,15 @@ class LocationPickerActivity : InjectingAppCompatActivity(), Toolbar.OnMenuItemC coordinatorLayout.removeOnLayoutChangeListener(this) locationDao .getPlaceUsage() - .observe(this@LocationPickerActivity, Observer { places: List -> updatePlaces(places) }) + .observe(this@LocationPickerActivity) { + places: List -> updatePlaces(places) + } } }) if (offset != 0) { appBarLayout.post { expandToolbar(false) } } - findViewById(map.markerId).visibility = View.VISIBLE + findViewById(R.id.google_marker).visibility = View.VISIBLE searchAdapter = LocationSearchAdapter(viewModel.getAttributionRes(dark), this) recentsAdapter = LocationPickerAdapter(this, inventory, colorProvider, this) recentsAdapter!!.setHasStableIds(true) @@ -298,6 +300,7 @@ class LocationPickerActivity : InjectingAppCompatActivity(), Toolbar.OnMenuItemC override fun onResume() { super.onResume() + map.onResume() viewModel.observe(this, Observer { list: List? -> searchAdapter!!.submitList(list) }, Observer { place: Place? -> returnPlace(place) }, Observer { error: Event -> handleError(error) }) disposables = CompositeDisposable( searchSubject @@ -306,6 +309,11 @@ class LocationPickerActivity : InjectingAppCompatActivity(), Toolbar.OnMenuItemC .subscribe { query: String? -> viewModel.query(query, mapPosition) }) } + override fun onDestroy() { + super.onDestroy() + map.onDestroy() + } + private fun handleError(error: Event) { val message = error.ifUnhandled if (!isNullOrEmpty(message)) { @@ -343,6 +351,7 @@ class LocationPickerActivity : InjectingAppCompatActivity(), Toolbar.OnMenuItemC override fun onPause() { super.onPause() + map.onPause() disposables!!.dispose() } diff --git a/app/src/main/java/org/tasks/location/MapFragment.java b/app/src/main/java/org/tasks/location/MapFragment.java index 79f2a2a2c..9afefdd40 100644 --- a/app/src/main/java/org/tasks/location/MapFragment.java +++ b/app/src/main/java/org/tasks/location/MapFragment.java @@ -1,13 +1,13 @@ package org.tasks.location; import androidx.annotation.Nullable; -import androidx.fragment.app.FragmentManager; +import androidx.appcompat.app.AppCompatActivity; import java.util.List; import org.tasks.data.Place; public interface MapFragment { - void init(FragmentManager fragmentManager, MapFragmentCallback callback, boolean dark); + void init(AppCompatActivity activity, MapFragmentCallback callback, boolean dark); @Nullable MapPosition getMapPosition(); @@ -19,7 +19,11 @@ public interface MapFragment { void showMyLocation(); - int getMarkerId(); + void onPause(); + + void onResume(); + + void onDestroy(); interface MapFragmentCallback { void onMapReady(MapFragment mapFragment); diff --git a/app/src/googleplay/res/drawable/mapbox_logo_icon.xml b/app/src/main/res/drawable/mapbox_logo_icon.xml similarity index 100% rename from app/src/googleplay/res/drawable/mapbox_logo_icon.xml rename to app/src/main/res/drawable/mapbox_logo_icon.xml diff --git a/app/src/main/res/layout/activity_location_picker.xml b/app/src/main/res/layout/activity_location_picker.xml index b9dd16695..ffdc2b89a 100644 --- a/app/src/main/res/layout/activity_location_picker.xml +++ b/app/src/main/res/layout/activity_location_picker.xml @@ -38,18 +38,6 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"/> - - - - - 6.1.0 -+| | +--- com.squareup.okhttp3:okhttp:3.12.0 -> 4.8.1 -+| | | +--- com.squareup.okio:okio:2.7.0 -+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.70 -> 1.4.30 -+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.4.30 -+| | | | | \--- org.jetbrains:annotations:13.0 -> 16.0.1 -+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.3.70 -> 1.4.30 -+| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.3.72 -> 1.4.30 (*) -+| | +--- com.google.code.gson:gson:2.8.5 -> 2.8.6 -+| | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 -+| | +--- com.mapbox.mapboxsdk:mapbox-android-core:3.0.0 -> 3.1.1 -+| | \--- androidx.legacy:legacy-support-core-utils:1.0.0 -+| | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 -+| | +--- androidx.core:core:1.0.0 -> 1.3.2 -+| | | +--- androidx.annotation:annotation:1.1.0 -+| | | +--- androidx.lifecycle:lifecycle-runtime:2.0.0 -> 2.2.0 (*) -+| | | +--- androidx.versionedparcelable:versionedparcelable:1.1.0 -+| | | | +--- androidx.annotation:annotation:1.1.0 -+| | | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) -+| | | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) -+| | +--- androidx.documentfile:documentfile:1.0.0 -+| | | \--- androidx.annotation:annotation:1.0.0 -> 1.1.0 -+| | +--- androidx.loader:loader:1.0.0 -+| | | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 -+| | | +--- androidx.core:core:1.0.0 -> 1.3.2 (*) -+| | | +--- androidx.lifecycle:lifecycle-livedata:2.0.0 -> 2.2.0 -+| | | | +--- androidx.arch.core:core-runtime:2.1.0 -+| | | | | +--- androidx.annotation:annotation:1.1.0 -+| | | | | \--- androidx.arch.core:core-common:2.1.0 (*) -+| | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.2.0 -+| | | | | +--- androidx.lifecycle:lifecycle-common:2.2.0 (*) -+| | | | | +--- androidx.arch.core:core-common:2.1.0 (*) -+| | | | | \--- androidx.arch.core:core-runtime:2.1.0 (*) -+| | | | \--- androidx.arch.core:core-common:2.1.0 (*) -+| | | \--- androidx.lifecycle:lifecycle-viewmodel:2.0.0 -> 2.2.0 -+| | | \--- androidx.annotation:annotation:1.1.0 -+| | +--- androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 -+| | | \--- androidx.annotation:annotation:1.0.0 -> 1.1.0 -+| | \--- androidx.print:print:1.0.0 -+| | \--- androidx.annotation:annotation:1.0.0 -> 1.1.0 -+| +--- com.mapbox.mapboxsdk:mapbox-sdk-geojson:4.6.0 -> 5.8.0 -+| | \--- com.google.code.gson:gson:2.8.6 -+| +--- com.mapbox.mapboxsdk:mapbox-android-gestures:0.4.2 -+| | \--- androidx.core:core:1.0.0 -> 1.3.2 (*) -+| +--- com.mapbox.mapboxsdk:mapbox-sdk-turf:4.6.0 -+| | \--- com.mapbox.mapboxsdk:mapbox-sdk-geojson:4.6.0 -> 5.8.0 (*) -+| +--- com.squareup.okhttp3:okhttp:3.12.0 -> 4.8.1 (*) -+| +--- com.getkeepsafe.relinker:relinker:1.3.1 -+| +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 -+| \--- androidx.fragment:fragment:1.0.0 -> 1.2.5 -+| +--- androidx.annotation:annotation:1.1.0 -+| +--- androidx.core:core:1.1.0 -> 1.3.2 (*) -+| +--- androidx.collection:collection:1.1.0 (*) -+| +--- androidx.viewpager:viewpager:1.0.0 -+| | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 -+| | +--- androidx.core:core:1.0.0 -> 1.3.2 (*) -+| | \--- androidx.customview:customview:1.0.0 -+| | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 -+| | \--- androidx.core:core:1.0.0 -> 1.3.2 (*) -+| +--- androidx.loader:loader:1.0.0 (*) -+| +--- androidx.activity:activity:1.1.0 -+| | +--- androidx.annotation:annotation:1.1.0 -+| | +--- androidx.core:core:1.1.0 -> 1.3.2 (*) -+| | +--- androidx.lifecycle:lifecycle-runtime:2.2.0 (*) -+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.2.0 (*) -+| | +--- androidx.savedstate:savedstate:1.0.0 -+| | | +--- androidx.annotation:annotation:1.1.0 -+| | | +--- androidx.arch.core:core-common:2.0.1 -> 2.1.0 (*) -+| | | \--- androidx.lifecycle:lifecycle-common:2.0.0 -> 2.2.0 (*) -+| | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0 -> 2.2.0 -+| | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 -+| | +--- androidx.savedstate:savedstate:1.0.0 (*) -+| | +--- androidx.lifecycle:lifecycle-livedata-core:2.2.0 (*) -+| | \--- androidx.lifecycle:lifecycle-viewmodel:2.2.0 (*) -+| +--- androidx.lifecycle:lifecycle-livedata-core:2.2.0 (*) -+| +--- androidx.lifecycle:lifecycle-viewmodel:2.2.0 (*) -+| \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0 (*) -++--- com.mapbox.mapboxsdk:mapbox-android-telemetry:6.1.0 (*) +++--- org.osmdroid:osmdroid-android:6.1.10 ++--- com.gitlab.bitfireAT:dav4jvm:2.1.1 -+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.72 -> 1.4.30 (*) ++| +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.72 -> 1.4.30 ++| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.4.30 ++| | \--- org.jetbrains:annotations:13.0 -> 16.0.1 +| \--- org.apache.commons:commons-lang3:3.9 ++--- com.gitlab.abaker:ical4android:0e928b567c +| +--- org.mnode.ical4j:ical4j:3.0.21 @@ -113,7 +37,13 @@ +| \--- androidx.core:core-ktx:1.3.2 +| +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.71 -> 1.4.30 (*) +| +--- androidx.annotation:annotation:1.1.0 -+| \--- androidx.core:core:1.3.2 (*) ++| \--- androidx.core:core:1.3.2 ++| +--- androidx.annotation:annotation:1.1.0 ++| +--- androidx.lifecycle:lifecycle-runtime:2.0.0 -> 2.2.0 (*) ++| +--- androidx.versionedparcelable:versionedparcelable:1.1.0 ++| | +--- androidx.annotation:annotation:1.1.0 ++| | \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) ++| \--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) ++--- com.gitlab.bitfireAT:cert4android:26a91a729f +| +--- androidx.databinding:databinding-common:4.1.1 -> 4.1.2 +| +--- androidx.databinding:databinding-runtime:4.1.1 -> 4.1.2 (*) @@ -124,7 +54,47 @@ +| | +--- androidx.core:core:1.3.0 -> 1.3.2 (*) +| | +--- androidx.cursoradapter:cursoradapter:1.0.0 +| | | \--- androidx.annotation:annotation:1.0.0 -> 1.1.0 -+| | +--- androidx.fragment:fragment:1.1.0 -> 1.2.5 (*) ++| | +--- androidx.fragment:fragment:1.1.0 -> 1.2.5 ++| | | +--- androidx.annotation:annotation:1.1.0 ++| | | +--- androidx.core:core:1.1.0 -> 1.3.2 (*) ++| | | +--- androidx.collection:collection:1.1.0 (*) ++| | | +--- androidx.viewpager:viewpager:1.0.0 ++| | | | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 ++| | | | +--- androidx.core:core:1.0.0 -> 1.3.2 (*) ++| | | | \--- androidx.customview:customview:1.0.0 ++| | | | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 ++| | | | \--- androidx.core:core:1.0.0 -> 1.3.2 (*) ++| | | +--- androidx.loader:loader:1.0.0 ++| | | | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 ++| | | | +--- androidx.core:core:1.0.0 -> 1.3.2 (*) ++| | | | +--- androidx.lifecycle:lifecycle-livedata:2.0.0 -> 2.2.0 ++| | | | | +--- androidx.arch.core:core-runtime:2.1.0 ++| | | | | | +--- androidx.annotation:annotation:1.1.0 ++| | | | | | \--- androidx.arch.core:core-common:2.1.0 (*) ++| | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.2.0 ++| | | | | | +--- androidx.lifecycle:lifecycle-common:2.2.0 (*) ++| | | | | | +--- androidx.arch.core:core-common:2.1.0 (*) ++| | | | | | \--- androidx.arch.core:core-runtime:2.1.0 (*) ++| | | | | \--- androidx.arch.core:core-common:2.1.0 (*) ++| | | | \--- androidx.lifecycle:lifecycle-viewmodel:2.0.0 -> 2.2.0 ++| | | | \--- androidx.annotation:annotation:1.1.0 ++| | | +--- androidx.activity:activity:1.1.0 ++| | | | +--- androidx.annotation:annotation:1.1.0 ++| | | | +--- androidx.core:core:1.1.0 -> 1.3.2 (*) ++| | | | +--- androidx.lifecycle:lifecycle-runtime:2.2.0 (*) ++| | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.2.0 (*) ++| | | | +--- androidx.savedstate:savedstate:1.0.0 ++| | | | | +--- androidx.annotation:annotation:1.1.0 ++| | | | | +--- androidx.arch.core:core-common:2.0.1 -> 2.1.0 (*) ++| | | | | \--- androidx.lifecycle:lifecycle-common:2.0.0 -> 2.2.0 (*) ++| | | | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0 -> 2.2.0 ++| | | | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 ++| | | | +--- androidx.savedstate:savedstate:1.0.0 (*) ++| | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.2.0 (*) ++| | | | \--- androidx.lifecycle:lifecycle-viewmodel:2.2.0 (*) ++| | | +--- androidx.lifecycle:lifecycle-livedata-core:2.2.0 (*) ++| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.2.0 (*) ++| | | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0 (*) +| | +--- androidx.appcompat:appcompat-resources:1.2.0 +| | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) +| | | +--- androidx.annotation:annotation:1.1.0 @@ -190,7 +160,16 @@ +| | +--- androidx.dynamicanimation:dynamicanimation:1.0.0 +| | | +--- androidx.core:core:1.0.0 -> 1.3.2 (*) +| | | +--- androidx.collection:collection:1.0.0 -> 1.1.0 (*) -+| | | \--- androidx.legacy:legacy-support-core-utils:1.0.0 (*) ++| | | \--- androidx.legacy:legacy-support-core-utils:1.0.0 ++| | | +--- androidx.annotation:annotation:1.0.0 -> 1.1.0 ++| | | +--- androidx.core:core:1.0.0 -> 1.3.2 (*) ++| | | +--- androidx.documentfile:documentfile:1.0.0 ++| | | | \--- androidx.annotation:annotation:1.0.0 -> 1.1.0 ++| | | +--- androidx.loader:loader:1.0.0 (*) ++| | | +--- androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 ++| | | | \--- androidx.annotation:annotation:1.0.0 -> 1.1.0 ++| | | \--- androidx.print:print:1.0.0 ++| | | \--- androidx.annotation:annotation:1.0.0 -> 1.1.0 +| | +--- androidx.annotation:annotation-experimental:1.0.0 +| | +--- androidx.fragment:fragment:1.0.0 -> 1.2.5 (*) +| | +--- androidx.lifecycle:lifecycle-runtime:2.0.0 -> 2.2.0 (*) @@ -310,7 +289,11 @@ ++--- org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.3 +| +--- org.jetbrains.kotlin:kotlin-stdlib:1.4.0 -> 1.4.30 (*) +| \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.4.0 -> 1.4.30 -++--- com.squareup.okhttp3:okhttp:4.8.1 (*) +++--- com.squareup.okhttp3:okhttp:4.8.1 ++| +--- com.squareup.okio:okio:2.7.0 ++| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.70 -> 1.4.30 (*) ++| | \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.3.70 -> 1.4.30 ++| \--- org.jetbrains.kotlin:kotlin-stdlib:1.3.72 -> 1.4.30 (*) ++--- com.google.code.gson:gson:2.8.6 ++--- com.google.android.material:material:1.3.0 (*) ++--- androidx.annotation:annotation:1.1.0 @@ -376,7 +359,8 @@ +| | | \--- com.google.code.gson:gson:2.8.5 -> 2.8.6 +| | \--- com.squareup.okhttp3:logging-interceptor:3.12.7 +| | \--- com.squareup.okhttp3:okhttp:3.12.7 -> 4.8.1 (*) -+| +--- com.mapbox.mapboxsdk:mapbox-sdk-geojson:5.8.0 (*) ++| +--- com.mapbox.mapboxsdk:mapbox-sdk-geojson:5.8.0 ++| | \--- com.google.code.gson:gson:2.8.6 +| +--- com.mapbox.mapboxsdk:mapbox-sdk-directions-models:5.8.0 +| | +--- com.mapbox.mapboxsdk:mapbox-sdk-geojson:5.8.0 (*) +| | \--- androidx.annotation:annotation:1.0.0 -> 1.1.0 diff --git a/gradle.properties b/gradle.properties index 1f7370366..14aa33a43 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,4 @@ android.enableResourceOptimizations=true -android.enableJetifier=true android.useAndroidX=true org.gradle.parallel=true org.gradle.jvmargs=-Xmx4g -Dkotlin.daemon.jvm.options="-Xmx3g" -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8