Compare commits

..

2 Commits

Author SHA1 Message Date
Matéo Duparc 8354490940
Remove unnecessary permissions 2021-08-14 21:46:21 +02:00
Matéo Duparc c6f1e6d432
Fix share intent handling bugs 2021-08-14 21:44:52 +02:00
5 changed files with 47 additions and 36 deletions

View File

@ -9,6 +9,8 @@
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove"/> <uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" tools:node="remove"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="remove"/>
<application <application
android:icon="@drawable/ic_launcher" android:icon="@drawable/ic_launcher"
@ -28,7 +30,7 @@
</intent-filter> </intent-filter>
</receiver> </receiver>
<receiver android:name=".background_service.SystemBroadcastReceiver"> <receiver android:name=".background_service.SystemBroadcastReceiver" android:exported="true">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter> </intent-filter>
@ -38,7 +40,8 @@
<activity android:name=".MainActivity" android:theme="@style/Theme.AIRA.NoActionBar"/> <activity android:name=".MainActivity" android:theme="@style/Theme.AIRA.NoActionBar"/>
<activity <activity
android:name=".LoginActivity" android:name=".LoginActivity"
android:windowSoftInputMode="adjustResize"> android:windowSoftInputMode="adjustResize"
android:exported="true">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER"/>

View File

