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