Skip to content

Commit 61cccda

Browse files
committed
Add exception utils
1 parent ca51ea5 commit 61cccda

File tree

2 files changed

+54
-3
lines changed

2 files changed

+54
-3
lines changed

app/src/main/java/com/kylecorry/trailsensecore/domain/navigation/NavigationService.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,12 @@ class NavigationService : INavigationService {
6060
beacons: List<Beacon>,
6161
maxDistance: Float
6262
): List<Beacon> {
63-
return beacons.filter {
64-
location.distanceTo(it.coordinate) <= maxDistance
65-
}
63+
return beacons
64+
.asSequence()
65+
.map { Pair(it, location.distanceTo(it.coordinate)) }
66+
.filter { it.second <= maxDistance }
67+
.sortedBy { it.second }
68+
.map { it.first }
69+
.toList()
6670
}
6771
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.kylecorry.trailsensecore.infrastructure.system
2+
3+
import android.content.Context
4+
import android.os.Build
5+
import android.os.Looper
6+
import java.time.Duration
7+
import kotlin.concurrent.thread
8+
import kotlin.system.exitProcess
9+
10+
object ExceptionUtils {
11+
12+
fun onUncaughtException(waitTime: Duration, exceptionHandler: (throwable: Throwable) -> Unit) {
13+
Thread.setDefaultUncaughtExceptionHandler { _, throwable ->
14+
thread {
15+
Looper.prepare()
16+
exceptionHandler(throwable)
17+
Looper.loop()
18+
}
19+
20+
try {
21+
Thread.sleep(waitTime.toMillis())
22+
} catch (e: InterruptedException) {
23+
}
24+
25+
exitProcess(2)
26+
}
27+
}
28+
29+
fun report(context: Context, throwable: Throwable?, email: String, appName: String) {
30+
val androidVersion = Build.VERSION.SDK_INT
31+
val device = "${Build.MANUFACTURER} ${Build.PRODUCT} (${Build.MODEL})"
32+
val appVersion = PackageUtils.getVersionName(context)
33+
val message = throwable?.message ?: ""
34+
val stackTrace = throwable?.stackTraceToString() ?: ""
35+
36+
val body =
37+
"Version: ${appVersion}\nDevice: ${device}\nAndroid SDK: ${androidVersion}\nMessage: ${message}\n\n$stackTrace"
38+
39+
val intent = IntentUtils.email(
40+
email,
41+
"Error in $appName $appVersion",
42+
body
43+
)
44+
context.startActivity(intent)
45+
}
46+
47+
}

0 commit comments

Comments
 (0)