@@ -47,6 +47,7 @@ import com.pspdfkit.preferences.PSPDFKitPreferences
47
47
import com.pspdfkit.ui.PdfFragment
48
48
import com.pspdfkit.ui.PdfUiFragment
49
49
import com.pspdfkit.ui.PdfUiFragmentBuilder
50
+ import com.pspdfkit.ui.search.SearchResultHighlighter
50
51
import com.pspdfkit.ui.special_mode.controller.AnnotationCreationController
51
52
import com.pspdfkit.ui.special_mode.controller.AnnotationSelectionController
52
53
import com.pspdfkit.ui.special_mode.controller.AnnotationTool
@@ -135,6 +136,8 @@ import org.zotero.android.pdf.data.PdfAnnotationChanges
135
136
import org.zotero.android.pdf.data.PdfReaderArgs
136
137
import org.zotero.android.pdf.data.PdfReaderCurrentThemeEventStream
137
138
import org.zotero.android.pdf.data.PdfReaderThemeDecider
139
+ import org.zotero.android.pdf.reader.pdfsearch.data.PdfReaderSearchArgs
140
+ import org.zotero.android.pdf.reader.pdfsearch.data.PdfReaderSearchResultSelected
138
141
import org.zotero.android.pdf.reader.sidebar.data.Outline
139
142
import org.zotero.android.pdf.reader.sidebar.data.PdfReaderOutlineOptionsWithChildren
140
143
import org.zotero.android.pdf.reader.sidebar.data.PdfReaderSliderOptions
@@ -221,6 +224,8 @@ class PdfReaderViewModel @Inject constructor(
221
224
222
225
private var toolHistory = mutableListOf<AnnotationTool >()
223
226
227
+ private lateinit var searchResultHighlighter: SearchResultHighlighter
228
+
224
229
val screenArgs: PdfReaderArgs by lazy {
225
230
val argsEncoded = stateHandle.get<String >(ARG_PDF_SCREEN ).require()
226
231
navigationParamsMarshaller.decodeObjectFromBase64(argsEncoded)
@@ -330,8 +335,13 @@ class PdfReaderViewModel @Inject constructor(
330
335
)
331
336
}
332
337
}
338
+ }
333
339
334
-
340
+ @Subscribe(threadMode = ThreadMode .MAIN )
341
+ fun onEvent (result : PdfReaderSearchResultSelected ) {
342
+ searchResultHighlighter.setSearchResults(listOf (result.searchResult))
343
+ searchResultHighlighter.setSelectedSearchResult(result.searchResult)
344
+ this .pdfUiFragment.pageIndex = result.searchResult.pageIndex
335
345
}
336
346
337
347
private fun update (pdfSettings : PDFSettings ) {
@@ -386,6 +396,8 @@ class PdfReaderViewModel @Inject constructor(
386
396
this .containerId = containerId
387
397
this .annotationMaxSideSize = annotationMaxSideSize
388
398
399
+ searchResultHighlighter = SearchResultHighlighter (context)
400
+
389
401
if (this ::pdfUiFragment.isInitialized) {
390
402
replaceFragment()
391
403
return
@@ -413,6 +425,7 @@ class PdfReaderViewModel @Inject constructor(
413
425
this @PdfReaderViewModel.pdfUiFragment.lifecycle.addObserver(object : DefaultLifecycleObserver {
414
426
override fun onStart (owner : LifecycleOwner ) {
415
427
this @PdfReaderViewModel.pdfFragment = pdfUiFragment.pdfFragment!!
428
+ this @PdfReaderViewModel.pdfFragment.addDrawableProvider(searchResultHighlighter)
416
429
addDocumentListenerOnInit()
417
430
addOnAnnotationCreationModeChangeListener()
418
431
setOnPreparePopupToolbarListener()
@@ -2226,6 +2239,7 @@ class PdfReaderViewModel @Inject constructor(
2226
2239
this @PdfReaderViewModel.pdfUiFragment.lifecycle.addObserver(object : DefaultLifecycleObserver {
2227
2240
override fun onStart (owner : LifecycleOwner ) {
2228
2241
this @PdfReaderViewModel.pdfFragment = pdfUiFragment.pdfFragment!!
2242
+ this @PdfReaderViewModel.pdfFragment.addDrawableProvider(searchResultHighlighter)
2229
2243
addDocumentListener2()
2230
2244
addOnAnnotationCreationModeChangeListener()
2231
2245
setOnPreparePopupToolbarListener()
@@ -3190,6 +3204,25 @@ class PdfReaderViewModel @Inject constructor(
3190
3204
}
3191
3205
3192
3206
}
3207
+
3208
+ override fun togglePdfSearch () {
3209
+ ScreenArguments .pdfReaderSearchArgs = PdfReaderSearchArgs (
3210
+ pdfDocument = this .document,
3211
+ configuration = pdfFragment.configuration
3212
+ )
3213
+ updateState {
3214
+ copy(showPdfSearch = ! showPdfSearch)
3215
+ }
3216
+
3217
+ }
3218
+
3219
+ override fun hidePdfSearch () {
3220
+ updateState {
3221
+ copy(
3222
+ showPdfSearch = false
3223
+ )
3224
+ }
3225
+ }
3193
3226
}
3194
3227
3195
3228
data class PdfReaderViewState (
@@ -3229,7 +3262,8 @@ data class PdfReaderViewState(
3229
3262
val outlineSearchTerm : String = " " ,
3230
3263
val isOutlineEmpty : Boolean = false ,
3231
3264
val thumbnailRows : ImmutableList <PdfReaderThumbnailRow > = persistentListOf(),
3232
- val selectedThumbnail : PdfReaderThumbnailRow ? = null
3265
+ val selectedThumbnail : PdfReaderThumbnailRow ? = null ,
3266
+ val showPdfSearch : Boolean = false ,
3233
3267
) : ViewState {
3234
3268
3235
3269
fun isAnnotationSelected (annotationKey : String ): Boolean {
0 commit comments