Skip to content

Commit 1536f0a

Browse files
committed
Camelot: Execute copying in background and add a result message
Change-Id: I9cc9922a2c501ee610bf23039cc3efc411906adb
1 parent 4ba0771 commit 1536f0a

File tree

3 files changed

+40
-9
lines changed

3 files changed

+40
-9
lines changed

app/src/main/java/org/lineageos/camelot/PdfViewerActivity.kt

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import androidx.activity.enableEdgeToEdge
1818
import androidx.activity.result.contract.ActivityResultContracts
1919
import androidx.activity.viewModels
2020
import androidx.annotation.RequiresExtension
21+
import androidx.annotation.StringRes
2122
import androidx.appcompat.app.AppCompatActivity
2223
import androidx.core.util.Consumer
2324
import androidx.core.view.WindowInsetsCompat
@@ -26,6 +27,7 @@ import androidx.lifecycle.Lifecycle
2627
import androidx.lifecycle.lifecycleScope
2728
import androidx.lifecycle.repeatOnLifecycle
2829
import com.google.android.material.appbar.MaterialToolbar
30+
import com.google.android.material.snackbar.Snackbar
2931
import kotlinx.coroutines.coroutineScope
3032
import kotlinx.coroutines.flow.collectLatest
3133
import kotlinx.coroutines.launch
@@ -74,7 +76,16 @@ class PdfViewerActivity : AppCompatActivity(R.layout.activity_main) {
7476
private val documentLauncher = registerForActivityResult(
7577
ActivityResultContracts.CreateDocument(MIME_TYPE_PDF)
7678
) { uri ->
77-
pdfViewModel.copyPdf(pdfUri, uri)
79+
lifecycleScope.launch {
80+
val result = pdfViewModel.copyPdf(pdfUri, uri)
81+
82+
showSnackbar(
83+
when (result) {
84+
true -> R.string.download_successful
85+
false -> R.string.download_error
86+
}
87+
)
88+
}
7889
}
7990

8091
override fun onCreate(savedInstanceState: Bundle?) {
@@ -208,6 +219,17 @@ class PdfViewerActivity : AppCompatActivity(R.layout.activity_main) {
208219
}
209220
}
210221

222+
private fun showSnackbar(@StringRes messageStringResId: Int) {
223+
Snackbar.make(
224+
this,
225+
pdfViewerFragment.requireView(),
226+
getString(messageStringResId),
227+
Snackbar.LENGTH_LONG
228+
)
229+
.setAction(android.R.string.ok) {}
230+
.show()
231+
}
232+
211233
companion object {
212234
private const val MIME_TYPE_PDF = "application/pdf"
213235
}

app/src/main/java/org/lineageos/camelot/viewmodels/PdfViewModel.kt

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ package org.lineageos.camelot.viewmodels
88
import android.app.Application
99
import android.net.Uri
1010
import androidx.lifecycle.AndroidViewModel
11+
import kotlinx.coroutines.Dispatchers
1112
import kotlinx.coroutines.flow.MutableStateFlow
1213
import kotlinx.coroutines.flow.asStateFlow
14+
import kotlinx.coroutines.withContext
1315

1416
class PdfViewModel(application: Application) : AndroidViewModel(application) {
1517
private val _pdfName = MutableStateFlow<String?>(null)
@@ -33,16 +35,19 @@ class PdfViewModel(application: Application) : AndroidViewModel(application) {
3335
_toolbarHeight.value = toolbarHeight
3436
}
3537

36-
fun copyPdf(sourceUri: Uri?, destinationUri: Uri?) {
38+
suspend fun copyPdf(sourceUri: Uri?, destinationUri: Uri?) = withContext(Dispatchers.IO) {
3739
val contentResolver = getApplication<Application>().contentResolver
3840

39-
val source = sourceUri ?: return
40-
val destination = destinationUri ?: return
41+
val source = sourceUri ?: return@withContext false
42+
val destination = destinationUri ?: return@withContext false
4143

42-
contentResolver.openInputStream(source)?.use { input ->
43-
contentResolver.openOutputStream(destination)?.use { output ->
44-
input.copyTo(output)
44+
runCatching {
45+
contentResolver.openInputStream(source)?.use { input ->
46+
contentResolver.openOutputStream(destination)?.use { output ->
47+
input.copyTo(output)
48+
true
49+
}
4550
}
46-
}
51+
}.getOrNull() ?: false
4752
}
4853
}

app/src/main/res/values/strings.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<!--
3-
SPDX-FileCopyrightText: 2024 The LineageOS Project
3+
SPDX-FileCopyrightText: 2024-2025 The LineageOS Project
44
SPDX-License-Identifier: Apache-2.0
55
-->
66
<resources>
@@ -11,4 +11,8 @@
1111
<string name="download">Download</string>
1212
<string name="pdf_document">PDF Document</string>
1313
<string name="print">Print</string>
14+
15+
<!-- Download results -->
16+
<string name="download_successful">Download successful</string>
17+
<string name="download_error">Error while downloading the file</string>
1418
</resources>

0 commit comments

Comments
 (0)