Skip to content

Commit 68642b6

Browse files
authored
Merge pull request #184 from MaxKellermann/beacon
Add Beacon client for sharing live GPS locations (https://github.com/MaxKellermann/beacon)
2 parents 4949a53 + 181edfb commit 68642b6

File tree

22 files changed

+640
-1
lines changed

22 files changed

+640
-1
lines changed

aat-android/src/main/kotlin/ch/bailu/aat/activities/MainActivity.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import ch.bailu.aat_lib.dispatcher.DispatcherInterface
2020
import ch.bailu.aat_lib.dispatcher.source.CurrentLocationSource
2121
import ch.bailu.aat_lib.dispatcher.source.SensorSource
2222
import ch.bailu.aat_lib.dispatcher.source.TrackerSource
23+
import ch.bailu.aat_lib.dispatcher.source.BeaconSource
2324
import ch.bailu.aat_lib.dispatcher.usage.UsageTrackerAlwaysEnabled
2425
import ch.bailu.aat_lib.gpx.information.InfoID
2526
import ch.bailu.aat_lib.preferences.OnPreferencesChanged
@@ -62,6 +63,7 @@ class MainActivity : ActivityContext() {
6263
private fun createDispatcher(dispatcher: DispatcherInterface, appContext: AppContext) {
6364
val serviceContext = appContext.services
6465
dispatcher.addSource(TrackerSource(serviceContext, appContext.broadcaster, UsageTrackerAlwaysEnabled()))
66+
dispatcher.addSource(BeaconSource(serviceContext, appContext.broadcaster, UsageTrackerAlwaysEnabled()))
6567
dispatcher.addSource(CurrentLocationSource(serviceContext, appContext.broadcaster))
6668
dispatcher.addSource(SensorSource(serviceContext, appContext.broadcaster, InfoID.SENSORS))
6769
}

aat-android/src/main/kotlin/ch/bailu/aat/activities/PreferencesActivity.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import ch.bailu.aat.views.description.mview.MultiView
1313
import ch.bailu.aat.views.layout.ContentView
1414
import ch.bailu.aat.views.preferences.GeneralPreferencesView
1515
import ch.bailu.aat.views.preferences.MapPreferencesView
16+
import ch.bailu.aat.views.preferences.NetworkPreferencesView
1617
import ch.bailu.aat.views.preferences.PresetPreferencesView
1718
import ch.bailu.aat_lib.gpx.information.InfoID
1819
import ch.bailu.aat_lib.preferences.OnPreferencesChanged
@@ -23,6 +24,11 @@ class PreferencesActivity : ActivityContext(), OnPreferencesChanged {
2324
companion object {
2425
@JvmField
2526
val SOLID_KEY: String = PreferencesActivity::class.java.simpleName
27+
28+
/**
29+
* The number of pages not counting the "preset" pages.
30+
*/
31+
private const val N_BASE_PAGES = 3
2632
}
2733

2834
private val theme = AppTheme.preferences
@@ -63,6 +69,13 @@ class PreferencesActivity : ActivityContext(), OnPreferencesChanged {
6369
mapTilePreferences,
6470
getString(R.string.p_tiles)
6571
)
72+
multiView.add(
73+
NetworkPreferencesView(this, theme),
74+
"Network"
75+
)
76+
77+
assert(multiView.pageCount() == N_BASE_PAGES);
78+
6679
addPresetPreferences(multiView, theme)
6780
return multiView
6881
}
@@ -94,7 +107,7 @@ class PreferencesActivity : ActivityContext(), OnPreferencesChanged {
94107
}
95108

96109
private fun addPresetPreferences(multiView: MultiView, theme: UiTheme) {
97-
while (multiView.pageCount() > 2) multiView.remove(multiView.pageCount() - 1)
110+
while (multiView.pageCount() > N_BASE_PAGES) multiView.remove(multiView.pageCount() - 1)
98111

99112
for (i in 0 until getPresetCount()) {
100113
multiView.add(

aat-android/src/main/kotlin/ch/bailu/aat/services/OneService.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package ch.bailu.aat.services
22

33
import android.content.Context
44
import ch.bailu.aat.app.AndroidAppContext
5+
import ch.bailu.aat.preferences.Storage
56
import ch.bailu.aat.preferences.location.AndroidSolidLocationProvider
67
import ch.bailu.aat.services.sensor.SensorService
78
import ch.bailu.aat_lib.service.tileremover.TileRemoverService
@@ -24,11 +25,14 @@ import ch.bailu.aat_lib.service.render.RenderServiceInterface
2425
import ch.bailu.aat_lib.service.sensor.SensorServiceInterface
2526
import ch.bailu.aat_lib.service.tracker.TrackerService
2627
import ch.bailu.aat_lib.service.tracker.TrackerServiceInterface
28+
import ch.bailu.aat_lib.service.beacon.BeaconService
29+
import ch.bailu.aat_lib.service.beacon.BeaconServiceInterface
2730
import ch.bailu.aat_lib.util.WithStatusText
2831

2932
class OneService : AbsService() {
3033
private var location: LocationService? = null
3134
private var tracker: TrackerService? = null
35+
private var beacon: BeaconService? = null
3236
private var background: BackgroundServiceInterface? = null
3337
private var iconMap: IconMapService? = null
3438
private var cache: CacheServiceInterface? = null
@@ -46,6 +50,9 @@ class OneService : AbsService() {
4650
override fun onDestroy() {
4751
onDestroyCalled()
4852

53+
beacon?.close()
54+
beacon = null
55+
4956
tracker?.close()
5057
tracker = null
5158

@@ -157,6 +164,12 @@ class OneService : AbsService() {
157164
return tracker!!
158165
}
159166

167+
@Synchronized
168+
override fun getBeaconService(): BeaconServiceInterface {
169+
if (beacon == null) beacon = BeaconService(this, appContext.broadcaster, Storage(this))
170+
return beacon!!
171+
}
172+
160173
@Synchronized
161174
override fun getTileRemoverService(): TileRemoverService {
162175
if (tileRemover == null) tileRemover = TileRemoverService(appContext)

aat-android/src/main/kotlin/ch/bailu/aat/services/ServiceLink.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import ch.bailu.aat_lib.service.location.LocationServiceInterface
1818
import ch.bailu.aat_lib.service.render.RenderServiceInterface
1919
import ch.bailu.aat_lib.service.sensor.SensorServiceInterface
2020
import ch.bailu.aat_lib.service.tracker.TrackerServiceInterface
21+
import ch.bailu.aat_lib.service.beacon.BeaconServiceInterface
2122
import java.io.Closeable
2223

2324

@@ -149,6 +150,10 @@ abstract class ServiceLink(private val context: Context) : ServiceContext, Servi
149150
return getService()!!.getTrackerService()
150151
}
151152

153+
override fun getBeaconService(): BeaconServiceInterface {
154+
return getService()!!.getBeaconService()
155+
}
156+
152157
override fun getLocationService(): LocationServiceInterface {
153158
return getService()!!.getLocationService()
154159
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package ch.bailu.aat.views.preferences
2+
3+
import ch.bailu.aat.R
4+
import ch.bailu.aat.activities.ActivityContext
5+
import ch.bailu.aat.preferences.Storage
6+
import ch.bailu.aat.util.ui.theme.UiTheme
7+
import ch.bailu.aat.views.preferences.dialog.SolidTextInputDialog
8+
import ch.bailu.aat_lib.preferences.StorageInterface
9+
import ch.bailu.aat_lib.preferences.beacon.SolidBeaconEnabled
10+
import ch.bailu.aat_lib.preferences.beacon.SolidBeaconServer
11+
import ch.bailu.aat_lib.preferences.beacon.SolidBeaconKey
12+
13+
class NetworkPreferencesView(acontext: ActivityContext, theme: UiTheme) :
14+
VerticalScrollView(acontext) {
15+
init {
16+
val storage: StorageInterface = Storage(acontext)
17+
18+
add(TitleView(acontext, "Beacon", theme))
19+
20+
add(SolidCheckBox(acontext, SolidBeaconEnabled(storage), theme))
21+
22+
add(
23+
SolidStringView(
24+
acontext,
25+
SolidBeaconServer(storage),
26+
theme
27+
)
28+
)
29+
30+
add(
31+
SolidTextInputView(
32+
acontext,
33+
SolidBeaconKey(storage),
34+
SolidTextInputDialog.INTEGER,
35+
theme
36+
)
37+
)
38+
}
39+
}

aat-gtk/flatpak/gradle-sources.json

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1532,6 +1532,27 @@
15321532
"dest": "maven-local/com/github/bailuk/mapsforge-gtk/0.5.0",
15331533
"dest-filename": "mapsforge-gtk-0.5.0.pom"
15341534
},
1535+
{
1536+
"type": "file",
1537+
"url": "https://jitpack.io/com/github/MaxKellermann/beacon/v0.1/beacon-v0.1.jar",
1538+
"sha256": "5204cb1cd5367c86fcf0ca461091fe819b628154328025aea2f77bf92065dc59",
1539+
"dest": "maven-local/com/github/MaxKellermann/beacon/v0.1",
1540+
"dest-filename": "beacon-v0.1.jar"
1541+
},
1542+
{
1543+
"type": "file",
1544+
"url": "https://jitpack.io/com/github/MaxKellermann/beacon/v0.1/beacon-v0.1.module",
1545+
"sha256": "fc9a6d0cbe50c9b5d68b7f8d4b9559c84998528ea583a5ffd3179d92d044124a",
1546+
"dest": "maven-local/com/github/MaxKellermann/beacon/v0.1",
1547+
"dest-filename": "beacon-v0.1.module"
1548+
},
1549+
{
1550+
"type": "file",
1551+
"url": "https://jitpack.io/com/github/MaxKellermann/beacon/v0.1/beacon-v0.1.pom",
1552+
"sha256": "3de827a9aff1bb5eb06a454bf214cb2bcb51c32bf347c991f8e5b96f4a4f345f",
1553+
"dest": "maven-local/com/github/MaxKellermann/beacon/v0.1",
1554+
"dest-filename": "beacon-v0.1.pom"
1555+
},
15351556
{
15361557
"type": "file",
15371558
"url": "https://plugins.gradle.org/m2/com/github/spotbugs/spotbugs-annotations/4.9.3/spotbugs-annotations-4.9.3.jar",

aat-gtk/src/main/kotlin/ch/bailu/aat_gtk/service/GtkServices.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import ch.bailu.aat_lib.service.sensor.SensorServiceInterface
2323
import ch.bailu.aat_lib.service.tileremover.TileRemoverService
2424
import ch.bailu.aat_lib.service.tracker.TrackerService
2525
import ch.bailu.aat_lib.service.tracker.TrackerServiceInterface
26+
import ch.bailu.aat_lib.service.beacon.BeaconService
27+
import ch.bailu.aat_lib.service.beacon.BeaconServiceInterface
2628

2729
class GtkServices (appContext: AppContext) : ServicesInterface {
2830
private val lazyLocationService by lazy { LocationService(
@@ -38,6 +40,12 @@ class GtkServices (appContext: AppContext) : ServicesInterface {
3840
this
3941
) }
4042

43+
private val lazyBeaconService by lazy { BeaconService(
44+
this,
45+
appContext.broadcaster,
46+
appContext.storage
47+
) }
48+
4149
private val lazyTileRemoverService by lazy {
4250
TileRemoverService(appContext)
4351
}
@@ -92,6 +100,10 @@ class GtkServices (appContext: AppContext) : ServicesInterface {
92100
return lazyTrackerService
93101
}
94102

103+
override fun getBeaconService(): BeaconServiceInterface {
104+
return lazyBeaconService
105+
}
106+
95107
override fun getIconMapService(): IconMapServiceInterface {
96108
return lazyIconMapService
97109
}

aat-gtk/src/main/kotlin/ch/bailu/aat_gtk/view/dialog/PreferencesDialog.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package ch.bailu.aat_gtk.view.dialog
33
import ch.bailu.aat_gtk.view.preferences.ActivityPreferencesPage
44
import ch.bailu.aat_gtk.view.preferences.GeneralPreferencesPage
55
import ch.bailu.aat_gtk.view.preferences.MapPreferencesPage
6+
import ch.bailu.aat_gtk.view.preferences.NetworkPreferencesPage
67
import ch.bailu.aat_lib.app.AppContext
78
import ch.bailu.gtk.adw.PreferencesDialog
89
import ch.bailu.gtk.gtk.Application
@@ -15,6 +16,7 @@ object PreferencesDialog {
1516
window = PreferencesDialog().apply {
1617
add(GeneralPreferencesPage(app, app.activeWindow, appContext).page)
1718
add(MapPreferencesPage(appContext, app, app.activeWindow).page)
19+
add(NetworkPreferencesPage(appContext).page)
1820
add(ActivityPreferencesPage(appContext.storage).page)
1921

2022
onDestroy {
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package ch.bailu.aat_gtk.view.preferences
2+
3+
import ch.bailu.aat_lib.app.AppContext
4+
import ch.bailu.aat_lib.preferences.beacon.*
5+
import ch.bailu.gtk.adw.PreferencesGroup
6+
import ch.bailu.gtk.gtk.Application
7+
8+
class NetworkPreferencesPage(appContext: AppContext) : PreferencesPageParent("Network", "network") {
9+
init {
10+
page.add(PreferencesGroup().apply {
11+
setTitle("Beacon")
12+
add(SolidBooleanSwitchView(SolidBeaconEnabled(appContext.storage)).layout)
13+
add(SolidEntryView(SolidBeaconServer(appContext.storage)).layout)
14+
add(SolidEntryView(SolidBeaconKey(appContext.storage)).layout)
15+
})
16+
}
17+
}

aat-lib/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ dependencies {
6262
* For HtmlEscapers
6363
*/
6464
implementation("com.google.guava:guava:33.5.0-jre")
65+
66+
implementation("com.github.MaxKellermann:beacon:v0.1")
6567
}
6668

6769
testing {

0 commit comments

Comments
 (0)