Check external storage permission before attempting to searcg files

This commit is contained in:
MM20 2022-01-30 15:09:05 +01:00
parent d1b991fcbd
commit f38c45656e
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
3 changed files with 12 additions and 4 deletions

View File

@ -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<FileProvider>()
if (it.localFiles) {
provs += LocalFileProvider(context)
provs += LocalFileProvider(context, permissionsManager)
}
if (it.nextcloud) {
provs += NextcloudFileProvider(nextcloudClient)

View File

@ -5,5 +5,5 @@ import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.dsl.module
val filesModule = module {
single<FileRepository> { FileRepositoryImpl(androidContext(), get(), get()) }
single<FileRepository> { FileRepositoryImpl(androidContext(), get(), get(), get()) }
}

View File

@ -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<File> = withContext(Dispatchers.IO) {
if (!permissionsManager.checkPermissionOnce(PermissionGroup.ExternalStorage)) {
return@withContext emptyList()
}
val results = mutableListOf<LocalFile>()
val uri = MediaStore.Files.getContentUri("external").buildUpon()
.appendQueryParameter("limit", "10").build()