diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f3436ba..ae4f9ea 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,9 +28,7 @@
-
+
diff --git a/app/src/main/java/sushi/hardcore/aira/ChatActivity.kt b/app/src/main/java/sushi/hardcore/aira/ChatActivity.kt
index a121892..d7f7e3a 100644
--- a/app/src/main/java/sushi/hardcore/aira/ChatActivity.kt
+++ b/app/src/main/java/sushi/hardcore/aira/ChatActivity.kt
@@ -23,6 +23,7 @@ import sushi.hardcore.aira.databinding.DialogFingerprintsBinding
import sushi.hardcore.aira.databinding.DialogInfoBinding
import sushi.hardcore.aira.utils.FileUtils
import sushi.hardcore.aira.utils.StringUtils
+import java.io.FileNotFoundException
import java.util.*
class ChatActivity : AppCompatActivity() {
@@ -39,15 +40,19 @@ class ChatActivity : AppCompatActivity() {
if (::airaService.isInitialized && uri != null) {
contentResolver.query(uri, null, null, null, null)?.let { cursor ->
if (cursor.moveToFirst()) {
- contentResolver.openInputStream(uri)?.let { inputStream ->
- val fileName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME))
- val fileSize = cursor.getLong(cursor.getColumnIndex(OpenableColumns.SIZE))
- airaService.sendFileTo(sessionId, fileName, fileSize, inputStream)?.let { msg ->
- chatAdapter.newMessage(ChatItem(true, msg))
- }
- if (airaService.contacts.contains(sessionId)) {
- lastLoadedMessageOffset += 1
+ try {
+ contentResolver.openInputStream(uri)?.let { inputStream ->
+ val fileName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME))
+ val fileSize = cursor.getLong(cursor.getColumnIndex(OpenableColumns.SIZE))
+ airaService.sendFileTo(sessionId, fileName, fileSize, inputStream)?.let { msg ->
+ chatAdapter.newMessage(ChatItem(true, msg))
+ }
+ if (airaService.contacts.contains(sessionId)) {
+ lastLoadedMessageOffset += 1
+ }
}
+ } catch (e: FileNotFoundException) {
+ Toast.makeText(this, e.localizedMessage, Toast.LENGTH_SHORT).show()
}
}
cursor.close()
@@ -70,7 +75,9 @@ class ChatActivity : AppCompatActivity() {
chatAdapter = ChatAdapter(this@ChatActivity, ::onClickSaveFile)
binding.recyclerChat.apply {
adapter = chatAdapter
- layoutManager = LinearLayoutManager(this@ChatActivity, LinearLayoutManager.VERTICAL, false)
+ layoutManager = LinearLayoutManager(this@ChatActivity, LinearLayoutManager.VERTICAL, false).apply {
+ stackFromEnd = true
+ }
addOnScrollListener(object : RecyclerView.OnScrollListener() {
fun loadMsgsIfNeeded(recyclerView: RecyclerView) {
if (!recyclerView.canScrollVertically(-1) && ::airaService.isInitialized) {
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 e808229..420963b 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
@@ -8,6 +8,7 @@ import android.net.nsd.NsdServiceInfo
import android.os.*
import android.os.Process.THREAD_PRIORITY_BACKGROUND
import android.util.Log
+import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
@@ -16,7 +17,6 @@ import sushi.hardcore.aira.*
import java.io.IOException
import java.io.InputStream
import java.net.*
-import java.nio.ByteBuffer
import java.nio.channels.*
class AIRAService : Service() {
@@ -143,10 +143,14 @@ class AIRAService : Service() {
return msg
}
} else {
- val fileTransfer = SendFileTransfer(fileName, fileSize, inputStream)
- sendFileTransfers[sessionId] = fileTransfer
- createFileTransferNotification(sessionId, fileTransfer)
- sendTo(sessionId, Protocol.askLargeFile(fileSize, fileName))
+ if (sendFileTransfers[sessionId] == null && receiveFileTransfers[sessionId] == null) {
+ val fileTransfer = SendFileTransfer(fileName, fileSize, inputStream)
+ sendFileTransfers[sessionId] = fileTransfer
+ createFileTransferNotification(sessionId, fileTransfer)
+ sendTo(sessionId, Protocol.askLargeFile(fileSize, fileName))
+ } else {
+ Toast.makeText(this, R.string.file_transfer_already_in_progress, Toast.LENGTH_SHORT).show()
+ }
}
return null
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 2f87cbf..1468a70 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -71,4 +71,5 @@
Remove contact
Details
Your IP addresses:
+ Another file transfer is already in progress