diff --git a/app/src/main/java/com/futo/platformplayer/Settings.kt b/app/src/main/java/com/futo/platformplayer/Settings.kt
index 3c52c2c2..e105d119 100644
--- a/app/src/main/java/com/futo/platformplayer/Settings.kt
+++ b/app/src/main/java/com/futo/platformplayer/Settings.kt
@@ -948,6 +948,9 @@ class Settings : FragmentedStorageFileJson() {
@FormField(R.string.connect_local_direct_through_relay, FieldForm.TOGGLE, R.string.connect_local_direct_through_relay_description, 3)
var connectLocalDirectThroughRelay: Boolean = true;
+
+ @FormField(R.string.local_connections, FieldForm.TOGGLE, R.string.local_connections_description, 3)
+ var localConnections: Boolean = true;
}
@FormField(R.string.info, FieldForm.GROUP, -1, 21)
diff --git a/app/src/main/java/com/futo/platformplayer/activities/SyncPairActivity.kt b/app/src/main/java/com/futo/platformplayer/activities/SyncPairActivity.kt
index 5e808977..c34e8362 100644
--- a/app/src/main/java/com/futo/platformplayer/activities/SyncPairActivity.kt
+++ b/app/src/main/java/com/futo/platformplayer/activities/SyncPairActivity.kt
@@ -83,6 +83,7 @@ class SyncPairActivity : AppCompatActivity() {
_layoutPairingSuccess.setOnClickListener {
_layoutPairingSuccess.visibility = View.GONE
+ finish()
}
_layoutPairingError.setOnClickListener {
_layoutPairingError.visibility = View.GONE
@@ -111,9 +112,15 @@ class SyncPairActivity : AppCompatActivity() {
try {
StateSync.instance.connect(deviceInfo) { complete, message ->
lifecycleScope.launch(Dispatchers.Main) {
- if (complete != null && complete) {
- _layoutPairingSuccess.visibility = View.VISIBLE
- _layoutPairing.visibility = View.GONE
+ if (complete != null) {
+ if (complete) {
+ _layoutPairingSuccess.visibility = View.VISIBLE
+ _layoutPairing.visibility = View.GONE
+ } else {
+ _textError.text = message
+ _layoutPairingError.visibility = View.VISIBLE
+ _layoutPairing.visibility = View.GONE
+ }
} else {
_textPairingStatus.text = message
}
@@ -137,8 +144,6 @@ class SyncPairActivity : AppCompatActivity() {
_textError.text = e.message
_layoutPairing.visibility = View.GONE
Logger.e(TAG, "Failed to pair", e)
- } finally {
- _layoutPairing.visibility = View.GONE
}
}
diff --git a/app/src/main/java/com/futo/platformplayer/states/StateSync.kt b/app/src/main/java/com/futo/platformplayer/states/StateSync.kt
index f4c3ecf8..2b7559c9 100644
--- a/app/src/main/java/com/futo/platformplayer/states/StateSync.kt
+++ b/app/src/main/java/com/futo/platformplayer/states/StateSync.kt
@@ -296,29 +296,31 @@ class StateSync {
Logger.i(TAG, "Sync key pair initialized (public key = ${publicKey})")
- _serverStarted = true
- _thread = Thread {
- try {
- val serverSocket = ServerSocket(PORT)
- _serverSocket = serverSocket
+ if (Settings.instance.synchronization.localConnections) {
+ _serverStarted = true
+ _thread = Thread {
+ try {
+ val serverSocket = ServerSocket(PORT)
+ _serverSocket = serverSocket
- Log.i(TAG, "Running on port ${PORT} (TCP)")
+ Log.i(TAG, "Running on port ${PORT} (TCP)")
- while (_started) {
- val socket = serverSocket.accept()
- val session = createSocketSession(socket, true)
- session.startAsResponder()
+ while (_started) {
+ val socket = serverSocket.accept()
+ val session = createSocketSession(socket, true)
+ session.startAsResponder()
+ }
+ } catch (e: Throwable) {
+ _serverStarted = false
+ Logger.e(TAG, "Failed to bind server socket to port ${PORT}", e)
+ StateApp.instance.scopeOrNull?.launch(Dispatchers.Main) {
+ onServerBindFail.invoke()
+ }
+ } finally {
+ _serverStarted = false
}
- } catch (e: Throwable) {
- _serverStarted = false
- Logger.e(TAG, "Failed to bind server socket to port ${PORT}", e)
- StateApp.instance.scopeOrNull?.launch(Dispatchers.Main) {
- onServerBindFail.invoke()
- }
- } finally {
- _serverStarted = false
- }
- }.apply { start() }
+ }.apply { start() }
+ }
if (Settings.instance.synchronization.connectLast) {
_connectThread = Thread {
@@ -490,7 +492,7 @@ class StateSync {
}
fun showFailedToBindDialogIfNecessary(context: Context) {
- if (!_serverStarted) {
+ if (!_serverStarted && Settings.instance.synchronization.localConnections) {
try {
UIDialogs.showDialogOk(context, R.drawable.ic_warning, "Local discovery unavailable, port was in use")
} catch (e: Throwable) {
diff --git a/app/src/main/res/layout/view_sync.xml b/app/src/main/res/layout/view_sync.xml
index 461b8189..cdba0146 100644
--- a/app/src/main/res/layout/view_sync.xml
+++ b/app/src/main/res/layout/view_sync.xml
@@ -57,15 +57,15 @@
+ android:padding="12dp" />
Allow devices to be connected to through the relay
Connect direct through relay
Allow devices to be directly locally connected to through information discovered from the relay
+ Local connections
+ Allow device to be directly locally connected
Gesture controls
Volume slider
Enable slide gesture to change volume