diff --git a/app/build.gradle b/app/build.gradle index 594afca8..c6867b87 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' apply plugin: 'de.mobilej.unmock' apply plugin: 'net.ltgt.errorprone' @@ -30,6 +31,7 @@ android { versionCode 49 versionName "2.9.1" vectorDrawables.useSupportLibrary = true + multiDexEnabled true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunnerArguments disableAnalytics: 'true' @@ -62,6 +64,10 @@ android { targetCompatibility JavaVersion.VERSION_1_8 } + kotlinOptions { + jvmTarget = '1.8' + } + buildFeatures { viewBinding = true buildConfig true @@ -75,12 +81,14 @@ android { } dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation 'com.squareup:otto:1.3.8' implementation 'org.osmdroid:osmdroid-android:6.1.8' implementation 'com.squareup.picasso:picasso:2.8' implementation 'androidx.core:core:1.12.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.annotation:annotation:1.9.1' + implementation 'androidx.multidex:multidex:2.0.1' implementation 'com.google.android.material:material:1.9.0' implementation 'androidx.exifinterface:exifinterface:1.3.7' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/model/ChatModel.java b/app/src/main/java/de/stephanlindauer/criticalmaps/model/ChatModel.java deleted file mode 100644 index 89eab988..00000000 --- a/app/src/main/java/de/stephanlindauer/criticalmaps/model/ChatModel.java +++ /dev/null @@ -1,82 +0,0 @@ -package de.stephanlindauer.criticalmaps.model; - -import androidx.annotation.NonNull; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.List; - -import javax.inject.Inject; -import javax.inject.Singleton; - -import de.stephanlindauer.criticalmaps.model.chat.ReceivedChatMessage; -import de.stephanlindauer.criticalmaps.utils.AeSimpleSHA1; -import okhttp3.internal.Util; -import timber.log.Timber; - - -@Singleton -public class ChatModel { - - private final UserModel userModel; - private List receivedChatMessages = new ArrayList<>(); - - public static int MESSAGE_MAX_LENGTH = 255; - - @Inject - public ChatModel(UserModel userModel) { - this.userModel = userModel; - } - - @NonNull - public List getReceivedChatMessages() { - return this.receivedChatMessages; - } - - public void setFromJson(JSONArray jsonArray) throws JSONException, - UnsupportedEncodingException { - receivedChatMessages = new ArrayList<>(jsonArray.length()); - - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject jsonObject = jsonArray.getJSONObject(i); - - String device = URLDecoder.decode(jsonObject.getString("device"), Util.UTF_8.name()); - String identifier = URLDecoder.decode(jsonObject.getString("identifier"), Util.UTF_8.name()); - String message = URLDecoder.decode(jsonObject.getString("message"), Util.UTF_8.name()); - Date timestamp = new Date(Long.parseLong(jsonObject.getString("timestamp")) * 1000); - - receivedChatMessages.add(new ReceivedChatMessage(message, timestamp)); - } - - Collections.sort(receivedChatMessages, - (oneChatMessages, otherChatMessage) -> oneChatMessages.getTimestamp().compareTo(otherChatMessage.getTimestamp())); - } - - public JSONObject createNewOutgoingMessage(String message) { - JSONObject messageObject = new JSONObject(); - try { - messageObject.put("text", urlEncodeMessage(message)); - messageObject.put("identifier", AeSimpleSHA1.SHA1(message + Math.random())); - messageObject.put("device", userModel.getChangingDeviceToken()); - } catch (JSONException e) { - Timber.d(e); - } - return messageObject; - } - - private String urlEncodeMessage(String messageToEncode) { - try { - return URLEncoder.encode(messageToEncode, Util.UTF_8.name()); - } catch (UnsupportedEncodingException e) { - return ""; - } - } -} diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/model/ChatModel.kt b/app/src/main/java/de/stephanlindauer/criticalmaps/model/ChatModel.kt new file mode 100644 index 00000000..d6f5bfb5 --- /dev/null +++ b/app/src/main/java/de/stephanlindauer/criticalmaps/model/ChatModel.kt @@ -0,0 +1,67 @@ +package de.stephanlindauer.criticalmaps.model + +import de.stephanlindauer.criticalmaps.model.chat.ReceivedChatMessage +import de.stephanlindauer.criticalmaps.utils.AeSimpleSHA1 +import okhttp3.internal.Util +import org.json.JSONArray +import org.json.JSONException +import org.json.JSONObject +import timber.log.Timber +import java.io.UnsupportedEncodingException +import java.net.URLDecoder +import java.net.URLEncoder +import java.util.* +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class ChatModel @Inject constructor( + private val userModel: UserModel +) { + + private var receivedChatMessages = mutableListOf() + + fun getReceivedChatMessages(): List { + return receivedChatMessages + } + + @Throws(JSONException::class, UnsupportedEncodingException::class) + fun setFromJson(jsonArray: JSONArray) { + receivedChatMessages = mutableListOf() + + for (i in 0 until jsonArray.length()) { + val jsonObject = jsonArray.getJSONObject(i) + + val message = URLDecoder.decode(jsonObject.getString("message"), Util.UTF_8.name()) + val timestamp = Date(jsonObject.getString("timestamp").toLong() * 1000) + + receivedChatMessages.add(ReceivedChatMessage(message, timestamp)) + } + + receivedChatMessages.sortBy { it.timestamp } + } + + fun createNewOutgoingMessage(message: String): JSONObject { + val messageObject = JSONObject() + try { + messageObject.put("text", urlEncodeMessage(message)) + messageObject.put("identifier", AeSimpleSHA1.SHA1(message + Math.random())) + messageObject.put("device", userModel.changingDeviceToken) + } catch (e: JSONException) { + Timber.d(e) + } + return messageObject + } + + private fun urlEncodeMessage(messageToEncode: String): String { + return try { + URLEncoder.encode(messageToEncode, Util.UTF_8.name()) + } catch (e: UnsupportedEncodingException) { + "" + } + } + + companion object { + const val MESSAGE_MAX_LENGTH = 255 + } +} \ No newline at end of file diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/model/OtherUsersLocationModel.java b/app/src/main/java/de/stephanlindauer/criticalmaps/model/OtherUsersLocationModel.java deleted file mode 100644 index b45a3154..00000000 --- a/app/src/main/java/de/stephanlindauer/criticalmaps/model/OtherUsersLocationModel.java +++ /dev/null @@ -1,44 +0,0 @@ -package de.stephanlindauer.criticalmaps.model; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.osmdroid.util.GeoPoint; - -import java.util.ArrayList; - -import javax.inject.Inject; -import javax.inject.Singleton; - -@Singleton -public class OtherUsersLocationModel { - - private ArrayList otherUsersLocations = new ArrayList<>(); - - private final UserModel userModel; - - @Inject - public OtherUsersLocationModel(UserModel userModel) { - this.userModel = userModel; - } - - - public void setFromJson(JSONArray jsonArray) throws JSONException { - otherUsersLocations = new ArrayList<>(jsonArray.length()); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject locationObject = jsonArray.getJSONObject(i); - if (locationObject.getString("device").equals(userModel.getChangingDeviceToken())) { - continue; // Ignore own location - } - int latitudeE6 = Integer.parseInt(locationObject.getString("latitude")); - int longitudeE6 = Integer.parseInt(locationObject.getString("longitude")); - - otherUsersLocations.add( - new GeoPoint(latitudeE6 / 1000000.0D, longitudeE6 / 1000000.0D)); - } - } - - public ArrayList getOtherUsersLocations() { - return otherUsersLocations; - } -} diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/model/OtherUsersLocationModel.kt b/app/src/main/java/de/stephanlindauer/criticalmaps/model/OtherUsersLocationModel.kt new file mode 100644 index 00000000..174c8a23 --- /dev/null +++ b/app/src/main/java/de/stephanlindauer/criticalmaps/model/OtherUsersLocationModel.kt @@ -0,0 +1,36 @@ +package de.stephanlindauer.criticalmaps.model + +import org.json.JSONArray +import org.json.JSONException +import org.osmdroid.util.GeoPoint +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class OtherUsersLocationModel @Inject constructor( + private val userModel: UserModel +) { + + private var otherUsersLocations = ArrayList() + + @Throws(JSONException::class) + fun setFromJson(jsonArray: JSONArray) { + otherUsersLocations = ArrayList(jsonArray.length()) + for (i in 0 until jsonArray.length()) { + val locationObject = jsonArray.getJSONObject(i) + if (locationObject.getString("device") == userModel.changingDeviceToken) { + continue // Ignore own location + } + val latitudeE6 = locationObject.getString("latitude").toInt() + val longitudeE6 = locationObject.getString("longitude").toInt() + + otherUsersLocations.add( + GeoPoint(latitudeE6 / 1000000.0, longitudeE6 / 1000000.0) + ) + } + } + + fun getOtherUsersLocations(): ArrayList { + return otherUsersLocations + } +} \ No newline at end of file diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/model/OwnLocationModel.java b/app/src/main/java/de/stephanlindauer/criticalmaps/model/OwnLocationModel.java deleted file mode 100644 index fc8d1d99..00000000 --- a/app/src/main/java/de/stephanlindauer/criticalmaps/model/OwnLocationModel.java +++ /dev/null @@ -1,46 +0,0 @@ -package de.stephanlindauer.criticalmaps.model; - -import androidx.annotation.NonNull; - -import org.json.JSONException; -import org.json.JSONObject; -import org.osmdroid.util.GeoPoint; - -import javax.inject.Inject; -import javax.inject.Singleton; - -import timber.log.Timber; - -@Singleton -public class OwnLocationModel { - - private static final float ACCURACY_PRECISE_THRESHOLD = 50.0f; //meters - - public GeoPoint ownLocation; - private boolean isLocationPrecise; - - @Inject - public OwnLocationModel() { - } - - public void setLocation(@NonNull GeoPoint location, float accuracy) { - ownLocation = location; - isLocationPrecise = accuracy < ACCURACY_PRECISE_THRESHOLD; - } - - public boolean hasPreciseLocation() { - return ownLocation != null && isLocationPrecise; - } - - @NonNull - public JSONObject getLocationJson() { - JSONObject locationObject = new JSONObject(); - try { - locationObject.put("longitude", Integer.toString((int) (ownLocation.getLongitude() * 1000000.0D))); - locationObject.put("latitude", Integer.toString((int) (ownLocation.getLatitude() * 1000000.0D))); - } catch (JSONException e) { - Timber.e(e); - } - return locationObject; - } -} diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/model/OwnLocationModel.kt b/app/src/main/java/de/stephanlindauer/criticalmaps/model/OwnLocationModel.kt new file mode 100644 index 00000000..dce76aa5 --- /dev/null +++ b/app/src/main/java/de/stephanlindauer/criticalmaps/model/OwnLocationModel.kt @@ -0,0 +1,41 @@ +package de.stephanlindauer.criticalmaps.model + +import org.json.JSONException +import org.json.JSONObject +import org.osmdroid.util.GeoPoint +import timber.log.Timber +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class OwnLocationModel @Inject constructor() { + + @JvmField + var ownLocation: GeoPoint? = null + private var isLocationPrecise: Boolean = false + + fun setLocation(location: GeoPoint, accuracy: Float) { + ownLocation = location + isLocationPrecise = accuracy < ACCURACY_PRECISE_THRESHOLD + } + + fun hasPreciseLocation(): Boolean { + return ownLocation != null && isLocationPrecise + } + + fun getLocationJson(): JSONObject { + val locationObject = JSONObject() + try { + val location = ownLocation ?: throw NullPointerException("ownLocation is null") + locationObject.put("longitude", (location.longitude * 1000000.0).toInt().toString()) + locationObject.put("latitude", (location.latitude * 1000000.0).toInt().toString()) + } catch (e: JSONException) { + Timber.e(e) + } + return locationObject + } + + companion object { + private const val ACCURACY_PRECISE_THRESHOLD = 50.0f // meters + } +} \ No newline at end of file diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/model/PermissionRequest.java b/app/src/main/java/de/stephanlindauer/criticalmaps/model/PermissionRequest.java deleted file mode 100644 index bc049c4c..00000000 --- a/app/src/main/java/de/stephanlindauer/criticalmaps/model/PermissionRequest.java +++ /dev/null @@ -1,62 +0,0 @@ -package de.stephanlindauer.criticalmaps.model; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -public class PermissionRequest { - private final String[] permissions; - private final String rationale; - private final Runnable onGrantedCallback; - private final Runnable onDeniedCallback; - private final Runnable onPermanentlyDeniedCallback; - private final int requestCode; - - public PermissionRequest(@NonNull String[] permissions, - @NonNull String rationale, - @Nullable Runnable onGrantedCallback, - @Nullable Runnable onDeniedCallback, - @Nullable Runnable onPermanentlyDeniedCallback) { - this.permissions = permissions; - this.rationale = rationale; - this.onGrantedCallback = - onGrantedCallback != null ? onGrantedCallback : () -> { - }; - this.onDeniedCallback = - onDeniedCallback != null ? onDeniedCallback : () -> { - }; - this.onPermanentlyDeniedCallback = - onPermanentlyDeniedCallback != null ? onPermanentlyDeniedCallback : () -> { - }; - // Can only use lower 16 bits for requestCode --> short - this.requestCode = (short) Math.round(Math.random() * Short.MAX_VALUE); - } - - @NonNull - public String[] getPermissions() { - return permissions; - } - - public int getRequestCode() { - return requestCode; - } - - @NonNull - public Runnable getOnGrantedCallback() { - return onGrantedCallback; - } - - @NonNull - public Runnable getOnDeniedCallback() { - return onDeniedCallback; - } - - @NonNull - public Runnable getOnPermanentlyDeniedCallback() { - return onPermanentlyDeniedCallback; - } - - @NonNull - public String getRationale() { - return rationale; - } -} diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/model/PermissionRequest.kt b/app/src/main/java/de/stephanlindauer/criticalmaps/model/PermissionRequest.kt new file mode 100644 index 00000000..002db99e --- /dev/null +++ b/app/src/main/java/de/stephanlindauer/criticalmaps/model/PermissionRequest.kt @@ -0,0 +1,14 @@ +package de.stephanlindauer.criticalmaps.model + +import kotlin.random.Random + +class PermissionRequest( + val permissions: Array, + val rationale: String, + val onGrantedCallback: Runnable = Runnable { }, + val onDeniedCallback: Runnable = Runnable { }, + val onPermanentlyDeniedCallback: Runnable = Runnable { } +) { + // Can only use lower 16 bits for requestCode --> short + val requestCode: Int = Random.nextInt(Short.MAX_VALUE.toInt()) +} \ No newline at end of file diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/model/UserModel.java b/app/src/main/java/de/stephanlindauer/criticalmaps/model/UserModel.java deleted file mode 100644 index c665a366..00000000 --- a/app/src/main/java/de/stephanlindauer/criticalmaps/model/UserModel.java +++ /dev/null @@ -1,39 +0,0 @@ -package de.stephanlindauer.criticalmaps.model; - -import android.annotation.SuppressLint; -import android.provider.Settings; - -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.GregorianCalendar; -import java.util.Locale; - -import javax.inject.Inject; -import javax.inject.Singleton; - -import de.stephanlindauer.criticalmaps.App; -import de.stephanlindauer.criticalmaps.utils.AeSimpleSHA1; - -import static android.provider.Settings.Secure.getString; - -@Singleton -public class UserModel { - - private final String changingDeviceToken; - - @Inject - public UserModel(App app) { - - @SuppressLint("HardwareIds") final String androidId = getString(app.getContentResolver(), Settings.Secure.ANDROID_ID); - - final GregorianCalendar gregorianCalendar = new GregorianCalendar(); - gregorianCalendar.add(Calendar.HOUR, 6); - final String dateString = new SimpleDateFormat("yyyy-MM-dd", Locale.US).format(gregorianCalendar.getTime()); - - changingDeviceToken = AeSimpleSHA1.SHA1(androidId + dateString); - } - - public String getChangingDeviceToken() { - return changingDeviceToken; - } -} diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/model/UserModel.kt b/app/src/main/java/de/stephanlindauer/criticalmaps/model/UserModel.kt new file mode 100644 index 00000000..dfae334d --- /dev/null +++ b/app/src/main/java/de/stephanlindauer/criticalmaps/model/UserModel.kt @@ -0,0 +1,28 @@ +package de.stephanlindauer.criticalmaps.model + +import android.annotation.SuppressLint +import android.provider.Settings +import de.stephanlindauer.criticalmaps.App +import de.stephanlindauer.criticalmaps.utils.AeSimpleSHA1 +import java.text.SimpleDateFormat +import java.util.* +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class UserModel @Inject constructor(app: App) { + + val changingDeviceToken: String + + init { + @SuppressLint("HardwareIds") + val androidId = Settings.Secure.getString(app.contentResolver, Settings.Secure.ANDROID_ID) ?: "unknown" + + val gregorianCalendar = GregorianCalendar().apply { + add(Calendar.HOUR, 6) + } + val dateString = SimpleDateFormat("yyyy-MM-dd", Locale.US).format(gregorianCalendar.time) + + changingDeviceToken = AeSimpleSHA1.SHA1(androidId + dateString) ?: "fallback-token" + } +} \ No newline at end of file diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/model/chat/ReceivedChatMessage.java b/app/src/main/java/de/stephanlindauer/criticalmaps/model/chat/ReceivedChatMessage.java deleted file mode 100644 index 7f039934..00000000 --- a/app/src/main/java/de/stephanlindauer/criticalmaps/model/chat/ReceivedChatMessage.java +++ /dev/null @@ -1,23 +0,0 @@ -package de.stephanlindauer.criticalmaps.model.chat; - -import java.util.Date; - - -public class ReceivedChatMessage { - - private final Date timestamp; - private final String message; - - public ReceivedChatMessage(String message, Date timestamp) { - this.message = message; - this.timestamp = timestamp; - } - - public Date getTimestamp() { - return timestamp; - } - - public String getMessage() { - return message; - } -} diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/model/chat/ReceivedChatMessage.kt b/app/src/main/java/de/stephanlindauer/criticalmaps/model/chat/ReceivedChatMessage.kt new file mode 100644 index 00000000..62cc5cbc --- /dev/null +++ b/app/src/main/java/de/stephanlindauer/criticalmaps/model/chat/ReceivedChatMessage.kt @@ -0,0 +1,8 @@ +package de.stephanlindauer.criticalmaps.model.chat + +import java.util.Date + +data class ReceivedChatMessage( + val message: String, + val timestamp: Date +) \ No newline at end of file diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/model/gpx/GpxModel.java b/app/src/main/java/de/stephanlindauer/criticalmaps/model/gpx/GpxModel.java deleted file mode 100644 index ce5493a2..00000000 --- a/app/src/main/java/de/stephanlindauer/criticalmaps/model/gpx/GpxModel.java +++ /dev/null @@ -1,49 +0,0 @@ -package de.stephanlindauer.criticalmaps.model.gpx; - -import java.util.ArrayList; -import java.util.List; - -import javax.inject.Inject; -import javax.inject.Singleton; - -@Singleton -public class GpxModel { - - private String uri; - private List tracks = new ArrayList<>(); - private List poiList = new ArrayList<>(); - - @Inject - public GpxModel() { - } - - public String getUri() { - return uri; - } - - public void setUri(String uri) { - this.uri = uri; - } - - public List getTracks() { - return tracks; - } - - public void setTracks(List tracks) { - this.tracks = tracks; - } - - public List getPoiList() { - return poiList; - } - - public void setPoiList(List poiList) { - this.poiList = poiList; - } - - public void clear() { - tracks.clear(); - poiList.clear(); - uri = null; - } -} diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/model/gpx/GpxModel.kt b/app/src/main/java/de/stephanlindauer/criticalmaps/model/gpx/GpxModel.kt new file mode 100644 index 00000000..dd42ba73 --- /dev/null +++ b/app/src/main/java/de/stephanlindauer/criticalmaps/model/gpx/GpxModel.kt @@ -0,0 +1,18 @@ +package de.stephanlindauer.criticalmaps.model.gpx + +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class GpxModel @Inject constructor() { + + var uri: String? = null + var tracks: MutableList = mutableListOf() + var poiList: MutableList = mutableListOf() + + fun clear() { + tracks.clear() + poiList.clear() + uri = null + } +} \ No newline at end of file diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/model/gpx/GpxPoi.java b/app/src/main/java/de/stephanlindauer/criticalmaps/model/gpx/GpxPoi.java deleted file mode 100644 index e71fff63..00000000 --- a/app/src/main/java/de/stephanlindauer/criticalmaps/model/gpx/GpxPoi.java +++ /dev/null @@ -1,22 +0,0 @@ -package de.stephanlindauer.criticalmaps.model.gpx; - -import org.osmdroid.util.GeoPoint; - -public class GpxPoi { - - private final String name; - private final GeoPoint position; - - public GpxPoi(String name, GeoPoint position) { - this.name = name; - this.position = position; - } - - public String getName() { - return name; - } - - public GeoPoint getPosition() { - return position; - } -} diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/model/gpx/GpxPoi.kt b/app/src/main/java/de/stephanlindauer/criticalmaps/model/gpx/GpxPoi.kt new file mode 100644 index 00000000..3ae0dc3f --- /dev/null +++ b/app/src/main/java/de/stephanlindauer/criticalmaps/model/gpx/GpxPoi.kt @@ -0,0 +1,8 @@ +package de.stephanlindauer.criticalmaps.model.gpx + +import org.osmdroid.util.GeoPoint + +data class GpxPoi( + val name: String, + val position: GeoPoint +) \ No newline at end of file diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/model/gpx/GpxTrack.java b/app/src/main/java/de/stephanlindauer/criticalmaps/model/gpx/GpxTrack.java deleted file mode 100644 index 6673a1f4..00000000 --- a/app/src/main/java/de/stephanlindauer/criticalmaps/model/gpx/GpxTrack.java +++ /dev/null @@ -1,24 +0,0 @@ -package de.stephanlindauer.criticalmaps.model.gpx; - -import org.osmdroid.util.GeoPoint; - -import java.util.List; - -public class GpxTrack { - - private final String name; - private final List waypoints; - - public GpxTrack(String name, List waypoints) { - this.name = name; - this.waypoints = waypoints; - } - - public String getName() { - return name; - } - - public List getWaypoints() { - return waypoints; - } -} diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/model/gpx/GpxTrack.kt b/app/src/main/java/de/stephanlindauer/criticalmaps/model/gpx/GpxTrack.kt new file mode 100644 index 00000000..dc040e2d --- /dev/null +++ b/app/src/main/java/de/stephanlindauer/criticalmaps/model/gpx/GpxTrack.kt @@ -0,0 +1,8 @@ +package de.stephanlindauer.criticalmaps.model.gpx + +import org.osmdroid.util.GeoPoint + +data class GpxTrack( + val name: String, + val waypoints: List +) \ No newline at end of file diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/vo/Endpoints.java b/app/src/main/java/de/stephanlindauer/criticalmaps/vo/Endpoints.java deleted file mode 100644 index c77c2172..00000000 --- a/app/src/main/java/de/stephanlindauer/criticalmaps/vo/Endpoints.java +++ /dev/null @@ -1,12 +0,0 @@ -package de.stephanlindauer.criticalmaps.vo; - -public class Endpoints { - // IMAGE_POST doesn't currently work. Once fixed CDN or API_GATEWAY should be used to prefix the URI. - public static final String IMAGE_POST = "https://api.criticalmaps.net/gallery/"; - - public static final String LOCATION_GET = "https://api-cdn.criticalmaps.net/locations"; - public static final String LOCATION_PUT = "https://api-gw.criticalmaps.net/locations"; - - public static final String CHAT_GET = "https://api-gw.criticalmaps.net/messages"; - public static final String CHAT_POST = "https://api-gw.criticalmaps.net/messages"; -} diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/vo/Endpoints.kt b/app/src/main/java/de/stephanlindauer/criticalmaps/vo/Endpoints.kt new file mode 100644 index 00000000..d9228a67 --- /dev/null +++ b/app/src/main/java/de/stephanlindauer/criticalmaps/vo/Endpoints.kt @@ -0,0 +1,12 @@ +package de.stephanlindauer.criticalmaps.vo + +object Endpoints { + // IMAGE_POST doesn't currently work. Once fixed CDN or API_GATEWAY should be used to prefix the URI. + const val IMAGE_POST = "https://api.criticalmaps.net/gallery/" + + const val LOCATION_GET = "https://api-cdn.criticalmaps.net/locations" + const val LOCATION_PUT = "https://api-gw.criticalmaps.net/locations" + + const val CHAT_GET = "https://api-gw.criticalmaps.net/messages" + const val CHAT_POST = "https://api-gw.criticalmaps.net/messages" +} \ No newline at end of file diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/vo/RequestCodes.java b/app/src/main/java/de/stephanlindauer/criticalmaps/vo/RequestCodes.java deleted file mode 100644 index 447b5dd2..00000000 --- a/app/src/main/java/de/stephanlindauer/criticalmaps/vo/RequestCodes.java +++ /dev/null @@ -1,6 +0,0 @@ -package de.stephanlindauer.criticalmaps.vo; - -public class RequestCodes { - public static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 1115; - public static final int CHOOSE_GPX_RESULT_CODE = 1116; -} diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/vo/RequestCodes.kt b/app/src/main/java/de/stephanlindauer/criticalmaps/vo/RequestCodes.kt new file mode 100644 index 00000000..05c6df47 --- /dev/null +++ b/app/src/main/java/de/stephanlindauer/criticalmaps/vo/RequestCodes.kt @@ -0,0 +1,6 @@ +package de.stephanlindauer.criticalmaps.vo + +object RequestCodes { + const val CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 1115 + const val CHOOSE_GPX_RESULT_CODE = 1116 +} \ No newline at end of file diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/vo/ResultType.java b/app/src/main/java/de/stephanlindauer/criticalmaps/vo/ResultType.java deleted file mode 100644 index bb79b1b7..00000000 --- a/app/src/main/java/de/stephanlindauer/criticalmaps/vo/ResultType.java +++ /dev/null @@ -1,5 +0,0 @@ -package de.stephanlindauer.criticalmaps.vo; - -public enum ResultType { - FAILED, SUCCEEDED -} diff --git a/app/src/main/java/de/stephanlindauer/criticalmaps/vo/ResultType.kt b/app/src/main/java/de/stephanlindauer/criticalmaps/vo/ResultType.kt new file mode 100644 index 00000000..785a659a --- /dev/null +++ b/app/src/main/java/de/stephanlindauer/criticalmaps/vo/ResultType.kt @@ -0,0 +1,5 @@ +package de.stephanlindauer.criticalmaps.vo + +enum class ResultType { + FAILED, SUCCEEDED +} \ No newline at end of file diff --git a/build.gradle b/build.gradle index 295774b1..742a01eb 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,6 @@ buildscript { ext { + kotlin_version = "1.9.22" dagger_version = "2.52" } @@ -10,6 +11,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:8.11.2' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.github.bjoernq:unmockplugin:0.7.9' classpath 'net.ltgt.gradle:gradle-errorprone-plugin:3.1.0' }