Skip to content

Commit 0bac546

Browse files
committed
Fixed blank document state restore issue
1 parent 436abfb commit 0bac546

File tree

5 files changed

+60
-36
lines changed

5 files changed

+60
-36
lines changed

JetPDFVue/src/main/java/com/pratikk/jetpdfvue/state/HorizontalVueReaderState.kt

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,17 @@ import java.io.File
1212

1313
class HorizontalVueReaderState(
1414
resource: VueResourceType
15-
):VueReaderState(resource) {
15+
) : VueReaderState(resource) {
1616
internal var pagerState = VuePagerState(
1717
initialPage = 0,
1818
initialPageOffsetFraction = 0f,
1919
updatedPageCount = { pdfPageCount })
2020

21-
override suspend fun nextPage(){
21+
override suspend fun nextPage() {
2222
pagerState.animateScrollToPage(pagerState.currentPage + 1)
2323
}
24-
override suspend fun prevPage(){
24+
25+
override suspend fun prevPage() {
2526
pagerState.animateScrollToPage(pagerState.currentPage - 1)
2627
}
2728

@@ -43,30 +44,38 @@ class HorizontalVueReaderState(
4344
override fun load(
4445
context: Context,
4546
coroutineScope: CoroutineScope,
46-
containerSize:IntSize,
47-
isPortrait:Boolean,
47+
containerSize: IntSize,
48+
isPortrait: Boolean,
4849
customResource: (suspend CoroutineScope.() -> File)?
4950
) {
5051
this.containerSize = containerSize
5152
this.isPortrait = isPortrait
52-
loadResource(context = context, coroutineScope = coroutineScope,loadCustomResource = customResource)
53+
loadResource(
54+
context = context,
55+
coroutineScope = coroutineScope,
56+
loadCustomResource = customResource
57+
)
5358
}
5459

55-
companion object{
56-
val Saver:Saver<HorizontalVueReaderState,*> = listSaver(
60+
companion object {
61+
val Saver: Saver<HorizontalVueReaderState, *> = listSaver(
5762
save = {
5863
it.importJob?.cancel()
59-
val resource = it.file?.let { file ->
60-
VueResourceType.Local(
61-
file.toUri()
62-
)
63-
} ?: it.vueResource
64+
val resource =
65+
it.file?.let { file ->
66+
if (it.vueResource is VueResourceType.BlankDocument)
67+
VueResourceType.BlankDocument(file.toUri())
68+
else
69+
VueResourceType.Local(
70+
file.toUri()
71+
)
72+
} ?: it.vueResource
6473

6574
buildList {
6675
add(resource)
67-
add(it.importFile?.absolutePath ?: "NO_IMAGE")
76+
add(it.importFile?.absolutePath)
6877
add(it.pagerState.currentPage)
69-
if(it.vueLoadState is VueLoadState.DocumentImporting)
78+
if (it.vueLoadState is VueLoadState.DocumentImporting)
7079
add(it.vueLoadState)
7180
else
7281
add(VueLoadState.DocumentLoading)
@@ -78,12 +87,12 @@ class HorizontalVueReaderState(
7887
restore = {
7988
HorizontalVueReaderState(it[0] as VueResourceType).apply {
8089
//Restore file path
81-
importFile = if(it[1] != "NO_IMAGE") File(it[1] as String) else null
90+
importFile = if (it[1] != null) File(it[1] as String) else null
8291
//Restore Pager State
8392
pagerState = VuePagerState(
8493
initialPage = it[2] as Int,
8594
initialPageOffsetFraction = 0F,
86-
updatedPageCount = {pdfPageCount})
95+
updatedPageCount = { pdfPageCount })
8796
//Restoring in case it was in importing state
8897
vueLoadState = it[3] as VueLoadState
8998
//To resume importing on configuration change
@@ -101,7 +110,7 @@ class HorizontalVueReaderState(
101110
@Composable
102111
fun rememberHorizontalVueReaderState(
103112
resource: VueResourceType,
104-
cache:Int = 0
113+
cache: Int = 0
105114
): HorizontalVueReaderState {
106115
return rememberSaveable(saver = HorizontalVueReaderState.Saver) {
107116
HorizontalVueReaderState(resource).apply { this.cache = cache }

JetPDFVue/src/main/java/com/pratikk/jetpdfvue/state/VerticalVueReaderState.kt

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.pratikk.jetpdfvue.state
22

33
import android.content.Context
4-
import androidx.compose.foundation.lazy.LazyListState
54
import androidx.compose.runtime.Composable
65
import androidx.compose.runtime.saveable.Saver
76
import androidx.compose.runtime.saveable.listSaver
@@ -20,10 +19,11 @@ class VerticalVueReaderState(
2019
initialPageOffsetFraction = 0f,
2120
updatedPageCount = { pdfPageCount })
2221

23-
override suspend fun nextPage(){
22+
override suspend fun nextPage() {
2423
pagerState.animateScrollToPage(pagerState.currentPage + 1)
2524
}
26-
override suspend fun prevPage(){
25+
26+
override suspend fun prevPage() {
2727
pagerState.animateScrollToPage(pagerState.currentPage - 1)
2828
}
2929

@@ -63,15 +63,19 @@ class VerticalVueReaderState(
6363
val Saver: Saver<VerticalVueReaderState, *> = listSaver(
6464
save = {
6565
it.importJob?.cancel()
66-
val resource = it.file?.let { file ->
67-
VueResourceType.Local(
68-
file.toUri()
69-
)
70-
} ?: it.vueResource
66+
val resource =
67+
it.file?.let { file ->
68+
if (it.vueResource is VueResourceType.BlankDocument)
69+
VueResourceType.BlankDocument(file.toUri())
70+
else
71+
VueResourceType.Local(
72+
file.toUri()
73+
)
74+
} ?: it.vueResource
7175

7276
buildList {
7377
add(resource)
74-
add(it.importFile?.absolutePath ?: "NO_IMAGE")
78+
add(it.importFile?.absolutePath)
7579
add(it.pagerState.currentPage)
7680
if (it.vueLoadState is VueLoadState.DocumentImporting)
7781
add(it.vueLoadState)
@@ -85,12 +89,12 @@ class VerticalVueReaderState(
8589
restore = {
8690
VerticalVueReaderState(it[0] as VueResourceType).apply {
8791
//Restore file path
88-
importFile = if(it[1] != "NO_IMAGE") File(it[1] as String) else null
92+
importFile = if (it[1] != null) File(it[1] as String) else null
8993
//Restore list state
9094
pagerState = VuePagerState(
9195
initialPage = it[2] as Int,
9296
initialPageOffsetFraction = 0F,
93-
updatedPageCount = {pdfPageCount})
97+
updatedPageCount = { pdfPageCount })
9498
//Restoring in case it was in importing state
9599
vueLoadState = it[3] as VueLoadState
96100
//To resume importing on configuration change
@@ -108,7 +112,7 @@ class VerticalVueReaderState(
108112
@Composable
109113
fun rememberVerticalVueReaderState(
110114
resource: VueResourceType,
111-
cache:Int = 0
115+
cache: Int = 0
112116
): VerticalVueReaderState {
113117
return rememberSaveable(saver = VerticalVueReaderState.Saver) {
114118
VerticalVueReaderState(resource).apply { this.cache = cache }

JetPDFVue/src/main/java/com/pratikk/jetpdfvue/state/VueReaderState.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,12 @@ abstract class VueReaderState(
103103
loadCustomResource: (suspend CoroutineScope.() -> File)?
104104
) {
105105
if (vueLoadState is VueLoadState.DocumentImporting) {
106-
require(vueResource is VueResourceType.Local)
106+
require(vueResource is VueResourceType.Local || vueResource is VueResourceType.BlankDocument)
107+
if(vueResource is VueResourceType.Local)
107108
mFile = vueResource.uri.toFile()
109+
if(vueResource is VueResourceType.BlankDocument)
110+
mFile = vueResource.uri!!.toFile()
111+
requireNotNull(value = mFile, lazyMessage = {"Could not restore file"})
108112
Log.d(TAG,"Cannot load, importing document")
109113
return
110114
}
@@ -120,7 +124,7 @@ abstract class VueReaderState(
120124
coroutineScope.launch(Dispatchers.IO){
121125
runCatching {
122126
val blankFile = File(context.filesDir, generateFileName())
123-
mFile = blankFile
127+
mFile = vueResource.uri?.toFile() ?: blankFile
124128
}.onFailure {
125129
vueLoadState = VueLoadState.DocumentError(it)
126130
}

JetPDFVue/src/main/java/com/pratikk/jetpdfvue/state/VueResourceType.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,12 @@ import kotlinx.parcelize.Parcelize
77
import java.io.File
88

99
sealed class VueResourceType{
10+
11+
/**
12+
* @param uri If null then internally an empty file would be create otherwise param uri will be used
13+
* */
1014
@Parcelize
11-
data object BlankDocument: VueResourceType(), Parcelable
15+
data class BlankDocument(val uri:Uri? = null): VueResourceType(), Parcelable
1216

1317
@Parcelize
1418
data class Local(val uri: Uri) : VueResourceType(), Parcelable

app/src/main/java/com/pratikk/jetpackpdf/MainActivity.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import com.pratikk.jetpdfvue.state.VueResourceType
1616
import com.pratikk.jetpdfvue.state.rememberHorizontalVueReaderState
1717
import com.pratikk.jetpdfvue.state.rememberVerticalVueReaderState
1818
import com.pratikk.jetpdfvue.util.toFile
19+
import java.io.File
1920

2021
class MainActivity : ComponentActivity() {
2122
override fun onCreate(savedInstanceState: Bundle?) {
@@ -37,9 +38,11 @@ class MainActivity : ComponentActivity() {
3738
@Composable
3839
fun HorizontalPreview(){
3940
val context = LocalContext.current
41+
val blankReader = rememberHorizontalVueReaderState(
42+
resource = VueResourceType.BlankDocument())
43+
4044
val assetReader = rememberHorizontalVueReaderState(
41-
resource = VueResourceType.Asset(R.raw.lorem_ipsum)
42-
)
45+
resource = VueResourceType.Asset(R.raw.lorem_ipsum))
4346
val localBase64Reader = rememberHorizontalVueReaderState(
4447
resource = VueResourceType.Base64(
4548
context.assets.open("lorem_ipsum_base64.txt").let { inputStream ->
@@ -55,7 +58,7 @@ fun HorizontalPreview(){
5558
val remoteImageLink = listOf("https://images.pexels.com/photos/943907/pexels-photo-943907.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=2","https://images.freeimages.com/images/large-previews/7f3/path-1441068.jpg")
5659
val remoteImage =
5760
rememberHorizontalVueReaderState(resource = VueResourceType.Remote(remoteImageLink[0]))
58-
HorizontalPdfViewer(horizontalVueReaderState = assetReader)
61+
HorizontalPdfViewer(horizontalVueReaderState = blankReader)
5962
}
6063
@Composable
6164
fun VerticalPreview(){

0 commit comments

Comments
 (0)