From 23bf69d3f44b07e4bc62ea107f72103239f5d942 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Tue, 4 Oct 2022 12:33:11 -0500 Subject: [PATCH] Only accept content URIs in share activity --- CHANGELOG.md | 4 ++ app/build.gradle.kts | 4 +- .../astrid/activity/ShareLinkActivity.kt | 42 ++++++++----------- .../main/java/org/tasks/files/FileHelper.kt | 21 +++++----- .../android/en-US/changelogs/120701.txt | 1 + 5 files changed, 35 insertions(+), 37 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/120701.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index a249a05ec..ec27fc6ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +### 12.7.1 (2022-10-04) + +* Bug fix + ### 12.7 (2022-06-18) * Android 13 themed icon - Thanks @hanthor! diff --git a/app/build.gradle.kts b/app/build.gradle.kts index fcb062424..ce5cc6fdc 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -56,8 +56,8 @@ android { defaultConfig { testApplicationId = "org.tasks.test" applicationId = "org.tasks" - versionCode = 120700 - versionName = "12.7" + versionCode = 120701 + versionName = "12.7.1" targetSdk = Versions.targetSdk minSdk = Versions.minSdk testInstrumentationRunner = "org.tasks.TestRunner" diff --git a/app/src/main/java/com/todoroo/astrid/activity/ShareLinkActivity.kt b/app/src/main/java/com/todoroo/astrid/activity/ShareLinkActivity.kt index e21ac3fca..9fff75711 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/ShareLinkActivity.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/ShareLinkActivity.kt @@ -1,15 +1,15 @@ package com.todoroo.astrid.activity +import android.content.ContentResolver import android.content.Intent import android.net.Uri import android.os.Bundle import androidx.lifecycle.lifecycleScope -import com.google.common.io.Files import com.todoroo.astrid.data.Task import com.todoroo.astrid.service.TaskCreator +import com.todoroo.astrid.utility.Constants import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch -import org.tasks.Strings.isNullOrEmpty import org.tasks.analytics.Firebase import org.tasks.data.TaskAttachment import org.tasks.files.FileHelper @@ -18,7 +18,6 @@ import org.tasks.intents.TaskIntents import org.tasks.preferences.Preferences import timber.log.Timber import javax.inject.Inject -import kotlin.math.min /** * @author joshuagross @@ -88,29 +87,24 @@ class ShareLinkActivity : InjectingAppCompatActivity() { startActivity(intent) } - private fun copyAttachment(intent: Intent): ArrayList { - val uri = intent.getParcelableExtra(Intent.EXTRA_STREAM) ?: return ArrayList() - var filename = FileHelper.getFilename(this, uri) - if (isNullOrEmpty(filename)) { - filename = intent.getStringExtra(Intent.EXTRA_SUBJECT) - ?.takeIf { it.isNotBlank() } - ?.let { it.substring(0, min(it.length, FileHelper.MAX_FILENAME_LENGTH)) } - ?: uri.lastPathSegment - } - val basename = Files.getNameWithoutExtension(filename!!) - return arrayListOf(FileHelper.copyToUri(this, preferences.attachmentsDirectory!!, uri, basename)) - } + private fun copyAttachment(intent: Intent): ArrayList = + intent.getParcelableExtra(Intent.EXTRA_STREAM) + ?.let { copyAttachments(listOf(it)) } + ?: arrayListOf() + + private fun copyMultipleAttachments(intent: Intent): ArrayList = + intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM) + ?.let { copyAttachments(it) } + ?: arrayListOf() - private fun copyMultipleAttachments(intent: Intent): ArrayList { - val result = ArrayList() - val uris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM) - if (uris != null) { - for (uri in uris) { - result.add(FileHelper.copyToUri(this, preferences.attachmentsDirectory!!, uri)) + private fun copyAttachments(uris: List) = + uris + .filter { + it.scheme == ContentResolver.SCHEME_CONTENT + && it.authority != Constants.FILE_PROVIDER_AUTHORITY } - } - return result - } + .map { FileHelper.copyToUri(this, preferences.attachmentsDirectory!!, it) } + .let { ArrayList(it) } private fun hasAttachments(intent: Intent) = intent.type?.let { type -> ATTACHMENT_TYPES.any { type.startsWith(it) } } ?: false diff --git a/app/src/main/java/org/tasks/files/FileHelper.kt b/app/src/main/java/org/tasks/files/FileHelper.kt index c15c38a45..5e9257d48 100644 --- a/app/src/main/java/org/tasks/files/FileHelper.kt +++ b/app/src/main/java/org/tasks/files/FileHelper.kt @@ -26,7 +26,6 @@ import java.io.IOException import java.util.* object FileHelper { - const val MAX_FILENAME_LENGTH = 40 fun newFilePickerIntent(activity: Activity?, initial: Uri?, vararg mimeTypes: String?): Intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply { putExtra("android.content.extra.SHOW_ADVANCED", true) @@ -178,20 +177,20 @@ object FileHelper { fun copyToUri(context: Context, destination: Uri, input: Uri): Uri { val filename = getFilename(context, input) - return copyToUri(context, destination, input, Files.getNameWithoutExtension(filename!!)) - } - - fun copyToUri(context: Context, destination: Uri, input: Uri, basename: String): Uri = try { - val output = newFile( + val basename = Files.getNameWithoutExtension(filename!!) + try { + val output = newFile( context, destination, getMimeType(context, input), basename, - getExtension(context, input)) - copyStream(context, input, output) - output - } catch (e: IOException) { - throw IllegalStateException(e) + getExtension(context, input) + ) + copyStream(context, input, output) + return output + } catch (e: IOException) { + throw IllegalStateException(e) + } } fun copyStream(context: Context, input: Uri?, output: Uri?) { diff --git a/fastlane/metadata/android/en-US/changelogs/120701.txt b/fastlane/metadata/android/en-US/changelogs/120701.txt new file mode 100644 index 000000000..911511a20 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/120701.txt @@ -0,0 +1 @@ +* Bug fix