diff --git a/app/src/main/java/sushi/hardcore/aira/ChatActivity.kt b/app/src/main/java/sushi/hardcore/aira/ChatActivity.kt
index b85b47f..4c05e19 100644
--- a/app/src/main/java/sushi/hardcore/aira/ChatActivity.kt
+++ b/app/src/main/java/sushi/hardcore/aira/ChatActivity.kt
@@ -307,20 +307,28 @@ class ChatActivity : ServiceBoundActivity() {
}
}
- override fun onStart() {
- super.onStart()
+ override fun onResume() {
+ super.onResume()
if (isServiceInitialized()) {
airaService.setSeen(sessionId, true)
}
}
+ override fun onPause() {
+ super.onPause()
+ lastLoadedMessageOffset = 0
+ }
+
private fun onClickSaveFile(fileName: String, rawUuid: ByteArray) {
- FileUtils.openFileForDownload(this, fileName)?.apply {
- AIRADatabase.loadFile(rawUuid)?.let {
- write(it)
+ val buffer = AIRADatabase.loadFile(rawUuid)
+ if (buffer == null) {
+ Toast.makeText(this, R.string.loadFile_failed, Toast.LENGTH_SHORT).show()
+ } else {
+ FileUtils.openFileForDownload(this, fileName)?.apply {
+ write(buffer)
+ close()
Toast.makeText(this@ChatActivity, R.string.file_saved, Toast.LENGTH_SHORT).show()
}
- close()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/sushi/hardcore/aira/MainActivity.kt b/app/src/main/java/sushi/hardcore/aira/MainActivity.kt
index 5ddc703..6e55a17 100644
--- a/app/src/main/java/sushi/hardcore/aira/MainActivity.kt
+++ b/app/src/main/java/sushi/hardcore/aira/MainActivity.kt
@@ -21,7 +21,6 @@ import sushi.hardcore.aira.databinding.ActivityMainBinding
import sushi.hardcore.aira.databinding.DialogIpAddressesBinding
import sushi.hardcore.aira.utils.FileUtils
import sushi.hardcore.aira.utils.StringUtils
-import java.lang.StringBuilder
import java.net.NetworkInterface
class MainActivity : ServiceBoundActivity() {
@@ -235,8 +234,8 @@ class MainActivity : ServiceBoundActivity() {
}
}
- override fun onStop() {
- super.onStop()
+ override fun onPause() {
+ super.onPause()
if (isServiceInitialized()) {
airaService.isAppInBackground = true
}
diff --git a/app/src/main/java/sushi/hardcore/aira/ServiceBoundActivity.kt b/app/src/main/java/sushi/hardcore/aira/ServiceBoundActivity.kt
index 6e98cf3..19d35d7 100644
--- a/app/src/main/java/sushi/hardcore/aira/ServiceBoundActivity.kt
+++ b/app/src/main/java/sushi/hardcore/aira/ServiceBoundActivity.kt
@@ -1,5 +1,6 @@
package sushi.hardcore.aira
+import android.content.Context
import android.content.Intent
import android.content.ServiceConnection
import androidx.appcompat.app.AppCompatActivity
@@ -14,8 +15,8 @@ open class ServiceBoundActivity: AppCompatActivity() {
return ::airaService.isInitialized
}
- override fun onStop() {
- super.onStop()
+ override fun onPause() {
+ super.onPause()
if (::airaService.isInitialized) {
airaService.isAppInBackground = true
airaService.uiCallbacks = null
@@ -23,10 +24,11 @@ open class ServiceBoundActivity: AppCompatActivity() {
}
}
- override fun onStart() {
- super.onStart()
+ override fun onResume() {
+ super.onResume()
if (!::serviceIntent.isInitialized) {
serviceIntent = Intent(this, AIRAService::class.java)
}
+ bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE)
}
}
\ No newline at end of file
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 266a580..e315e8f 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
@@ -282,35 +282,37 @@ class AIRAService : Service() {
try {
val session = Session(socket, outgoing)
if (session.doHandshake()) {
- var isActuallyNewSession = true
- for (s in sessions.values) {
- if (s.peerPublicKey.contentEquals(session.peerPublicKey)) {
- isActuallyNewSession = false
- }
- }
- if (isActuallyNewSession && !session.peerPublicKey.contentEquals(AIRADatabase.getIdentityPublicKey())) {
- var sessionId: Int? = null
- for ((i, contact) in contacts) {
- if (contact.publicKey.contentEquals(session.peerPublicKey)){
- sessions[i] = session
- sessionId = i
+ synchronized(this) {
+ var isActuallyNewSession = true
+ for (s in sessions.values) {
+ if (s.peerPublicKey.contentEquals(session.peerPublicKey)) {
+ isActuallyNewSession = false
}
}
- if (sessionId == null) {
- sessions[sessionCounter] = session
- savedMsgs[sessionCounter] = mutableListOf()
- sessionId = sessionCounter
- sessionCounter++
+ if (isActuallyNewSession && !session.peerPublicKey.contentEquals(AIRADatabase.getIdentityPublicKey())) {
+ var sessionId: Int? = null
+ for ((i, contact) in contacts) {
+ if (contact.publicKey.contentEquals(session.peerPublicKey)){
+ sessions[i] = session
+ sessionId = i
+ }
+ }
+ if (sessionId == null) {
+ sessions[sessionCounter] = session
+ savedMsgs[sessionCounter] = mutableListOf()
+ sessionId = sessionCounter
+ sessionCounter++
+ }
+ session.configureBlocking(false)
+ val key = session.register(selector, SelectionKey.OP_READ)
+ sessionIdByKey[key] = sessionId
+ uiCallbacks?.onNewSession(sessionId, session.ip)
+ if (!isContact(sessionId)) {
+ session.encryptAndSend(Protocol.askName())
+ }
+ } else {
+ session.close()
}
- session.configureBlocking(false)
- val key = session.register(selector, SelectionKey.OP_READ)
- sessionIdByKey[key] = sessionId
- uiCallbacks?.onNewSession(sessionId, session.ip)
- if (!isContact(sessionId)) {
- session.encryptAndSend(Protocol.askName())
- }
- } else {
- session.close()
}
} else {
session.close()
diff --git a/app/src/main/res/layout/activity_chat.xml b/app/src/main/res/layout/activity_chat.xml
index 24154f8..44ed997 100644
--- a/app/src/main/res/layout/activity_chat.xml
+++ b/app/src/main/res/layout/activity_chat.xml
@@ -24,10 +24,13 @@
+ app:layout_constraintStart_toEndOf="@id/image_trust_level"
+ app:layout_constraintEnd_toStartOf="@+id/button_send"/>
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 62330d1..bc9c965 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -56,7 +56,6 @@
android:maxLines="1"
android:imeOptions="actionGo"
android:hint="@string/add_peer_ip"
- android:layout_marginEnd="10dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
@@ -64,11 +63,10 @@
+ android:paddingStart="6dp"
+ android:paddingVertical="5dp">
+ android:layout_width="@dimen/image_button_size"
+ android:layout_height="@dimen/image_button_size"
+ android:src="@drawable/ic_save"
+ style="@style/ImageButton"/>
#3845A3
#ffffff
#66666666
+ #00000000
\ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..bd7a48a
--- /dev/null
+++ b/app/src/main/res/values/dimens.xml
@@ -0,0 +1,4 @@
+
+
+ 30dp
+
\ 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 b231b5a..38bffe1 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -75,4 +75,5 @@
Another file transfer is already in progress
Settings
Log out
+ File extraction failed
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 0e1d01e..8f9bbee 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -13,6 +13,11 @@
- 15dp
- 15dp
+