Skip to content

Commit 3107561

Browse files
authored
Adding PassiveLocationPlugin to the Kotlin sample app. (#188)
1 parent 28cb3b3 commit 3107561

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package com.segment.analytics.next.plugins
2+
3+
import android.Manifest
4+
import android.content.Context
5+
import android.content.pm.PackageManager
6+
import android.location.LocationManager
7+
import android.os.Build
8+
import com.segment.analytics.kotlin.core.Analytics
9+
import com.segment.analytics.kotlin.core.BaseEvent
10+
import com.segment.analytics.kotlin.core.platform.Plugin
11+
import kotlinx.serialization.json.JsonPrimitive
12+
import kotlinx.serialization.json.buildJsonObject
13+
import androidx.core.app.ActivityCompat
14+
15+
class PassiveLocationPlugin(val context: Context): Plugin {
16+
override lateinit var analytics: Analytics
17+
override val type: Plugin.Type = Plugin.Type.Enrichment
18+
19+
override fun execute(event: BaseEvent): BaseEvent? {
20+
21+
event.context = buildJsonObject {
22+
23+
event.context.forEach { (key, value) ->
24+
put(key, value)
25+
}
26+
27+
if (ActivityCompat.checkSelfPermission(
28+
context,
29+
Manifest.permission.ACCESS_FINE_LOCATION
30+
) == PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(
31+
context,
32+
Manifest.permission.ACCESS_COARSE_LOCATION
33+
) == PackageManager.PERMISSION_GRANTED
34+
) {
35+
val locationManager =
36+
context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
37+
38+
// Passive Provider is API level 8
39+
val passiveLastKnownLocation = locationManager.getLastKnownLocation(
40+
LocationManager.PASSIVE_PROVIDER
41+
)
42+
43+
put("location", buildJsonObject {
44+
put("lat", JsonPrimitive(passiveLastKnownLocation?.latitude))
45+
put("lon", JsonPrimitive(passiveLastKnownLocation?.longitude))
46+
put("alt", JsonPrimitive(passiveLastKnownLocation?.altitude))
47+
put("acc", JsonPrimitive(passiveLastKnownLocation?.accuracy))
48+
put("bearing", JsonPrimitive(passiveLastKnownLocation?.bearing))
49+
put("provider", JsonPrimitive(passiveLastKnownLocation?.provider))
50+
put("speed", JsonPrimitive(passiveLastKnownLocation?.speed))
51+
52+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
53+
put("acc", JsonPrimitive(passiveLastKnownLocation?.verticalAccuracyMeters))
54+
put(
55+
"BearingAcc",
56+
JsonPrimitive(passiveLastKnownLocation?.bearingAccuracyDegrees)
57+
)
58+
}
59+
60+
61+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
62+
put(
63+
"elapsedRealtimeAgeMillis",
64+
JsonPrimitive(passiveLastKnownLocation?.elapsedRealtimeAgeMillis)
65+
)
66+
put(
67+
"elapsedRealtimeMillis",
68+
JsonPrimitive(passiveLastKnownLocation?.elapsedRealtimeMillis)
69+
)
70+
put("isMock", JsonPrimitive(passiveLastKnownLocation?.isMock))
71+
}
72+
})
73+
} else {
74+
put("location", JsonPrimitive("n/a"))
75+
}
76+
77+
}
78+
79+
80+
return event
81+
}
82+
}

0 commit comments

Comments
 (0)