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.hiddenitems.HiddenItemsRepository
|
||||||
import de.mm20.launcher2.nextcloud.NextcloudApiHelper
|
import de.mm20.launcher2.nextcloud.NextcloudApiHelper
|
||||||
import de.mm20.launcher2.owncloud.OwncloudClient
|
import de.mm20.launcher2.owncloud.OwncloudClient
|
||||||
|
import de.mm20.launcher2.permissions.PermissionsManager
|
||||||
import de.mm20.launcher2.preferences.LauncherDataStore
|
import de.mm20.launcher2.preferences.LauncherDataStore
|
||||||
import de.mm20.launcher2.search.data.*
|
import de.mm20.launcher2.search.data.*
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
@ -22,7 +23,8 @@ interface FileRepository {
|
|||||||
internal class FileRepositoryImpl(
|
internal class FileRepositoryImpl(
|
||||||
private val context: Context,
|
private val context: Context,
|
||||||
hiddenItemsRepository: HiddenItemsRepository,
|
hiddenItemsRepository: HiddenItemsRepository,
|
||||||
private val dataStore: LauncherDataStore
|
private val dataStore: LauncherDataStore,
|
||||||
|
private val permissionsManager: PermissionsManager,
|
||||||
) : FileRepository {
|
) : FileRepository {
|
||||||
|
|
||||||
private val scope = CoroutineScope(Job() + Dispatchers.Default)
|
private val scope = CoroutineScope(Job() + Dispatchers.Default)
|
||||||
@ -43,7 +45,7 @@ internal class FileRepositoryImpl(
|
|||||||
dataStore.data.map { it.fileSearch }.distinctUntilChanged().collectLatest {
|
dataStore.data.map { it.fileSearch }.distinctUntilChanged().collectLatest {
|
||||||
val provs = mutableListOf<FileProvider>()
|
val provs = mutableListOf<FileProvider>()
|
||||||
if (it.localFiles) {
|
if (it.localFiles) {
|
||||||
provs += LocalFileProvider(context)
|
provs += LocalFileProvider(context, permissionsManager)
|
||||||
}
|
}
|
||||||
if (it.nextcloud) {
|
if (it.nextcloud) {
|
||||||
provs += NextcloudFileProvider(nextcloudClient)
|
provs += NextcloudFileProvider(nextcloudClient)
|
||||||
|
|||||||
@ -5,5 +5,5 @@ import org.koin.androidx.viewmodel.dsl.viewModel
|
|||||||
import org.koin.dsl.module
|
import org.koin.dsl.module
|
||||||
|
|
||||||
val filesModule = 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.content.Context
|
||||||
import android.provider.MediaStore
|
import android.provider.MediaStore
|
||||||
import androidx.core.database.getStringOrNull
|
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.File
|
||||||
import de.mm20.launcher2.search.data.LocalFile
|
import de.mm20.launcher2.search.data.LocalFile
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
internal class LocalFileProvider(
|
internal class LocalFileProvider(
|
||||||
private val context: Context
|
private val context: Context,
|
||||||
|
private val permissionsManager: PermissionsManager
|
||||||
): FileProvider {
|
): FileProvider {
|
||||||
override suspend fun search(query: String): List<File> = withContext(Dispatchers.IO) {
|
override suspend fun search(query: String): List<File> = withContext(Dispatchers.IO) {
|
||||||
|
if (!permissionsManager.checkPermissionOnce(PermissionGroup.ExternalStorage)) {
|
||||||
|
return@withContext emptyList()
|
||||||
|
}
|
||||||
val results = mutableListOf<LocalFile>()
|
val results = mutableListOf<LocalFile>()
|
||||||
val uri = MediaStore.Files.getContentUri("external").buildUpon()
|
val uri = MediaStore.Files.getContentUri("external").buildUpon()
|
||||||
.appendQueryParameter("limit", "10").build()
|
.appendQueryParameter("limit", "10").build()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user