Check external storage permission before attempting to searcg files
This commit is contained in:
parent
d1b991fcbd
commit
f38c45656e
@ -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)
|
||||
|
||||
@ -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()) }
|
||||
}
|
||||
@ -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()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user