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