From 28ee1f8b02bc2a0f69214a00242a84240635c18f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 27 Mar 2025 12:58:44 +0100 Subject: [PATCH] Check if Manifest.permission.REQUEST_INSTALL_PACKAGES is in the manifest before invoking `canRequestPackageInstalls`. (#4490) --- .../impl/local/AndroidLocalMediaActions.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/AndroidLocalMediaActions.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/AndroidLocalMediaActions.kt index 8750647d97..56af3ca2c8 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/AndroidLocalMediaActions.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/AndroidLocalMediaActions.kt @@ -7,6 +7,7 @@ package io.element.android.libraries.mediaviewer.impl.local +import android.Manifest import android.app.Activity import android.content.ContentResolver import android.content.ContentValues @@ -26,6 +27,7 @@ import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.platform.LocalContext import androidx.core.content.FileProvider +import androidx.core.content.PermissionChecker import androidx.core.net.toFile import com.squareup.anvil.annotations.ContributesBinding import io.element.android.libraries.androidutils.system.startInstallFromSourceIntent @@ -119,7 +121,14 @@ class AndroidLocalMediaActions @Inject constructor( when (localMedia.info.mimeType) { MimeTypes.Apk -> { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - if (activityContext?.packageManager?.canRequestPackageInstalls() == false) { + if (PermissionChecker.checkPermission( + context, + Manifest.permission.REQUEST_INSTALL_PACKAGES, + -1, + -1, + context.packageName + ) == PermissionChecker.PERMISSION_GRANTED && + activityContext?.packageManager?.canRequestPackageInstalls() == false) { pendingMedia = localMedia activityContext?.startInstallFromSourceIntent(apkInstallLauncher!!).let { } } else {