Commit e1c664a9 authored by wanglei's avatar wanglei

...

parent 026eed03
package com.base.pdfreaderallpdfreader.ui.document package com.base.pdfreaderallpdfreader.ui.document
import android.annotation.SuppressLint
import android.app.Activity import android.app.Activity
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
...@@ -27,15 +28,19 @@ import com.base.pdfreaderallpdfreader.ui.main.getPptDocument ...@@ -27,15 +28,19 @@ import com.base.pdfreaderallpdfreader.ui.main.getPptDocument
import com.base.pdfreaderallpdfreader.ui.main.getWordDocument import com.base.pdfreaderallpdfreader.ui.main.getWordDocument
import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity
import com.base.pdfreaderallpdfreader.ui.ppt.PptActivity import com.base.pdfreaderallpdfreader.ui.ppt.PptActivity
import com.base.pdfreaderallpdfreader.ui.view.DialogCallBack
import com.base.pdfreaderallpdfreader.ui.view.DocumentDialog.showDocumentHomeMoreDialog import com.base.pdfreaderallpdfreader.ui.view.DocumentDialog.showDocumentHomeMoreDialog
import com.base.pdfreaderallpdfreader.ui.view.PdfDialog.showPdfHomeMoreDialog
import com.base.pdfreaderallpdfreader.ui.word.WordActivity import com.base.pdfreaderallpdfreader.ui.word.WordActivity
import com.base.pdfreaderallpdfreader.utils.PdfBoxUtils.checkPdfEncryption
import com.base.pdfreaderallpdfreader.utils.SpStringUtils
import com.base.pdfreaderallpdfreader.utils.SpStringUtils.BOOKMARK_KEY
import com.base.pdfreaderallpdfreader.utils.updateMediaStore import com.base.pdfreaderallpdfreader.utils.updateMediaStore
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.io.File import java.io.File
class DocumentFragment() : Fragment(), DialogCallBack {
class DocumentFragment() : Fragment() {
private var type = TYPE_PDF private var type = TYPE_PDF
...@@ -56,7 +61,7 @@ class DocumentFragment() : Fragment() { ...@@ -56,7 +61,7 @@ class DocumentFragment() : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
adapter = DocumentAdapter() adapter = DocumentAdapter(requireActivity())
adapter?.itemClickAction = { item: DocumentBean -> adapter?.itemClickAction = { item: DocumentBean ->
if (item.type == TYPE_PDF) { if (item.type == TYPE_PDF) {
PdfActivity.jumpPdfActivity(requireActivity(), item) PdfActivity.jumpPdfActivity(requireActivity(), item)
...@@ -66,7 +71,7 @@ class DocumentFragment() : Fragment() { ...@@ -66,7 +71,7 @@ class DocumentFragment() : Fragment() {
} }
adapter?.moreAction = { item: DocumentBean -> adapter?.moreAction = { item: DocumentBean ->
if (item.type == TYPE_PDF) { if (item.type == TYPE_PDF) {
requireActivity().showPdfHomeMoreDialog(item, this)
} else { } else {
requireContext().showDocumentHomeMoreDialog(item, this) requireContext().showDocumentHomeMoreDialog(item, this)
} }
...@@ -169,14 +174,15 @@ class DocumentFragment() : Fragment() { ...@@ -169,14 +174,15 @@ class DocumentFragment() : Fragment() {
return list return list
} }
fun deleteDocument(item: DocumentBean) { override fun deleteDocument(item: DocumentBean) {
val flag = File(item.path).delete() val flag = File(item.path).delete()
if (flag) { if (flag) {
adapter?.remove(item) adapter?.remove(item)
} }
} }
fun renameDocumentBean(file: File, newName: String) { override fun renameDocumentBean(file: File, newName: String) {
try { try {
val newFile = File(file.parentFile, newName) val newFile = File(file.parentFile, newName)
val result = file.renameTo(newFile) val result = file.renameTo(newFile)
...@@ -188,6 +194,25 @@ class DocumentFragment() : Fragment() { ...@@ -188,6 +194,25 @@ class DocumentFragment() : Fragment() {
} }
} }
@SuppressLint("NotifyDataSetChanged")
override fun changeBookmark(path: String, isBookmarked: Boolean) {
if (isBookmarked) {
SpStringUtils.addSpString(BOOKMARK_KEY, path)
} else {
SpStringUtils.deleteSpString(BOOKMARK_KEY, path)
}
adapter?.items?.find { it.path == path }?.isBookmarked = isBookmarked
adapter?.notifyDataSetChanged()
}
@SuppressLint("NotifyDataSetChanged")
override fun changePdfLock(item: DocumentBean) {
val pdf = adapter?.items?.find { it.path == item.path }
pdf?.state = requireContext().checkPdfEncryption(item.path)
adapter?.notifyDataSetChanged()
}
companion object { companion object {
var pdfNeedRefresh: Boolean = true var pdfNeedRefresh: Boolean = true
......
package com.base.pdfreaderallpdfreader.ui.main package com.base.pdfreaderallpdfreader.ui.main
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context import android.content.Context
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView.ViewHolder import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.base.pdfreaderallpdfreader.R import com.base.pdfreaderallpdfreader.R
import com.base.pdfreaderallpdfreader.ads.admob.AdmobNativeUtils
import com.base.pdfreaderallpdfreader.bean.DocumentBean import com.base.pdfreaderallpdfreader.bean.DocumentBean
import com.base.pdfreaderallpdfreader.bean.DocumentBean.Companion.TYPE_EXCEL import com.base.pdfreaderallpdfreader.bean.DocumentBean.Companion.TYPE_EXCEL
import com.base.pdfreaderallpdfreader.bean.DocumentBean.Companion.TYPE_PDF import com.base.pdfreaderallpdfreader.bean.DocumentBean.Companion.TYPE_PDF
import com.base.pdfreaderallpdfreader.bean.DocumentBean.Companion.TYPE_PPT import com.base.pdfreaderallpdfreader.bean.DocumentBean.Companion.TYPE_PPT
import com.base.pdfreaderallpdfreader.bean.DocumentBean.Companion.TYPE_WORD import com.base.pdfreaderallpdfreader.bean.DocumentBean.Companion.TYPE_WORD
import com.base.pdfreaderallpdfreader.databinding.ItemAdBinding
import com.base.pdfreaderallpdfreader.databinding.ItemDocumentBinding import com.base.pdfreaderallpdfreader.databinding.ItemDocumentBinding
import com.base.pdfreaderallpdfreader.utils.KotlinExt.toFormatSize import com.base.pdfreaderallpdfreader.utils.KotlinExt.toFormatSize
import com.base.pdfreaderallpdfreader.utils.KotlinExt.toFormatTime5 import com.base.pdfreaderallpdfreader.utils.KotlinExt.toFormatTime5
...@@ -19,7 +22,9 @@ import com.base.pdfreaderallpdfreader.utils.XmlEx.inflate ...@@ -19,7 +22,9 @@ import com.base.pdfreaderallpdfreader.utils.XmlEx.inflate
import com.chad.library.adapter4.BaseQuickAdapter import com.chad.library.adapter4.BaseQuickAdapter
import java.io.File import java.io.File
class DocumentAdapter : BaseQuickAdapter<DocumentBean, DocumentAdapter.DocumentViewHolder>() { class DocumentAdapter(
val activity: Activity
) : BaseQuickAdapter<DocumentBean, DocumentAdapter.DocumentViewHolder>() {
private val TAG = "DocumentAdapter" private val TAG = "DocumentAdapter"
...@@ -31,43 +36,58 @@ class DocumentAdapter : BaseQuickAdapter<DocumentBean, DocumentAdapter.DocumentV ...@@ -31,43 +36,58 @@ class DocumentAdapter : BaseQuickAdapter<DocumentBean, DocumentAdapter.DocumentV
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
override fun onBindViewHolder(holder: DocumentViewHolder, position: Int, item: DocumentBean?) { override fun onBindViewHolder(holder: DocumentViewHolder, position: Int, item: DocumentBean?) {
item ?: return item ?: return
val binding = ItemDocumentBinding.bind(holder.itemView) if (item.isAd) {
val binding = ItemAdBinding.bind(holder.itemView)
AdmobNativeUtils.showNativeAd(activity, binding.flAd, R.layout.layout_admob_document)
} else {
val binding = ItemDocumentBinding.bind(holder.itemView)
when (item.type) { when (item.type) {
TYPE_PDF -> { TYPE_PDF -> {
LogEx.logDebug(TAG, "pdf state = ${item.state}") LogEx.logDebug(TAG, "pdf state = ${item.state}")
if (item.state == 0) { if (item.state == 0) {
binding.ivIcon.setImageResource(R.mipmap.r_pdf) binding.ivIcon.setImageResource(R.mipmap.r_pdf)
} else { } else {
binding.ivIcon.setImageResource(R.mipmap.rv_pdf_lock) binding.ivIcon.setImageResource(R.mipmap.rv_pdf_lock)
}
} }
}
TYPE_WORD -> { TYPE_WORD -> {
binding.ivIcon.setImageResource(R.mipmap.rv_word) binding.ivIcon.setImageResource(R.mipmap.rv_word)
} }
TYPE_EXCEL -> { TYPE_EXCEL -> {
binding.ivIcon.setImageResource(R.mipmap.rv_excel) binding.ivIcon.setImageResource(R.mipmap.rv_excel)
}
TYPE_PPT -> {
binding.ivIcon.setImageResource(R.mipmap.r_ppt)
}
} }
val file = File(item.path)
binding.tvName.text = file.name
binding.tvInfo.text = file.lastModified().toFormatTime5() + " " + file.length().toFormatSize()
TYPE_PPT -> { binding.flMore.setOnClickListener {
binding.ivIcon.setImageResource(R.mipmap.r_ppt) moreAction?.invoke(item)
}
binding.root.setOnClickListener {
itemClickAction?.invoke(item)
} }
} }
val file = File(item.path)
binding.tvName.text = file.name
binding.tvInfo.text = file.lastModified().toFormatTime5() + " " + file.length().toFormatSize()
binding.flMore.setOnClickListener { }
moreAction?.invoke(item)
} override fun getItemViewType(position: Int, list: List<DocumentBean>): Int {
binding.root.setOnClickListener { val item = list[position]
itemClickAction?.invoke(item) return if (item.isAd) 1 else 0
}
} }
override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): DocumentViewHolder { override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): DocumentViewHolder {
return DocumentViewHolder(R.layout.item_document.inflate(parent)) return if (viewType == 0) {
DocumentViewHolder(R.layout.item_document.inflate(parent))
} else {
DocumentViewHolder(R.layout.item_ad.inflate(parent))
}
} }
} }
\ No newline at end of file
...@@ -36,7 +36,7 @@ class BookmarkFragment : Fragment() { ...@@ -36,7 +36,7 @@ class BookmarkFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
adapter = DocumentAdapter() adapter = DocumentAdapter(requireActivity())
binding.rv.adapter = adapter binding.rv.adapter = adapter
} }
......
...@@ -45,7 +45,7 @@ class RecentFragment() : Fragment() { ...@@ -45,7 +45,7 @@ class RecentFragment() : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
adapter = DocumentAdapter() adapter = DocumentAdapter(requireActivity())
binding.rv.adapter = adapter binding.rv.adapter = adapter
} }
......
...@@ -15,15 +15,15 @@ import com.base.pdfreaderallpdfreader.databinding.ItemTabDocumentBinding ...@@ -15,15 +15,15 @@ import com.base.pdfreaderallpdfreader.databinding.ItemTabDocumentBinding
import com.base.pdfreaderallpdfreader.ui.document.DocumentFragment.Companion.jumpOtherDocument import com.base.pdfreaderallpdfreader.ui.document.DocumentFragment.Companion.jumpOtherDocument
import com.base.pdfreaderallpdfreader.ui.main.DocumentAdapter import com.base.pdfreaderallpdfreader.ui.main.DocumentAdapter
import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity
import com.base.pdfreaderallpdfreader.ui.view.DialogCallBack
import com.base.pdfreaderallpdfreader.ui.view.DocumentDialog.showDocumentHomeMoreDialog import com.base.pdfreaderallpdfreader.ui.view.DocumentDialog.showDocumentHomeMoreDialog
import com.base.pdfreaderallpdfreader.ui.view.DocumentHomeMoreCallBack
import com.base.pdfreaderallpdfreader.utils.BarUtils import com.base.pdfreaderallpdfreader.utils.BarUtils
import com.base.pdfreaderallpdfreader.utils.LogEx import com.base.pdfreaderallpdfreader.utils.LogEx
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.io.File import java.io.File
class SearchActivity : BaseActivity<ActivitySearchBinding>(), DocumentHomeMoreCallBack { class SearchActivity : BaseActivity<ActivitySearchBinding>(), DialogCallBack {
private val TAG = "SearchActivity" private val TAG = "SearchActivity"
private lateinit var searchViewModel: SearchViewModel private lateinit var searchViewModel: SearchViewModel
...@@ -39,10 +39,10 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>(), DocumentHomeMoreCa ...@@ -39,10 +39,10 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>(), DocumentHomeMoreCa
binding.root.updatePadding(top = BarUtils.getStatusBarHeight()) binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
searchViewModel = ViewModelProvider(this)[SearchViewModel::class.java] searchViewModel = ViewModelProvider(this)[SearchViewModel::class.java]
adapter = DocumentAdapter() adapter = DocumentAdapter(this)
binding.rv.adapter = adapter binding.rv.adapter = adapter
adapter?.moreAction = { item: DocumentBean -> adapter?.moreAction = { item: DocumentBean ->
showDocumentHomeMoreDialog(item, null, this) showDocumentHomeMoreDialog(item, this)
} }
adapter?.itemClickAction = { item: DocumentBean -> adapter?.itemClickAction = { item: DocumentBean ->
if (item.type == TYPE_PDF) { if (item.type == TYPE_PDF) {
......
...@@ -3,9 +3,8 @@ package com.base.pdfreaderallpdfreader.ui.splash ...@@ -3,9 +3,8 @@ package com.base.pdfreaderallpdfreader.ui.splash
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.splashscreen.SplashScreen
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.core.splashscreen.SplashScreenViewProvider import com.base.pdfreaderallpdfreader.utils.LogEx
import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicBoolean
/** /**
...@@ -14,6 +13,8 @@ import java.util.concurrent.atomic.AtomicBoolean ...@@ -14,6 +13,8 @@ import java.util.concurrent.atomic.AtomicBoolean
*/ */
class SystemStartActivity : AppCompatActivity() { class SystemStartActivity : AppCompatActivity() {
private val TAG = "SystemStartActivity"
// 数据 // 数据
private var mKeepOnAtomicBool = AtomicBoolean(true) private var mKeepOnAtomicBool = AtomicBoolean(true)
...@@ -28,16 +29,21 @@ class SystemStartActivity : AppCompatActivity() { ...@@ -28,16 +29,21 @@ class SystemStartActivity : AppCompatActivity() {
splashScreen.setKeepOnScreenCondition { splashScreen.setKeepOnScreenCondition {
mKeepOnAtomicBool.get() mKeepOnAtomicBool.get()
} }
LogEx.logDebug(TAG, "setKeepOnScreenCondition...")
startActivity(Intent(this@SystemStartActivity, MyStartActivity::class.java))
this@SystemStartActivity.finish()
overridePendingTransition(0, 0)
mKeepOnAtomicBool.compareAndSet(true, false)
// Splash展示完毕的监听方法 // Splash动画展示完毕的监听方法,无动画不用
splashScreen.setOnExitAnimationListener(object : SplashScreen.OnExitAnimationListener { // splashScreen.setOnExitAnimationListener(object : SplashScreen.OnExitAnimationListener {
override fun onSplashScreenExit(splashScreenViewProvider: SplashScreenViewProvider) { // override fun onSplashScreenExit(splashScreenViewProvider: SplashScreenViewProvider) {
startActivity(Intent(this@SystemStartActivity, MyStartActivity::class.java)) // LogEx.logDebug(TAG, "onSplashScreenExit")
this@SystemStartActivity.finish() // startActivity(Intent(this@SystemStartActivity, MyStartActivity::class.java))
overridePendingTransition(0, 0) // this@SystemStartActivity.finish()
mKeepOnAtomicBool.compareAndSet(true, false) // overridePendingTransition(0, 0)
} // mKeepOnAtomicBool.compareAndSet(true, false)
// }
}) // })
} }
} }
\ No newline at end of file
package com.base.pdfreaderallpdfreader.ui.view
import com.base.pdfreaderallpdfreader.bean.DocumentBean
import java.io.File
interface DialogCallBack {
fun changeBookmark(path: String, isBookmarked: Boolean) = Unit
fun deleteDocument(item: DocumentBean) = Unit
fun changePdfLock(item: DocumentBean) = Unit
fun renameDocumentBean(file: File, newName: String) = Unit
}
\ No newline at end of file
...@@ -16,7 +16,6 @@ import com.base.pdfreaderallpdfreader.databinding.DialogDocumentDetailBinding ...@@ -16,7 +16,6 @@ import com.base.pdfreaderallpdfreader.databinding.DialogDocumentDetailBinding
import com.base.pdfreaderallpdfreader.databinding.DialogDocumentHomeMoreBinding import com.base.pdfreaderallpdfreader.databinding.DialogDocumentHomeMoreBinding
import com.base.pdfreaderallpdfreader.databinding.DialogDocumentMoreBinding import com.base.pdfreaderallpdfreader.databinding.DialogDocumentMoreBinding
import com.base.pdfreaderallpdfreader.databinding.DialogPageNumberBinding import com.base.pdfreaderallpdfreader.databinding.DialogPageNumberBinding
import com.base.pdfreaderallpdfreader.ui.document.DocumentFragment
import com.base.pdfreaderallpdfreader.ui.view.DialogView.showDeleteDialog import com.base.pdfreaderallpdfreader.ui.view.DialogView.showDeleteDialog
import com.base.pdfreaderallpdfreader.ui.view.NameDialog.showDocumentRenameDialog import com.base.pdfreaderallpdfreader.ui.view.NameDialog.showDocumentRenameDialog
import com.base.pdfreaderallpdfreader.utils.IntentShareUtils.documentShare import com.base.pdfreaderallpdfreader.utils.IntentShareUtils.documentShare
...@@ -32,25 +31,12 @@ import com.google.android.material.bottomsheet.BottomSheetDialog ...@@ -32,25 +31,12 @@ import com.google.android.material.bottomsheet.BottomSheetDialog
import java.io.File import java.io.File
interface DocumentHomeMoreCallBack {
fun renameDocumentBean(file: File, newName: String) {
}
fun deleteDocument(item: DocumentBean) {
}
}
object DocumentDialog { object DocumentDialog {
@SuppressLint("SetTextI18n", "NotifyDataSetChanged") @SuppressLint("SetTextI18n", "NotifyDataSetChanged")
fun Context.showDocumentHomeMoreDialog( fun Context.showDocumentHomeMoreDialog(
item: DocumentBean, item: DocumentBean,
documentFragment: DocumentFragment? = null, dialogCallBack: DialogCallBack
documentHomeMoreCallBack: DocumentHomeMoreCallBack? = null
): BottomSheetDialog { ): BottomSheetDialog {
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog) val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
val binding = DialogDocumentHomeMoreBinding.inflate(LayoutInflater.from(this)) val binding = DialogDocumentHomeMoreBinding.inflate(LayoutInflater.from(this))
...@@ -88,8 +74,7 @@ object DocumentDialog { ...@@ -88,8 +74,7 @@ object DocumentDialog {
binding.llRename.setOnClickListener { binding.llRename.setOnClickListener {
showDocumentRenameDialog(file.name, okAction = { newName -> showDocumentRenameDialog(file.name, okAction = { newName ->
dialog.dismiss() dialog.dismiss()
documentFragment?.renameDocumentBean(file, newName) dialogCallBack.renameDocumentBean(file, newName)
documentHomeMoreCallBack?.renameDocumentBean(file, newName)
}) })
} }
binding.llDetail.setOnClickListener { binding.llDetail.setOnClickListener {
...@@ -101,8 +86,7 @@ object DocumentDialog { ...@@ -101,8 +86,7 @@ object DocumentDialog {
binding.llDelete.setOnClickListener { binding.llDelete.setOnClickListener {
dialog.dismiss() dialog.dismiss()
showDeleteDialog { showDeleteDialog {
documentFragment?.deleteDocument(item) dialogCallBack.deleteDocument(item)
documentHomeMoreCallBack?.deleteDocument(item)
} }
} }
return dialog return dialog
......
...@@ -2,28 +2,31 @@ package com.base.pdfreaderallpdfreader.ui.view ...@@ -2,28 +2,31 @@ package com.base.pdfreaderallpdfreader.ui.view
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Activity import android.app.Activity
import android.app.Dialog
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.text.method.PasswordTransformationMethod
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.WindowManager import android.view.WindowManager
import androidx.core.content.FileProvider import androidx.core.content.FileProvider
import androidx.core.widget.addTextChangedListener import androidx.core.widget.addTextChangedListener
import com.base.pdfreaderallpdfreader.R import com.base.pdfreaderallpdfreader.R
import com.base.pdfreaderallpdfreader.bean.ConstObject import com.base.pdfreaderallpdfreader.bean.DocumentBean
import com.base.pdfreaderallpdfreader.databinding.DialogPageNumberBinding import com.base.pdfreaderallpdfreader.databinding.DialogPageNumberBinding
import com.base.pdfreaderallpdfreader.databinding.DialogPdfHomeMoreBinding
import com.base.pdfreaderallpdfreader.databinding.DialogPdfMoreBinding import com.base.pdfreaderallpdfreader.databinding.DialogPdfMoreBinding
import com.base.pdfreaderallpdfreader.ui.main.saveBookmarkChange import com.base.pdfreaderallpdfreader.ui.main.saveBookmarkChange
import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity
import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity.Companion.jumpMerge import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity.Companion.jumpMerge
import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity.Companion.jumpSplit import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity.Companion.jumpSplit
import com.base.pdfreaderallpdfreader.ui.view.DialogView.showDeleteDialog
import com.base.pdfreaderallpdfreader.ui.view.DocumentDialog.showDocumentDetail import com.base.pdfreaderallpdfreader.ui.view.DocumentDialog.showDocumentDetail
import com.base.pdfreaderallpdfreader.ui.view.NameDialog.showDocumentRenameDialog
import com.base.pdfreaderallpdfreader.ui.view.PwdDialog.showPdfPwdDialog
import com.base.pdfreaderallpdfreader.utils.IntentShareUtils import com.base.pdfreaderallpdfreader.utils.IntentShareUtils
import com.base.pdfreaderallpdfreader.utils.KotlinExt.toFormatSize
import com.base.pdfreaderallpdfreader.utils.KotlinExt.toFormatTime
import com.base.pdfreaderallpdfreader.utils.LogEx import com.base.pdfreaderallpdfreader.utils.LogEx
import com.base.pdfreaderallpdfreader.utils.NumberRangeFilter import com.base.pdfreaderallpdfreader.utils.NumberRangeFilter
import com.base.pdfreaderallpdfreader.utils.PermissionUtils.checkStorePermission
import com.base.pdfreaderallpdfreader.utils.SpStringUtils import com.base.pdfreaderallpdfreader.utils.SpStringUtils
import com.base.pdfreaderallpdfreader.utils.SpStringUtils.BOOKMARK_KEY import com.base.pdfreaderallpdfreader.utils.SpStringUtils.BOOKMARK_KEY
import com.base.pdfreaderallpdfreader.utils.ToastUtils.toast import com.base.pdfreaderallpdfreader.utils.ToastUtils.toast
...@@ -31,102 +34,104 @@ import com.google.android.material.bottomsheet.BottomSheetBehavior ...@@ -31,102 +34,104 @@ import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialog
import java.io.File import java.io.File
object PdfDialog { object PdfDialog {
// //pdf首页弹窗 //pdf首页弹窗
// @SuppressLint("NotifyDataSetChanged") @SuppressLint("NotifyDataSetChanged")
// fun Context.showPdfHomeMoreDialog( fun Activity.showPdfHomeMoreDialog(
// item: DocumentBean, item: DocumentBean,
// mainActivity: MainActivity, dialogCallBack: DialogCallBack
// documentFragment: DocumentFragment, ): BottomSheetDialog {
// documentPageFragment: DocumentPageFragment, val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
// ): BottomSheetDialog { val binding = DialogPdfHomeMoreBinding.inflate(LayoutInflater.from(this))
// val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog) dialog.setContentView(binding.root)
// val binding = DialogPdfHomeMoreBinding.inflate(LayoutInflater.from(this)) dialog.setCanceledOnTouchOutside(true)
// dialog.setContentView(binding.root)
// dialog.setCanceledOnTouchOutside(false) dialog.show()
//
// dialog.show() val parentView = binding.root.parent as View
// val behavior = BottomSheetBehavior.from(parentView)
// val parentView = binding.root.parent as View //展开
// val behavior = BottomSheetBehavior.from(parentView) behavior.state = BottomSheetBehavior.STATE_EXPANDED
// //展开
// behavior.state = BottomSheetBehavior.STATE_EXPANDED val file = File(item.path)
// binding.tvName.text = file.name
// val file = File(item.path) binding.tvInfo.text = file.lastModified().toFormatTime() + " " + file.length().toFormatSize()
// binding.tvName.text = file.name if (item.isBookmarked) {
// binding.tvInfo.text = file.lastModified().toFormatTime() + " " + file.length().toFormatSize() binding.ivBookmark.setImageResource(R.mipmap.pdf_bookmark_s)
// if (item.isBookmarked) { } else {
// binding.ivBookmark.setImageResource(R.mipmap.h_soucang_s) binding.ivBookmark.setImageResource(R.mipmap.pdf_bookmark_n)
// } else { }
// binding.ivBookmark.setImageResource(R.mipmap.h_soucang_n) binding.ivBookmark.setOnClickListener {
// } item.isBookmarked = !item.isBookmarked
// binding.ivBookmark.setOnClickListener { if (item.isBookmarked) {
// item.isBookmarked = !item.isBookmarked binding.ivBookmark.setImageResource(R.mipmap.pdf_bookmark_s)
// if (item.isBookmarked) { } else {
// binding.ivBookmark.setImageResource(R.mipmap.h_soucang_s) binding.ivBookmark.setImageResource(R.mipmap.pdf_bookmark_n)
// } else { }
// binding.ivBookmark.setImageResource(R.mipmap.h_soucang_n) dialogCallBack.changeBookmark(item.path, item.isBookmarked)
// } }
// mainActivity.mainPresenter.changeBookmark(item.path, item.isBookmarked, documentPageFragment) binding.llRename.setOnClickListener {
// showDocumentRenameDialog(file.name, okAction = { newName ->
// } dialog.dismiss()
// binding.llRename.setOnClickListener { dialogCallBack.renameDocumentBean(file, newName)
// showDocumentRenameDialog(file.name, okAction = { newName -> })
// dialog.dismiss() }
// mainActivity.mainPresenter.renameDocumentBean(file, newName, documentPageFragment) binding.llSplit.setOnClickListener {
// }) dialog.dismiss()
// } if (item.state == 1) {
// binding.llSplit.setOnClickListener { showPdfPwdDialog(
// dialog.dismiss() state = item.state, path = item.path, firstDialog = dialog, isCheckPwd = true, verificationAction = {
// if (item.state == 1) { PdfActivity.jumpSplit(this, item.path)
// showPdfPwdDialog( })
// state = item.state, path = item.path, firstDialog = dialog, isCheckPwd = true, verificationAction = { } else {
// documentPageFragment.splitPdf(item.path, it) PdfActivity.jumpSplit(this, item.path)
// }) }
// } else { }
// documentPageFragment.splitPdf(item.path) binding.llMerge.setOnClickListener {
// } dialog.dismiss()
// } PdfActivity.jumpMerge(this)
// binding.llMerge.setOnClickListener { }
// dialog.dismiss() binding.llDelete.setOnClickListener {
// documentPageFragment.mergePdf(item.path) dialog.dismiss()
// } showDeleteDialog {
// binding.llDelete.setOnClickListener { dialogCallBack.deleteDocument(item)
// dialog.dismiss() }
// showDeleteDialog { }
// mainActivity.mainPresenter.deleteDocument(item.path, documentPageFragment) binding.llDetail.setOnClickListener {
// documentFragment.searchDeleteDocument(item) showDocumentDetail(item.path)
// } }
// } binding.llShare.setOnClickListener {
// binding.llDetail.setOnClickListener { runCatching {
// showDocumentDetail(item.path) item.uri?.let {
// } val intent = IntentShareUtils.sharePdfIntent(it)
// binding.llShare.setOnClickListener { startActivity(intent)
// val intent = IntentShareUtils.sharePdfIntent(item.uri) }
// runCatching { }
// startActivity(intent) }
// } if (item.state == 1) {
// } binding.ivPdf.setImageResource(R.mipmap.rv_pdf_lock)
// if (item.state == 1) { binding.tvLock.text = getString(R.string.unlock_pdf)
// binding.tvLock.text = getString(R.string.unlock_pdf) }
// } if (item.state == 0) {
// if (item.state == 0) { binding.ivPdf.setImageResource(R.mipmap.r_pdf)
// binding.tvLock.text = getString(R.string.lock_pdf) binding.tvLock.text = getString(R.string.lock_pdf)
// } }
// binding.llLock.setOnClickListener { binding.llLock.setOnClickListener {
// showPdfPwdDialog(state = item.state, path = item.path, showPdfPwdDialog(state = item.state, path = item.path,
// firstDialog = dialog, firstDialog = dialog,
// isCheckPwd = false, isCheckPwd = false,
// encryptionAction = { encryptionAction = {
// dialog.dismiss() dialog.dismiss()
// mainActivity.mainPresenter.changePdfLock(item, documentPageFragment) dialogCallBack.changePdfLock(item)
// }) }
// } )
// dialog.setOnDismissListener { }
// } dialog.setOnDismissListener {
// return dialog }
// } return dialog
}
fun Activity.showPdfMoreDialog( fun Activity.showPdfMoreDialog(
pdfActivity: PdfActivity, pdfActivity: PdfActivity,
...@@ -195,116 +200,6 @@ object PdfDialog { ...@@ -195,116 +200,6 @@ object PdfDialog {
} }
// @SuppressLint("SetTextI18n")
// fun Context.showPdfPwdDialog(
// state: Int,
// path: String = "",
// uri: String? = null,
// firstDialog: Dialog? = null,
// isCheckPwd: Boolean = false,
// verificationAction: ((pwd: String) -> Unit)? = null,
// encryptionAction: (() -> Unit)? = null,
// cancelAction: (() -> Unit)? = null,
// ) {
// val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
// val binding = DialogPdfPasswordBinding.inflate(LayoutInflater.from(this))
// dialog.setContentView(binding.root)
// dialog.setCanceledOnTouchOutside(false)
//
// val window = dialog.window
// window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
//
// dialog.show()
//
// val parentView = binding.root.parent as View
// val behavior = BottomSheetBehavior.from(parentView)
// //展开
// behavior.state = BottomSheetBehavior.STATE_EXPANDED
//
// if (!isCheckPwd) {
// if (state == 1) {
// binding.tvTittle.text = getString(R.string.delete_password)
// binding.tvTip.text = getString(R.string.delete_password_the_file_is_not_password_protected)
// }
// if (state == 0) {
// binding.tvTittle.text = getString(R.string.set_password)
// binding.tvTip.text = getString(R.string.set_password_protection_pdf)
//
// }
// } else {
// binding.tvTittle.text = getString(R.string.input_password)
// val file = File(path)
// binding.tvTip.text = getString(R.string.password_protected, file.name)
// binding.tvInputTip.visibility = View.VISIBLE
// }
//
// binding.edit.requestFocus()
// binding.edit.addTextChangedListener {
// binding.tvConfirm.isEnabled = it.toString().isNotEmpty()
// binding.tvErrorTip.visibility = View.GONE
// }
//
// binding.tvCancel.setOnClickListener {
// dialog.dismiss()
// cancelAction?.invoke()
// }
// binding.tvConfirm.setOnClickListener {
//
// val pwd = binding.edit.text.toString()
//
// if (!isCheckPwd) {
//
// //加锁逻辑
// if (state == 0) {
// PdfBoxUtils.setPassword(path, pwd, pwd)
// toast("Success Encryption")
// encryptionAction?.invoke()
// dialog.dismiss()
// firstDialog?.dismiss()
// }
// //解锁逻辑
// if (state == 1) {
// val result = PdfBoxUtils.checkPwd(path, pwd, uri)
// LogEx.logDebug("checkPwd", "result=$result")
// if (result) {
// PdfBoxUtils.clearPassword(path, pwd)
// toast("clear Encryption")
// encryptionAction?.invoke()
// dialog.dismiss()
// firstDialog?.dismiss()
// } else {
// binding.tvErrorTip.visibility = View.VISIBLE
// }
// }
// } else {
// //验证密码逻辑
// val result = PdfBoxUtils.checkPwd(path, pwd, uri)
// if (!result) {
// binding.tvErrorTip.visibility = View.VISIBLE
// return@setOnClickListener
// }
// dialog.dismiss()
// firstDialog?.dismiss()
// verificationAction?.invoke(pwd)
// }
//
// }
// binding.ivEye.setOnClickListener {
//
// if (binding.edit.transformationMethod == null) {
// // 隐藏密码
// binding.edit.transformationMethod = PasswordTransformationMethod()
// binding.ivEye.setImageResource(R.mipmap.weishuru)
// } else {
// // 显示密码
// binding.edit.transformationMethod = null
// binding.ivEye.setImageResource(R.mipmap.yishuru)
// }
// }
//
// }
fun Context.showJumpPageNumberDialog(pageNumber: Int, okAction: ((pageIndex: Int) -> Unit)?) { fun Context.showJumpPageNumberDialog(pageNumber: Int, okAction: ((pageIndex: Int) -> Unit)?) {
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog) val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
val binding = DialogPageNumberBinding.inflate(LayoutInflater.from(this)) val binding = DialogPageNumberBinding.inflate(LayoutInflater.from(this))
......
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_ffffff_tlr15"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl"
android:layout_width="match_parent"
android:layout_height="88dp"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/iv_pdf"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="-50dp"
android:src="@mipmap/r_pdf"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="@id/iv_pdf"
app:layout_constraintEnd_toStartOf="@id/iv_bookmark"
app:layout_constraintStart_toEndOf="@id/iv_pdf"
app:layout_constraintTop_toTopOf="@id/iv_pdf">
<TextView
android:id="@+id/tv_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:includeFontPadding="false"
android:singleLine="true"
android:textColor="@color/black"
android:textSize="17sp"
android:textStyle="bold"
tools:text="PDF_2024091.pdf" />
<TextView
android:id="@+id/tv_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:includeFontPadding="false"
tools:text="2024-09-10 590.23 KB" />
</LinearLayout>
<ImageView
android:id="@+id/iv_bookmark"
android:layout_width="24dp"
android:layout_height="32dp"
android:layout_marginEnd="27dp"
android:src="@mipmap/pdf_bookmark_n"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/cl">
<LinearLayout
android:id="@+id/ll_rename"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="?android:selectableItemBackground"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="13dp"
android:src="@mipmap/pdf_rename"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="13dp"
android:layout_weight="1"
android:ellipsize="end"
android:includeFontPadding="false"
android:singleLine="true"
android:text="@string/rename"
android:textColor="#333333"
android:textSize="16sp"
tools:ignore="HardcodedText" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="20dp"
android:src="@mipmap/jianotou"
tools:ignore="ContentDescription" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_merge"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="?android:selectableItemBackground"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="13dp"
android:src="@mipmap/pdf_merge"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="13dp"
android:layout_weight="1"
android:ellipsize="end"
android:includeFontPadding="false"
android:singleLine="true"
android:text="@string/merge_pdf"
android:textColor="#333333"
android:textSize="16sp"
tools:ignore="HardcodedText" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="20dp"
android:src="@mipmap/jianotou"
tools:ignore="ContentDescription" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_split"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="?android:selectableItemBackground"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="13dp"
android:src="@mipmap/pdf_split"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="13dp"
android:layout_weight="1"
android:ellipsize="end"
android:includeFontPadding="false"
android:singleLine="true"
android:text="@string/split_pdf"
android:textColor="#333333"
android:textSize="16sp"
tools:ignore="HardcodedText" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="20dp"
android:src="@mipmap/jianotou"
tools:ignore="ContentDescription" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_lock"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="?android:selectableItemBackground"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="13dp"
android:src="@mipmap/pdf_set"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/tv_lock"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="13dp"
android:layout_weight="1"
android:ellipsize="end"
android:includeFontPadding="false"
android:singleLine="true"
android:text="@string/lock_pdf"
android:textColor="#333333"
android:textSize="16sp"
tools:ignore="HardcodedText" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="20dp"
android:src="@mipmap/jianotou"
tools:ignore="ContentDescription" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_detail"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="?android:selectableItemBackground"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="13dp"
android:src="@mipmap/pdf_details"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="13dp"
android:layout_weight="1"
android:ellipsize="end"
android:includeFontPadding="false"
android:singleLine="true"
android:text="@string/detail"
android:textColor="#333333"
android:textSize="16sp"
tools:ignore="HardcodedText" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="20dp"
android:src="@mipmap/jianotou"
tools:ignore="ContentDescription" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_share"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="?android:selectableItemBackground"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="13dp"
android:src="@mipmap/pdf_share"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="13dp"
android:layout_weight="1"
android:ellipsize="end"
android:includeFontPadding="false"
android:singleLine="true"
android:text="@string/share"
android:textColor="#333333"
android:textSize="16sp"
tools:ignore="HardcodedText" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="20dp"
android:src="@mipmap/jianotou"
tools:ignore="ContentDescription" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_delete"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginBottom="20dp"
android:background="?android:selectableItemBackground"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="13dp"
android:src="@mipmap/pdf_delete"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="13dp"
android:layout_weight="1"
android:ellipsize="end"
android:includeFontPadding="false"
android:singleLine="true"
android:text="@string/delete"
android:textColor="#333333"
android:textSize="16sp"
tools:ignore="HardcodedText" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="20dp"
android:src="@mipmap/jianotou"
tools:ignore="ContentDescription" />
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -98,6 +98,7 @@ ...@@ -98,6 +98,7 @@
<string name="send">Send</string> <string name="send">Send</string>
<string name="pdf_reader">PDF Reader</string> <string name="pdf_reader">PDF Reader</string>
<string name="lock_pdf">Lock Pdf</string> <string name="lock_pdf">Lock Pdf</string>
<string name="unlock_pdf">Unlock Pdf</string>
<string name="no_bookmark_file">No Bookmark File</string> <string name="no_bookmark_file">No Bookmark File</string>
</resources> </resources>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment