Skip to content

Commit a7272c0

Browse files
committed
fix(UrlFile): Fix opening an url file because of network on main thread
1 parent ae3d460 commit a7272c0

File tree

3 files changed

+24
-16
lines changed

3 files changed

+24
-16
lines changed

app/src/main/java/com/infomaniak/drive/ui/publicShare/OnPublicShareItemClickListener.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ import android.content.Intent
2121
import androidx.annotation.StringRes
2222
import androidx.core.content.FileProvider
2323
import androidx.lifecycle.LifecycleOwner
24+
import androidx.lifecycle.lifecycleScope
2425
import com.infomaniak.drive.MatomoDrive.ACTION_DOWNLOAD_NAME
2526
import com.infomaniak.drive.MatomoDrive.trackPublicShareActionEvent
26-
import androidx.lifecycle.lifecycleScope
2727
import com.infomaniak.drive.R
2828
import com.infomaniak.drive.data.models.File
2929
import com.infomaniak.drive.ui.fileList.BaseDownloadProgressDialog.DownloadAction
@@ -99,7 +99,7 @@ interface OnPublicShareItemClickListener : FileInfoActionsView.OnItemClickListen
9999
}
100100
}
101101

102-
private fun executeDownloadAction(downloadAction: DownloadAction, cacheFile: IOFile) = runCatching {
102+
private suspend fun executeDownloadAction(downloadAction: DownloadAction, cacheFile: IOFile) = runCatching {
103103
currentContext.trackPublicShareActionEvent(downloadAction.matomoValue)
104104
val uri = FileProvider.getUriForFile(currentContext, currentContext.getString(R.string.FILE_AUTHORITY), cacheFile)
105105

app/src/main/java/com/infomaniak/drive/ui/publicShare/PublicShareListFragment.kt

+10-8
Original file line numberDiff line numberDiff line change
@@ -264,15 +264,17 @@ class PublicShareListFragment : FileListFragment() {
264264
)
265265
}
266266

267-
private fun executeOpenBookmarkAction(cacheFile: IOFile?) = runCatching {
268-
val uri = FileProvider.getUriForFile(requireContext(), getString(R.string.FILE_AUTHORITY), cacheFile!!)
269-
with(requireContext()) {
270-
trackPublicShareActionEvent(ACTION_OPEN_BOOKMARK_NAME)
271-
openBookmarkIntent(cacheFile.name, uri)
267+
private fun executeOpenBookmarkAction(cacheFile: IOFile?) = lifecycleScope.launch {
268+
runCatching {
269+
val uri = FileProvider.getUriForFile(requireContext(), getString(R.string.FILE_AUTHORITY), cacheFile!!)
270+
with(requireContext()) {
271+
trackPublicShareActionEvent(ACTION_OPEN_BOOKMARK_NAME)
272+
openBookmarkIntent(cacheFile.name, uri)
273+
}
274+
}.onFailure { exception ->
275+
exception.printStackTrace()
276+
showSnackbar(title = R.string.errorGetBookmarkURL, anchor = importButton)
272277
}
273-
}.onFailure { exception ->
274-
exception.printStackTrace()
275-
showSnackbar(title = R.string.errorGetBookmarkURL, anchor = importButton)
276278
}
277279

278280
private fun downloadAllFiles() {

app/src/main/java/com/infomaniak/drive/utils/FilePresenter.kt

+12-6
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ package com.infomaniak.drive.utils
2020
import android.content.Context
2121
import android.net.Uri
2222
import androidx.fragment.app.Fragment
23+
import androidx.lifecycle.lifecycleScope
2324
import androidx.navigation.fragment.findNavController
2425
import com.dd.plist.NSDictionary
2526
import com.dd.plist.NSString
@@ -44,6 +45,9 @@ import com.infomaniak.lib.core.utils.SnackbarUtils.showSnackbar
4445
import com.infomaniak.lib.core.utils.UtilsUi.openUrl
4546
import com.infomaniak.lib.core.utils.capitalizeFirstChar
4647
import com.infomaniak.lib.core.utils.safeNavigate
48+
import kotlinx.coroutines.Dispatchers
49+
import kotlinx.coroutines.launch
50+
import kotlinx.coroutines.withContext
4751
import java.io.BufferedInputStream
4852
import java.io.BufferedReader
4953
import java.io.InputStreamReader
@@ -109,7 +113,7 @@ object FilePresenter {
109113
}
110114
}
111115

112-
fun Fragment.openBookmarkIntent(file: File) {
116+
fun Fragment.openBookmarkIntent(file: File) = lifecycleScope.launch {
113117
runCatching {
114118
val storedFileUri = file.getCloudAndFileUris(requireContext()).second
115119
requireActivity().openBookmarkIntent(file.name, storedFileUri)
@@ -121,11 +125,13 @@ object FilePresenter {
121125
}
122126
}
123127

124-
fun Context.openBookmarkIntent(fileName: String, uri: Uri) {
125-
val url = if (fileName.endsWith(".url")) {
126-
getUrlFromUrlFile(context = this, uri)
127-
} else {
128-
getUrlFromWebloc(context = this, uri)
128+
suspend fun Context.openBookmarkIntent(fileName: String, uri: Uri) {
129+
val url = withContext(Dispatchers.IO) {
130+
if (fileName.endsWith(".url")) {
131+
getUrlFromUrlFile(context = this@openBookmarkIntent, uri)
132+
} else {
133+
getUrlFromWebloc(context = this@openBookmarkIntent, uri)
134+
}
129135
}
130136

131137
if (url.isValidUrl()) openUrl(url) else throw Exception("It's not a valid url")

0 commit comments

Comments
 (0)