@@ -3,24 +3,31 @@ 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
14+ import com.simplemobiletools.commons.dialogs.EnterPasswordDialog
1215import com.simplemobiletools.commons.extensions.*
1316import com.simplemobiletools.commons.helpers.REAL_FILE_PATH
1417import com.simplemobiletools.commons.helpers.isPiePlus
1518import com.simplemobiletools.filemanager.pro.R
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 = " "
2329 private var isFullScreen = false
30+ private var passwordDialog: EnterPasswordDialog ? = null
2431
2532 override fun onCreate (savedInstanceState : Bundle ? ) {
2633 showTransparentTop = true
@@ -91,15 +98,41 @@ class PDFViewerActivity : SimpleActivity() {
9198 return
9299 }
93100
101+ loadPdfViewer(uri)
102+ }
103+
104+ private fun loadPdfViewer (uri : Uri , filePassword : String? = null) {
94105 val primaryColor = getProperPrimaryColor()
95106 pdf_viewer.setBackgroundColor(getProperBackgroundColor())
96107 pdf_viewer.fromUri(uri)
108+ .password(filePassword)
97109 .scrollHandle(DefaultScrollHandle (this , primaryColor.getContrastColor(), primaryColor))
98110 .spacing(15 )
99111 .onTap { toggleFullScreen() }
100112 .onError {
101- showErrorToast(it.localizedMessage?.toString() ? : getString(R .string.unknown_error_occurred))
102- finish()
113+ if (it is PdfPasswordException ) {
114+ // already entered a password and it was wrong
115+ if (filePassword != null ) {
116+ toast(getString(R .string.invalid_password))
117+ passwordDialog?.clearPassword()
118+ } else {
119+ passwordDialog = EnterPasswordDialog (
120+ this ,
121+ callback = { password ->
122+ loadPdfViewer(uri, password)
123+ },
124+ cancelCallback = {
125+ finish()
126+ }
127+ )
128+ }
129+ } else {
130+ showErrorToast(it.localizedMessage?.toString() ? : getString(R .string.unknown_error_occurred))
131+ finish()
132+ }
133+ }
134+ .onLoad {
135+ passwordDialog?.dismiss(notify = false )
103136 }
104137 .load()
105138
0 commit comments