From f9508f84724e30cf5f83d74425ef4f46982ed016 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 6 Jun 2024 09:40:54 +0200 Subject: [PATCH] Rename classes for clarity. --- .../features/share/impl/ShareIntentHandler.kt | 38 +++++++++---------- .../features/share/impl/SharePresenter.kt | 2 +- .../share/impl/FakeShareIntentHandler.kt | 6 +-- .../features/share/impl/SharePresenterTest.kt | 2 +- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/ShareIntentHandler.kt b/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/ShareIntentHandler.kt index aa86f00c4f..6ef7500cb2 100644 --- a/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/ShareIntentHandler.kt +++ b/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/ShareIntentHandler.kt @@ -41,9 +41,14 @@ import timber.log.Timber import javax.inject.Inject interface ShareIntentHandler { + data class UriToShare( + val uri: Uri, + val mimeType: String, + ) + suspend fun handleIncomingShareIntent( intent: Intent, - onFiles: suspend (List) -> Boolean, + onUris: suspend (List) -> Boolean, onPlainText: suspend (String) -> Boolean, ): Boolean } @@ -52,11 +57,6 @@ interface ShareIntentHandler { class DefaultShareIntentHandler @Inject constructor( @ApplicationContext private val context: Context, ) : ShareIntentHandler { - data class FileToShare( - val uri: Uri, - val mimeType: String, - ) - /** * This methods aims to handle incoming share intents. * @@ -64,7 +64,7 @@ class DefaultShareIntentHandler @Inject constructor( */ override suspend fun handleIncomingShareIntent( intent: Intent, - onFiles: suspend (List) -> Boolean, + onUris: suspend (List) -> Boolean, onPlainText: suspend (String) -> Boolean, ): Boolean { val type = intent.resolveType(context) ?: return false @@ -78,7 +78,7 @@ class DefaultShareIntentHandler @Inject constructor( type.isMimeTypeText() || type.isMimeTypeAny() -> { val files = getIncomingFiles(intent, type) - val result = onFiles(files) + val result = onUris(files) revokeUriPermissions(files.map { it.uri }) result } @@ -99,32 +99,32 @@ class DefaultShareIntentHandler @Inject constructor( * Use this function to retrieve files which are shared from another application or internally * by using android.intent.action.SEND or android.intent.action.SEND_MULTIPLE actions. */ - private fun getIncomingFiles(data: Intent, type: String): List { + private fun getIncomingFiles(intent: Intent, type: String): List { val uriList = mutableListOf() - if (data.action == Intent.ACTION_SEND) { - data.getParcelableExtraCompat(Intent.EXTRA_STREAM)?.let { uriList.add(it) } - } else if (data.action == Intent.ACTION_SEND_MULTIPLE) { - val extraUriList: List? = data.getParcelableArrayListExtraCompat(Intent.EXTRA_STREAM) + if (intent.action == Intent.ACTION_SEND) { + intent.getParcelableExtraCompat(Intent.EXTRA_STREAM)?.let { uriList.add(it) } + } else if (intent.action == Intent.ACTION_SEND_MULTIPLE) { + val extraUriList: List? = intent.getParcelableArrayListExtraCompat(Intent.EXTRA_STREAM) extraUriList?.let { uriList.addAll(it) } } - val resInfoList: List = context.packageManager.queryIntentActivitiesCompat(data, PackageManager.MATCH_DEFAULT_ONLY) - uriList.forEach { + val resInfoList: List = context.packageManager.queryIntentActivitiesCompat(intent, PackageManager.MATCH_DEFAULT_ONLY) + uriList.forEach { uri -> resInfoList.forEach resolve@{ resolveInfo -> val packageName: String = resolveInfo.activityInfo.packageName // Replace implicit intent by an explicit to fix crash on some devices like Xiaomi. // see https://juejin.cn/post/7031736325422186510 try { - context.grantUriPermission(packageName, it, Intent.FLAG_GRANT_READ_URI_PERMISSION) + context.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION) } catch (e: Exception) { Timber.w(e, "Unable to grant Uri permission") return@resolve } - data.action = null - data.component = ComponentName(packageName, resolveInfo.activityInfo.name) + intent.action = null + intent.component = ComponentName(packageName, resolveInfo.activityInfo.name) } } return uriList.map { uri -> - FileToShare( + ShareIntentHandler.UriToShare( uri = uri, mimeType = type ) diff --git a/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/SharePresenter.kt b/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/SharePresenter.kt index 00fd203dec..8a5ecbd421 100644 --- a/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/SharePresenter.kt +++ b/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/SharePresenter.kt @@ -74,7 +74,7 @@ class SharePresenter @AssistedInject constructor( suspend { val result = shareIntentHandler.handleIncomingShareIntent( intent, - onFiles = { filesToShare -> + onUris = { filesToShare -> roomIds .map { roomId -> val room = matrixClient.getRoom(roomId) ?: return@map false diff --git a/features/share/impl/src/test/kotlin/io/element/android/features/share/impl/FakeShareIntentHandler.kt b/features/share/impl/src/test/kotlin/io/element/android/features/share/impl/FakeShareIntentHandler.kt index ba0d65a4f7..682bb177cc 100644 --- a/features/share/impl/src/test/kotlin/io/element/android/features/share/impl/FakeShareIntentHandler.kt +++ b/features/share/impl/src/test/kotlin/io/element/android/features/share/impl/FakeShareIntentHandler.kt @@ -21,15 +21,15 @@ import android.content.Intent class FakeShareIntentHandler( private val onIncomingShareIntent: suspend ( Intent, - suspend (List) -> Boolean, + suspend (List) -> Boolean, suspend (String) -> Boolean, ) -> Boolean = { _, _, _ -> false }, ) : ShareIntentHandler { override suspend fun handleIncomingShareIntent( intent: Intent, - onFiles: suspend (List) -> Boolean, + onUris: suspend (List) -> Boolean, onPlainText: suspend (String) -> Boolean, ): Boolean { - return onIncomingShareIntent(intent, onFiles, onPlainText) + return onIncomingShareIntent(intent, onUris, onPlainText) } } diff --git a/features/share/impl/src/test/kotlin/io/element/android/features/share/impl/SharePresenterTest.kt b/features/share/impl/src/test/kotlin/io/element/android/features/share/impl/SharePresenterTest.kt index 1ea4426a2e..42c053bafb 100644 --- a/features/share/impl/src/test/kotlin/io/element/android/features/share/impl/SharePresenterTest.kt +++ b/features/share/impl/src/test/kotlin/io/element/android/features/share/impl/SharePresenterTest.kt @@ -126,7 +126,7 @@ class SharePresenterTest { shareIntentHandler = FakeShareIntentHandler { _, onFile, _ -> onFile( listOf( - DefaultShareIntentHandler.FileToShare( + ShareIntentHandler.UriToShare( uri = Uri.parse("content://image.jpg"), mimeType = MimeTypes.Jpeg, )