@ -311,7 +311,10 @@ class ChatActivity : ServiceBoundActivity() {
} }
private fun scrollToBottom() { private fun scrollToBottom() {
binding.recyclerChat.smoothScrollToPosition(chatAdapter.itemCount-1) val target = chatAdapter.itemCount-1
if (target >= 0) {
binding.recyclerChat.smoothScrollToPosition(target)
}
} }
override fun onCreateOptionsMenu(menu: Menu): Boolean { override fun onCreateOptionsMenu(menu: Menu): Boolean {

View File

@ -8,7 +8,6 @@ import android.os.Bundle
import android.os.IBinder import android.os.IBinder
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.View
import android.widget.AbsListView import android.widget.AbsListView
import android.widget.AdapterView import android.widget.AdapterView
import android.widget.Toast import android.widget.Toast
@ -117,33 +116,28 @@ class MainActivity : ServiceBoundActivity() {
} }
setOnScrollListener(onSessionsScrollListener) setOnScrollListener(onSessionsScrollListener)
} }
if (openedToShareFile) { offlineSessionAdapter = SessionAdapter(this)
binding.offlineSessions.visibility = View.GONE binding.offlineSessions.apply {
binding.textOfflineSessions.visibility = View.GONE adapter = offlineSessionAdapter
} else { onItemClickListener = if (openedToShareFile) {
offlineSessionAdapter = SessionAdapter(this) onSessionsItemClickSendFile
binding.offlineSessions.apply { } else {
adapter = offlineSessionAdapter AdapterView.OnItemClickListener { _, _, position, _ ->
onItemClickListener = if (openedToShareFile) { if (isSelecting()) {
onSessionsItemClickSendFile changeSelection(offlineSessionAdapter!!, position)
} else { } else {
AdapterView.OnItemClickListener { _, _, position, _ -> launchChatActivity(offlineSessionAdapter!!.getItem(position))
if (isSelecting()) {
changeSelection(offlineSessionAdapter!!, position)
} else {
launchChatActivity(offlineSessionAdapter!!.getItem(position))
}
} }
} }
onItemLongClickListener = AdapterView.OnItemLongClickListener { _, _, position, _ ->
changeSelection(offlineSessionAdapter!!, position)
true
}
setOnScrollListener(onSessionsScrollListener)
} }
if (intent.action == NotificationBroadcastReceiver.ACTION_LOGOUT) { onItemLongClickListener = AdapterView.OnItemLongClickListener { _, _, position, _ ->
askLogOut() changeSelection(offlineSessionAdapter!!, position)
true
} }
setOnScrollListener(onSessionsScrollListener)
}
if (intent.action == NotificationBroadcastReceiver.ACTION_LOGOUT) {
askLogOut()
} }
serviceConnection = object : ServiceConnection { serviceConnection = object : ServiceConnection {
override fun onServiceConnected(name: ComponentName?, service: IBinder) { override fun onServiceConnected(name: ComponentName?, service: IBinder) {
@ -347,13 +341,15 @@ class MainActivity : ServiceBoundActivity() {
Toast.makeText(this, R.string.open_uri_failed, Toast.LENGTH_SHORT).show() Toast.makeText(this, R.string.open_uri_failed, Toast.LENGTH_SHORT).show()
} else { } else {
val msg = if (uris!!.size == 1) { val msg = if (uris!!.size == 1) {
val sendFile = FileUtils.openFileFromUri(this, uris!![0]) val result = FileUtils.openFileFromUri(this, uris!![0])
if (sendFile == null) { if (result.file == null) {
Toast.makeText(this, R.string.open_uri_failed, Toast.LENGTH_SHORT).show() if (!result.errorHandled) {
Toast.makeText(this, R.string.open_uri_failed, Toast.LENGTH_SHORT).show()
}
return return
} else { } else {
sendFile.inputStream.close() result.file.inputStream.close()
getString(R.string.ask_send_single_file, sendFile.fileName, FileUtils.formatSize(sendFile.fileSize), session.name ?: session.ip) getString(R.string.ask_send_single_file, result.file.fileName, FileUtils.formatSize(result.file.fileSize), session.name ?: session.ip)
} }
} else { } else {
getString(R.string.ask_send_multiple_files, uris!!.size, session.name ?: session.ip) getString(R.string.ask_send_multiple_files, uris!!.size, session.name ?: session.ip)

View File

@ -159,7 +159,7 @@ class AIRAService : Service() {
val files = mutableListOf<SendFile>() val files = mutableListOf<SendFile>()
var useLargeFileTransfer = false var useLargeFileTransfer = false
for (uri in uris) { for (uri in uris) {
FileUtils.openFileFromUri(this, uri)?.let { sendFile -> FileUtils.openFileFromUri(this, uri).file?.let { sendFile ->
files.add(sendFile) files.add(sendFile)
if (sendFile.fileSize > Constants.fileSizeLimit) { if (sendFile.fileSize > Constants.fileSizeLimit) {
useLargeFileTransfer = true useLargeFileTransfer = true

View File

@ -2,6 +2,7 @@ package sushi.hardcore.aira.utils
import android.content.ContentValues import android.content.ContentValues
import android.content.Context import android.content.Context
import android.content.Intent
import android.net.Uri import android.net.Uri
import android.os.Environment import android.os.Environment
import android.provider.MediaStore import android.provider.MediaStore
@ -15,8 +16,8 @@ import java.io.OutputStream
import java.text.DecimalFormat import java.text.DecimalFormat
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
import kotlin.math.pow
import kotlin.math.log10 import kotlin.math.log10
import kotlin.math.pow
object FileUtils { object FileUtils {
private val units = arrayOf("B", "kB", "MB", "GB", "TB") private val units = arrayOf("B", "kB", "MB", "GB", "TB")
@ -29,8 +30,16 @@ object FileUtils {
) + " " + units[digitGroups] ) + " " + units[digitGroups]
} }
fun openFileFromUri(context: Context, uri: Uri): SendFile? { class SendFileResult(val file: SendFile? = null, val errorHandled: Boolean = false)
fun openFileFromUri(context: Context, uri: Uri): SendFileResult {
var sendFile: SendFile? = null var sendFile: SendFile? = null
try {
context.grantUriPermission(context.packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION)
} catch (e: SecurityException) {
Toast.makeText(context, e.localizedMessage, Toast.LENGTH_LONG).show()
return SendFileResult(sendFile, true)
}
val cursor = context.contentResolver.query(uri, null, null, null, null) val cursor = context.contentResolver.query(uri, null, null, null, null)
if (cursor != null) { if (cursor != null) {
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
@ -46,7 +55,7 @@ object FileUtils {
} }
cursor.close() cursor.close()
} }
return sendFile return SendFileResult(sendFile)
} }
class DownloadFile(val fileName: String, val outputStream: OutputStream?) class DownloadFile(val fileName: String, val outputStream: OutputStream?)