-
Notifications
You must be signed in to change notification settings - Fork 0
/
Location.kt
74 lines (68 loc) · 2.93 KB
/
Location.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package de.uni_marburg.mathematik.ds.serval.settings
import android.Manifest
import ca.allanwang.kau.kpref.activity.KPrefAdapterBuilder
import ca.allanwang.kau.kpref.activity.items.KPrefSeekbar
import ca.allanwang.kau.kpref.activity.items.KPrefText
import ca.allanwang.kau.utils.hasPermission
import ca.allanwang.kau.utils.snackbar
import ca.allanwang.kau.utils.string
import de.uni_marburg.mathematik.ds.serval.R
import de.uni_marburg.mathematik.ds.serval.activities.SettingsActivity
import de.uni_marburg.mathematik.ds.serval.enums.LocationRequestPriority
import de.uni_marburg.mathematik.ds.serval.utils.Prefs
import de.uni_marburg.mathematik.ds.serval.utils.materialDialogThemed
fun SettingsActivity.getLocationPrefs(): KPrefAdapterBuilder.() -> Unit = {
fun KPrefText.KPrefTextContract<Int>.dependsOnLocationPermission() {
enabler = { hasPermission(Manifest.permission.ACCESS_FINE_LOCATION) }
onDisabledClick = { snackbar(R.string.requires_location_permission) }
}
// TODO Currently the seekbar isn't disabled, when the contract enabler is false
// See: https://github.com/AllanWang/KAU/issues/133
fun KPrefSeekbar.KPrefSeekbarContract.dependsOnLocationPermission() {
enabler = { hasPermission(Manifest.permission.ACCESS_FINE_LOCATION) }
onDisabledClick = { snackbar(R.string.requires_location_permission) }
}
// Location request priority
text(
title = R.string.location_request_priority,
getter = Prefs::locationRequestPriorityType,
setter = { Prefs.locationRequestPriorityType = it }
) {
dependsOnLocationPermission()
onClick = {
materialDialogThemed {
title(R.string.location_request_priority)
items(LocationRequestPriority.values()
.map { "${string(it.titleRes)}\n${string(it.descTextRes)}" }
)
itemsCallbackSingleChoice(item.pref) { _, _, which, _ ->
if (item.pref != which) {
item.pref = which
shouldRestartMain()
reload()
}
true
}
}
}
textGetter = { string(LocationRequestPriority(it).titleRes) }
}
// Location request priority interval
seekbar(
title = R.string.location_request_interval,
getter = Prefs::locationRequestInterval,
setter = { Prefs.locationRequestInterval = it }
) {
dependsOnLocationPermission()
descRes = R.string.location_request_interval_description
}
// Location request priority fastest interval
seekbar(
title = R.string.location_request_fastest_interval,
getter = Prefs::locationRequestFastestInterval,
setter = { Prefs.locationRequestFastestInterval = it }
) {
dependsOnLocationPermission()
descRes = R.string.location_request_fastest_interval_description
}
}