From f38c45656efbbe2073c4e27b765fed218ee22a80 Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Sun, 30 Jan 2022 15:09:05 +0100 Subject: [PATCH] Check external storage permission before attempting to searcg files --- .../main/java/de/mm20/launcher2/files/FilesRepository.kt | 6 ++++-- files/src/main/java/de/mm20/launcher2/files/Module.kt | 2 +- .../mm20/launcher2/files/providers/LocalFileProvider.kt | 8 +++++++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/files/src/main/java/de/mm20/launcher2/files/FilesRepository.kt b/files/src/main/java/de/mm20/launcher2/files/FilesRepository.kt index a5dfcfbc..7c70bdc2 100644 --- a/files/src/main/java/de/mm20/launcher2/files/FilesRepository.kt +++ b/files/src/main/java/de/mm20/launcher2/files/FilesRepository.kt @@ -9,6 +9,7 @@ import de.mm20.launcher2.files.providers.OwncloudFileProvider import de.mm20.launcher2.hiddenitems.HiddenItemsRepository import de.mm20.launcher2.nextcloud.NextcloudApiHelper import de.mm20.launcher2.owncloud.OwncloudClient +import de.mm20.launcher2.permissions.PermissionsManager import de.mm20.launcher2.preferences.LauncherDataStore import de.mm20.launcher2.search.data.* import kotlinx.coroutines.* @@ -22,7 +23,8 @@ interface FileRepository { internal class FileRepositoryImpl( private val context: Context, hiddenItemsRepository: HiddenItemsRepository, - private val dataStore: LauncherDataStore + private val dataStore: LauncherDataStore, + private val permissionsManager: PermissionsManager, ) : FileRepository { private val scope = CoroutineScope(Job() + Dispatchers.Default) @@ -43,7 +45,7 @@ internal class FileRepositoryImpl( dataStore.data.map { it.fileSearch }.distinctUntilChanged().collectLatest { val provs = mutableListOf() if (it.localFiles) { - provs += LocalFileProvider(context) + provs += LocalFileProvider(context, permissionsManager) } if (it.nextcloud) { provs += NextcloudFileProvider(nextcloudClient) diff --git a/files/src/main/java/de/mm20/launcher2/files/Module.kt b/files/src/main/java/de/mm20/launcher2/files/Module.kt index 5e8660ea..aada5204 100644 --- a/files/src/main/java/de/mm20/launcher2/files/Module.kt +++ b/files/src/main/java/de/mm20/launcher2/files/Module.kt @@ -5,5 +5,5 @@ import org.koin.androidx.viewmodel.dsl.viewModel import org.koin.dsl.module val filesModule = module { - single { FileRepositoryImpl(androidContext(), get(), get()) } + single { FileRepositoryImpl(androidContext(), get(), get(), get()) } } \ No newline at end of file diff --git a/files/src/main/java/de/mm20/launcher2/files/providers/LocalFileProvider.kt b/files/src/main/java/de/mm20/launcher2/files/providers/LocalFileProvider.kt index 3ded870d..62aa21aa 100644 --- a/files/src/main/java/de/mm20/launcher2/files/providers/LocalFileProvider.kt +++ b/files/src/main/java/de/mm20/launcher2/files/providers/LocalFileProvider.kt @@ -3,15 +3,21 @@ package de.mm20.launcher2.files.providers import android.content.Context import android.provider.MediaStore import androidx.core.database.getStringOrNull +import de.mm20.launcher2.permissions.PermissionGroup +import de.mm20.launcher2.permissions.PermissionsManager import de.mm20.launcher2.search.data.File import de.mm20.launcher2.search.data.LocalFile import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext internal class LocalFileProvider( - private val context: Context + private val context: Context, + private val permissionsManager: PermissionsManager ): FileProvider { override suspend fun search(query: String): List = withContext(Dispatchers.IO) { + if (!permissionsManager.checkPermissionOnce(PermissionGroup.ExternalStorage)) { + return@withContext emptyList() + } val results = mutableListOf() val uri = MediaStore.Files.getContentUri("external").buildUpon() .appendQueryParameter("limit", "10").build()