@@ -3,20 +3,26 @@ package com.simplemobiletools.filemanager.pro.activities
33import android.content.Context
44import android.content.res.Configuration
55import android.graphics.Color
6+ import android.net.Uri
67import android.os.Bundle
78import android.print.PrintAttributes
89import android.print.PrintManager
910import android.view.WindowManager
1011import android.widget.RelativeLayout
1112import com.github.barteksc.pdfviewer.scroll.DefaultScrollHandle
13+ import com.shockwave.pdfium.PdfPasswordException
1214import com.simplemobiletools.commons.extensions.*
1315import com.simplemobiletools.commons.helpers.REAL_FILE_PATH
1416import com.simplemobiletools.commons.helpers.isPiePlus
1517import com.simplemobiletools.filemanager.pro.R
18+ import com.simplemobiletools.filemanager.pro.dialogs.EnterPasswordDialog
1619import com.simplemobiletools.filemanager.pro.extensions.hideSystemUI
1720import com.simplemobiletools.filemanager.pro.extensions.showSystemUI
1821import com.simplemobiletools.filemanager.pro.helpers.PdfDocumentAdapter
19- import kotlinx.android.synthetic.main.activity_pdf_viewer.*
22+ import kotlinx.android.synthetic.main.activity_pdf_viewer.pdf_viewer
23+ import kotlinx.android.synthetic.main.activity_pdf_viewer.pdf_viewer_appbar
24+ import kotlinx.android.synthetic.main.activity_pdf_viewer.pdf_viewer_toolbar
25+ import kotlinx.android.synthetic.main.activity_pdf_viewer.top_shadow
2026
2127class PDFViewerActivity : SimpleActivity () {
2228 private var realFilePath = " "
@@ -91,15 +97,32 @@ class PDFViewerActivity : SimpleActivity() {
9197 return
9298 }
9399
100+ loadPdfViewer(uri)
101+ }
102+
103+ private fun loadPdfViewer (uri : Uri , filePassword : String? = null) {
94104 val primaryColor = getProperPrimaryColor()
95105 pdf_viewer.setBackgroundColor(getProperBackgroundColor())
96106 pdf_viewer.fromUri(uri)
107+ .password(filePassword)
97108 .scrollHandle(DefaultScrollHandle (this , primaryColor.getContrastColor(), primaryColor))
98109 .spacing(15 )
99110 .onTap { toggleFullScreen() }
100111 .onError {
101- showErrorToast(it.localizedMessage?.toString() ? : getString(R .string.unknown_error_occurred))
102- finish()
112+ if (it is PdfPasswordException ) {
113+ // Already entered a password and it was wrong
114+ if (filePassword != null ) {
115+ it.showToastAndFinish()
116+ } else {
117+ EnterPasswordDialog (
118+ this ,
119+ callback = { password -> loadPdfViewer(uri, password) },
120+ cancelCallback = { it.showToastAndFinish() }
121+ )
122+ }
123+ } else {
124+ it.showToastAndFinish()
125+ }
103126 }
104127 .load()
105128
@@ -151,4 +174,9 @@ class PDFViewerActivity : SimpleActivity() {
151174 window.addFlags(WindowManager .LayoutParams .FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS )
152175 }
153176 }
177+
178+ private fun Throwable.showToastAndFinish () {
179+ showErrorToast(localizedMessage?.toString() ? : getString(R .string.unknown_error_occurred))
180+ finish()
181+ }
154182}
0 commit comments