aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--androidApp/build.gradle.kts33
-rw-r--r--androidApp/src/google/AndroidManifest.xml3
-rw-r--r--androidApp/src/main/AndroidManifest.xml9
-rw-r--r--androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/reports/UnitReportsFragment.kt12
-rw-r--r--androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/reports/UnitReportsViewModel.kt15
-rw-r--r--androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapFragment.kt6
-rw-r--r--androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationViewModel.kt6
-rw-r--r--androidApp/src/main/java/mx/trackermap/TrackerMap/android/units/UnitsViewModel.kt8
-rw-r--r--build.gradle.kts8
-rw-r--r--gradle.properties5
-rw-r--r--gradle/wrapper/gradle-wrapper.properties2
-rw-r--r--shared/build.gradle.kts12
-rw-r--r--shared/src/androidMain/AndroidManifest.xml2
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/SessionController.kt2
14 files changed, 72 insertions, 51 deletions
diff --git a/androidApp/build.gradle.kts b/androidApp/build.gradle.kts
index 73b9759..dfa6d29 100644
--- a/androidApp/build.gradle.kts
+++ b/androidApp/build.gradle.kts
@@ -6,18 +6,22 @@ plugins {
}
android {
- compileSdk = 31
+ compileSdk = 34
defaultConfig {
applicationId = "net.etbsa.etbsa"
minSdk = 21
- targetSdk = 31
- versionCode = 1405
- versionName = "1.3.5"
+ targetSdk = 34
+ versionCode = 1407
+ versionName = "1.3.7"
ndk {
abiFilters.clear()
abiFilters += listOf("armeabi-v7a", "arm64-v8a")
}
}
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_17
+ targetCompatibility = JavaVersion.VERSION_17
+ }
buildTypes {
getByName("release") {
isMinifyEnabled = false
@@ -38,26 +42,27 @@ android {
isDefault = true
}
}
+ namespace = "mx.trackermap.TrackerMap.android"
}
val googleImplementation by configurations
dependencies {
implementation(project(":shared"))
- implementation("com.google.android.material:material:1.6.0")
- implementation("androidx.appcompat:appcompat:1.4.1")
+ implementation("com.google.android.material:material:1.9.0")
+ implementation("androidx.appcompat:appcompat:1.6.1")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
- implementation("com.squareup.okhttp3:okhttp:4.9.1")
+ implementation("com.squareup.okhttp3:okhttp:4.10.0")
implementation("com.github.Zhuinden:live-event:1.2.0")
- implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1")
- implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:2.4.1")
- implementation("androidx.preference:preference-ktx:1.2.0")
+ implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2")
+ implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.2")
+ implementation("androidx.preference:preference-ktx:1.2.1")
implementation("io.insert-koin:koin-android:3.1.4")
- implementation("androidx.core:core-ktx:1.7.0")
- implementation("androidx.activity:activity-ktx:1.4.0")
- implementation("androidx.fragment:fragment-ktx:1.4.1")
+ implementation("androidx.core:core-ktx:1.12.0")
+ implementation("androidx.activity:activity-ktx:1.7.2")
+ implementation("androidx.fragment:fragment-ktx:1.6.1")
implementation("io.ktor:ktor-client-serialization:1.6.6")
- implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.3.1")
+ implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.4.0")
implementation("com.github.zerobranch:SwipeLayout:1.3.1")
implementation("com.github.addisonElliott:SegmentedButton:3.1.9")
implementation("mil.nga.sf:sf-wkt:1.0.1")
diff --git a/androidApp/src/google/AndroidManifest.xml b/androidApp/src/google/AndroidManifest.xml
index 5207ee9..c666fc8 100644
--- a/androidApp/src/google/AndroidManifest.xml
+++ b/androidApp/src/google/AndroidManifest.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- package="mx.trackermap.TrackerMap.android">
+ xmlns:tools="http://schemas.android.com/tools">
<application
android:name=".GoogleMainApplication"
diff --git a/androidApp/src/main/AndroidManifest.xml b/androidApp/src/main/AndroidManifest.xml
index 313a4df..0a3a539 100644
--- a/androidApp/src/main/AndroidManifest.xml
+++ b/androidApp/src/main/AndroidManifest.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
-<manifest
- xmlns:android="http://schemas.android.com/apk/res/android"
- package="mx.trackermap.TrackerMap.android">
+<manifest xmlns:tools="http://schemas.android.com/tools"
+ xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
@@ -12,7 +11,9 @@
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
- android:theme="@style/AppTheme">
+ android:theme="@style/AppTheme"
+ android:enableOnBackInvokedCallback="true"
+ tools:targetApi="tiramisu">
<activity
android:name=".session.LoginActivity"
android:exported="true">
diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/reports/UnitReportsFragment.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/reports/UnitReportsFragment.kt
index aab3cfa..65071da 100644
--- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/reports/UnitReportsFragment.kt
+++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/reports/UnitReportsFragment.kt
@@ -36,7 +36,6 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.commit
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.card.MaterialCardView
-import io.ktor.utils.io.*
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.datetime.*
import kotlinx.datetime.TimeZone
@@ -223,6 +222,7 @@ class UnitReportsFragment : Fragment() {
}
}
is ReportController.Report.LoadingReport -> loading()
+ else -> loading()
}
}
@@ -260,13 +260,13 @@ class UnitReportsFragment : Fragment() {
val (from, to) = period.getObjectDates()
- fromDatePicker = DatePickerDialog(requireContext(), { p0, p1, p2, p3 ->
+ fromDatePicker = DatePickerDialog(requireContext(), { _, p1, p2, p3 ->
fromPickedDatetime = LocalDateTime(p1, p2 + 1, p3, from.hour, from.minute)
fromTimePicker.show()
}, from.year, from.monthNumber, from.dayOfMonth)
fromDatePicker.datePicker.maxDate = Calendar.getInstance().timeInMillis
- fromTimePicker = TimePickerDialog(requireContext(), { p0, p1, p2 ->
+ fromTimePicker = TimePickerDialog(requireContext(), { _, p1, p2 ->
fromPickedDatetime = LocalDateTime(
fromPickedDatetime.year,
fromPickedDatetime.monthNumber,
@@ -275,7 +275,7 @@ class UnitReportsFragment : Fragment() {
)
(period as? ReportDates.ReportPeriod.Custom)?.let {
val fromInstant = fromPickedDatetime.toInstant(TimeZone.currentSystemDefault())
- val toInstant = Calendar.getInstance().toInstant().toKotlinInstant()
+ val toInstant = Clock.System.now()
val plusMonth = fromInstant.plus(31.toDuration(DurationUnit.DAYS))
/* Make ultra sure that user can't select a period longer than a month */
@@ -293,13 +293,13 @@ class UnitReportsFragment : Fragment() {
}
}, from.hour, from.minute, false)
- toDatePicker = DatePickerDialog(requireContext(), { p0, p1, p2, p3 ->
+ toDatePicker = DatePickerDialog(requireContext(), { _, p1, p2, p3 ->
toPickedDatetime = LocalDateTime(p1, p2 + 1, p3, from.hour, from.minute)
toTimePicker.show()
}, to.year, to.monthNumber, to.dayOfMonth)
toDatePicker.datePicker.maxDate = Calendar.getInstance().timeInMillis
- toTimePicker = TimePickerDialog(requireContext(), { p0, p1, p2 ->
+ toTimePicker = TimePickerDialog(requireContext(), { _, p1, p2 ->
toPickedDatetime = LocalDateTime(
toPickedDatetime.year,
toPickedDatetime.monthNumber,
diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/reports/UnitReportsViewModel.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/reports/UnitReportsViewModel.kt
index 41a6b6d..628ce2f 100644
--- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/reports/UnitReportsViewModel.kt
+++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/reports/UnitReportsViewModel.kt
@@ -19,7 +19,7 @@ package mx.trackermap.TrackerMap.android.details.reports
import androidx.lifecycle.*
import kotlinx.coroutines.DelicateCoroutinesApi
-import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
import mx.trackermap.TrackerMap.client.models.EventInformation
import mx.trackermap.TrackerMap.client.models.Geofence
@@ -42,16 +42,17 @@ class UnitReportsViewModel(
private val reportController: ReportController by inject()
private var _deviceId = savedStateHandle.getLiveData("deviceId", 0)
- private val _reportType: MutableLiveData<ReportController.ReportType> = savedStateHandle.getLiveData("reportType", null)
+ private val _reportType: MutableLiveData<ReportController.ReportType> =
+ savedStateHandle.getLiveData("reportType", ReportController.ReportType.POSITIONS)
private val _reportPeriod: MutableLiveData<ReportDates.ReportPeriod> =
- savedStateHandle.getLiveData("reportPeriod", null)
- private val _report: MutableLiveData<ReportController.Report> = MutableLiveData()
+ savedStateHandle.getLiveData("reportPeriod", ReportDates.ReportPeriod.Today())
+ private val _report: MutableLiveData<ReportController.Report?> = MutableLiveData()
private val _geofences: MutableLiveData<Array<Geofence>> = MutableLiveData(emptyArray())
val deviceId: LiveData<Int> get() = _deviceId
val reportType: LiveData<ReportController.ReportType> get() = _reportType
val reportPeriod: LiveData<ReportDates.ReportPeriod> get() = _reportPeriod
- val report: LiveData<ReportController.Report> get() = _report
+ val report: LiveData<ReportController.Report?> get() = _report
val geofences: LiveData<Array<Geofence>> get() = _geofences
init {
@@ -82,13 +83,13 @@ class UnitReportsViewModel(
}
private suspend fun setupReportObserver() {
- reportController.reportFlow.collect {
+ (reportController.reportFlow as StateFlow<ReportController.Report>).collect {
_report.value = it
}
}
private suspend fun setupGeofenceObserver() {
- geofencesController.geofencesFlow.collect {
+ (geofencesController.geofencesFlow as StateFlow<Map<Int, Geofence>>).collect {
_geofences.value = it.values.toTypedArray()
}
}
diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapFragment.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapFragment.kt
index b04bfbc..4915c49 100644
--- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapFragment.kt
+++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapFragment.kt
@@ -114,6 +114,12 @@ open class MapFragment : GlobeMapFragment() {
hasStarted = false
}
+ override fun onDestroyView() {
+ super.onDestroyView()
+ loader?.shutdown()
+ loader = null
+ }
+
override fun mapDidStopMoving(
mapControl: MapController?,
corners: Array<out Point3d>?,
diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationViewModel.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationViewModel.kt
index 0d3784c..7a57755 100644
--- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationViewModel.kt
+++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationViewModel.kt
@@ -25,7 +25,7 @@ import androidx.lifecycle.viewModelScope
import com.zhuinden.eventemitter.EventEmitter
import com.zhuinden.eventemitter.EventSource
import kotlinx.coroutines.DelicateCoroutinesApi
-import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
import mx.trackermap.TrackerMap.client.models.User
import mx.trackermap.TrackerMap.controllers.SessionController
@@ -57,7 +57,7 @@ class UserInformationViewModel : ViewModel(), KoinComponent {
}
private suspend fun setupLoginStateObserver() {
- sessionController.loginStateFlow.collect {
+ (sessionController.loginStateFlow as StateFlow<SessionController.LoginState?>).collect {
it?.let {
loginStateEmitter.emit(it)
}
@@ -65,7 +65,7 @@ class UserInformationViewModel : ViewModel(), KoinComponent {
}
private suspend fun setupUserObserver() {
- sessionController.userFlow.collect {
+ (sessionController.userFlow as StateFlow<User?>).collect {
it?.let {
_user.postValue(it)
}
diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/units/UnitsViewModel.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/units/UnitsViewModel.kt
index b537c0b..b5ed78d 100644
--- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/units/UnitsViewModel.kt
+++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/units/UnitsViewModel.kt
@@ -21,7 +21,7 @@ import android.util.Log
import androidx.lifecycle.*
import com.mousebird.maply.Point2d
import kotlinx.coroutines.DelicateCoroutinesApi
-import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
import mx.trackermap.TrackerMap.client.models.Geofence
import mx.trackermap.TrackerMap.client.models.MapLayer
@@ -87,14 +87,14 @@ class UnitsViewModel(
}
private suspend fun setupUnitsObserver() {
- unitsController.displayedUnitsFlow.collect { units ->
+ (unitsController.displayedUnitsFlow as StateFlow<List<UnitInformation>>).collect { units ->
Log.d("UnitsViewModel", "Collecting units")
this._displayedUnits.value = units
}
}
private suspend fun setupDisplayedUnitsObserver() {
- unitsController.unitsFlow.collect { units ->
+ (unitsController.unitsFlow as StateFlow<List<UnitInformation>>).collect { units ->
Log.d("UnitsViewModel", "Collecting displayed units")
this._units.value = units
updateSelectedUnit()
@@ -102,7 +102,7 @@ class UnitsViewModel(
}
private suspend fun setupGeofenceObserver() {
- geofenceController.geofencesFlow.collect {
+ (geofenceController.geofencesFlow as StateFlow<Map<Int, Geofence>>).collect {
Log.d("UnitsViewModel", "Collecting geofences")
this._geofences.postValue(it)
}
diff --git a/build.gradle.kts b/build.gradle.kts
index 21ecdbc..7d1f0e2 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -6,10 +6,10 @@ buildscript {
maven("https://jitpack.io")
}
dependencies {
- classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10")
- classpath("org.jetbrains.kotlin:kotlin-serialization:1.6.0")
- classpath("com.android.tools.build:gradle:7.0.4")
- classpath("com.google.gms:google-services:4.3.10")
+ classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0")
+ classpath("org.jetbrains.kotlin:kotlin-serialization:1.9.0")
+ classpath("com.android.tools.build:gradle:8.1.1")
+ classpath("com.google.gms:google-services:4.3.15")
}
}
diff --git a/gradle.properties b/gradle.properties
index 3211eb8..0556818 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -10,4 +10,7 @@ android.useAndroidX=true
#MPP
kotlin.mpp.enableGranularSourceSetsMetadata=true
kotlin.native.enableDependencyPropagation=false
-kotlin.mpp.enableCInteropCommonization=true \ No newline at end of file
+kotlin.mpp.enableCInteropCommonization=true
+android.defaults.buildfeatures.buildconfig=true
+android.nonTransitiveRClass=false
+android.nonFinalResIds=false \ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index cede901..8424d98 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Fri Dec 03 21:13:43 CST 2021
distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts
index 2488cde..94b8f09 100644
--- a/shared/build.gradle.kts
+++ b/shared/build.gradle.kts
@@ -8,7 +8,9 @@ kotlin {
val ktor_version = "1.6.6"
val settings_version = "0.8.1"
- android()
+ androidTarget()
+
+ jvmToolchain(17)
listOf(
iosX64(),
@@ -56,14 +58,18 @@ kotlin {
}
android {
- compileSdk = 31
+ compileSdk = 34
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
defaultConfig {
minSdk = 21
- targetSdk = 31
ndk {
abiFilters.clear()
abiFilters += listOf("armeabi-v7a", "arm64-v8a")
}
}
+ namespace = "mx.trackermap.TrackerMap"
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_17
+ targetCompatibility = JavaVersion.VERSION_17
+ }
} \ No newline at end of file
diff --git a/shared/src/androidMain/AndroidManifest.xml b/shared/src/androidMain/AndroidManifest.xml
index f480b0f..568741e 100644
--- a/shared/src/androidMain/AndroidManifest.xml
+++ b/shared/src/androidMain/AndroidManifest.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
-<manifest package="mx.trackermap.TrackerMap" /> \ No newline at end of file
+<manifest /> \ No newline at end of file
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/SessionController.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/SessionController.kt
index 0faaa72..a63bba2 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/SessionController.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/SessionController.kt
@@ -138,7 +138,7 @@ class SessionController(
private suspend fun unregisterFcmToken(token: String) {
print("Unregister FCM token: $token\n")
try {
- userFlow.value?.let { user ->
+ sessionApi.sessionGet().let { user ->
val attributes = user.attributes.toMutableMap()
attributes["notificationTokens"]?.content?.let { tokens ->
if (tokens.contains("$token,")) {