From d6a7d1466d6db9ab27018768b9da05e5bb9c43b0 Mon Sep 17 00:00:00 2001 From: Hardcore Sushi Date: Tue, 11 May 2021 16:18:01 +0200 Subject: [PATCH] Refresh name feature --- .../java/sushi/hardcore/aira/ChatActivity.kt | 18 ++++---- .../aira/background_service/AIRAService.kt | 41 ++++++++++--------- app/src/main/res/menu/chat_activity.xml | 5 +++ app/src/main/res/values/strings.xml | 1 + build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 6 files changed, 39 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/sushi/hardcore/aira/ChatActivity.kt b/app/src/main/java/sushi/hardcore/aira/ChatActivity.kt index 4c05e19..166c1ac 100644 --- a/app/src/main/java/sushi/hardcore/aira/ChatActivity.kt +++ b/app/src/main/java/sushi/hardcore/aira/ChatActivity.kt @@ -148,7 +148,7 @@ class ChatActivity : ServiceBoundActivity() { if (airaService.contacts.contains(sessionId)) { lastLoadedMessageOffset += 1 } - airaService.isAppInBackground + !airaService.isAppInBackground } else { false } @@ -204,17 +204,15 @@ class ChatActivity : ServiceBoundActivity() { override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.chat_activity, menu) val contact = airaService.contacts[sessionId] - if (contact == null){ - menu.findItem(R.id.delete_conversation).isVisible = false - menu.findItem(R.id.set_as_contact).isVisible = true - menu.findItem(R.id.remove_contact).isVisible = false + menu.findItem(R.id.delete_conversation).isVisible = contact != null + menu.findItem(R.id.set_as_contact).isVisible = contact == null + menu.findItem(R.id.remove_contact).isVisible = contact != null + if (contact == null) { menu.findItem(R.id.verify).isVisible = false } else { - menu.findItem(R.id.delete_conversation).isVisible = true - menu.findItem(R.id.set_as_contact).isVisible = false - menu.findItem(R.id.remove_contact).isVisible = true menu.findItem(R.id.verify).isVisible = !contact.verified } + menu.findItem(R.id.refresh_name).isEnabled = airaService.isOnline(sessionId) return true } @@ -303,6 +301,10 @@ class ChatActivity : ServiceBoundActivity() { .show() true } + R.id.refresh_name -> { + airaService.sendTo(sessionId, Protocol.askName()) + true + } else -> super.onOptionsItemSelected(item) } } 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 e315e8f..2cad914 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 @@ -421,7 +421,7 @@ class AIRAService : Service() { override fun onCreate() { HandlerThread("", THREAD_PRIORITY_BACKGROUND).apply { start() - serviceHandler = object : Handler(looper){ + serviceHandler = object : Handler(looper) { override fun handleMessage(msg: Message) { try { when (msg.what) { @@ -438,15 +438,16 @@ class AIRAService : Service() { } MESSAGE_CONNECT_TO -> { msg.data.getString("ip")?.let { ip -> - try { - val socket = SocketChannel.open() - if (socket.connect(InetSocketAddress(ip, Constants.port))) { - handleNewSocket(socket, true) + Thread { + try { + val socket = SocketChannel.open() + if (socket.connect(InetSocketAddress(ip, Constants.port))) { + handleNewSocket(socket, true) + } + } catch (e: ConnectException) { + Log.w("Connect failed", "$ip: "+e.message) } - } catch (e: ConnectException) { - Log.w("Connect failed", e.message.toString()) - return - } + }.start() } } MESSAGE_CANCEL_FILE_TRANSFER -> { @@ -483,18 +484,18 @@ class AIRAService : Service() { } } } - val contactList = AIRADatabase.loadContacts() - if (contactList == null) { - contacts = HashMap(0) - } else { - contacts = HashMap(contactList.size) - for (contact in contactList) { - contacts[sessionCounter] = contact - if (!contact.seen) { - notSeen.add(sessionCounter) - } - sessionCounter++ + } + val contactList = AIRADatabase.loadContacts() + if (contactList == null) { + contacts = HashMap(0) + } else { + contacts = HashMap(contactList.size) + for (contact in contactList) { + contacts[sessionCounter] = contact + if (!contact.seen) { + notSeen.add(sessionCounter) } + sessionCounter++ } } } diff --git a/app/src/main/res/menu/chat_activity.xml b/app/src/main/res/menu/chat_activity.xml index 81d9ea7..cbab399 100644 --- a/app/src/main/res/menu/chat_activity.xml +++ b/app/src/main/res/menu/chat_activity.xml @@ -32,4 +32,9 @@ android:icon="@drawable/ic_info" android:title="@string/details"/> + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bb78981..85b3cb8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -80,4 +80,5 @@ Identity About AIRA version + Refresh name diff --git a/build.gradle b/build.gradle index 0cbb05a..7a2fb21 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.3' + classpath 'com.android.tools.build:gradle:4.2.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 67e827d..5b34074 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip