diff --git a/app/src/main/java/sushi/hardcore/aira/ChatActivity.kt b/app/src/main/java/sushi/hardcore/aira/ChatActivity.kt index 1ad7d09..59446d4 100644 --- a/app/src/main/java/sushi/hardcore/aira/ChatActivity.kt +++ b/app/src/main/java/sushi/hardcore/aira/ChatActivity.kt @@ -130,6 +130,7 @@ class ChatActivity : ServiceBoundActivity() { binding.bottomPanel.visibility = View.VISIBLE } airaService.uiCallbacks = object : AIRAService.UiCallbacks { + override fun onConnectFailed(ip: String, errorMsg: String?) {} override fun onNewSession(sessionId: Int, ip: String) { if (this@ChatActivity.sessionId == sessionId) { runOnUiThread { diff --git a/app/src/main/java/sushi/hardcore/aira/MainActivity.kt b/app/src/main/java/sushi/hardcore/aira/MainActivity.kt index 48395b4..8384668 100644 --- a/app/src/main/java/sushi/hardcore/aira/MainActivity.kt +++ b/app/src/main/java/sushi/hardcore/aira/MainActivity.kt @@ -39,6 +39,15 @@ class MainActivity : ServiceBoundActivity() { } } private val uiCallbacks = object : AIRAService.UiCallbacks { + override fun onConnectFailed(ip: String, errorMsg: String?) { + var msg = getString(R.string.unable_to_connect_to, ip) + errorMsg?.let { + msg += ": $it" + } + runOnUiThread { + Toast.makeText(this@MainActivity, msg, Toast.LENGTH_SHORT).show() + } + } override fun onNewSession(sessionId: Int, ip: String) { runOnUiThread { handleNewSession(sessionId, ip) diff --git a/app/src/main/java/sushi/hardcore/aira/background_service/AIRAService.kt b/app/src/main/java/sushi/hardcore/aira/background_service/AIRAService.kt index f993da4..7f19ac6 100644 --- a/app/src/main/java/sushi/hardcore/aira/background_service/AIRAService.kt +++ b/app/src/main/java/sushi/hardcore/aira/background_service/AIRAService.kt @@ -103,6 +103,7 @@ class AIRAService : Service() { } interface UiCallbacks { + fun onConnectFailed(ip: String, errorMsg: String?) fun onNewSession(sessionId: Int, ip: String) fun onSessionDisconnect(sessionId: Int) fun onNameTold(sessionId: Int, name: String) @@ -456,13 +457,20 @@ class AIRAService : Service() { MESSAGE_CONNECT_TO -> { msg.data.getString("ip")?.let { ip -> Thread { - try { - val socket = SocketChannel.open() - if (socket.connect(InetSocketAddress(ip, Constants.port))) { - handleNewSocket(socket, true) + val addr = InetSocketAddress(ip, Constants.port) + if (addr.isUnresolved) { + uiCallbacks?.onConnectFailed(ip, getString(R.string.invalid_ip)) + } else { + try { + val socket = SocketChannel.open() + if (socket.connect(addr)) { + handleNewSocket(socket, true) + } + } catch (e: NoRouteToHostException) { + uiCallbacks?.onConnectFailed(ip, e.message) + } catch (e: ConnectException) { + uiCallbacks?.onConnectFailed(ip, e.message) } - } catch (e: ConnectException) { - Log.w("Connect failed", "$ip: "+e.message) } }.start() } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8f86371..ff96232 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -95,6 +95,7 @@ Send a messageā€¦ This session has no name ! Invalid IP address + Unable to connect to %s Send file