修复bug:could not find Fragment constructor

This commit is contained in:
ocean 2025-12-03 18:21:16 +08:00
parent edc573d3c4
commit bc5453e85d
23 changed files with 519 additions and 260 deletions

View File

@ -52,7 +52,7 @@ android {
)
}
debug {
isMinifyEnabled = true
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
)

View File

@ -1,10 +1,13 @@
package com.all.pdfreader.pdf.reader.room.entity
import android.os.Parcelable
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.Index
import androidx.room.PrimaryKey
import kotlinx.parcelize.Parcelize
@Parcelize
@Entity(
tableName = "bookmarks",
foreignKeys = [ForeignKey(
@ -26,4 +29,4 @@ data class BookmarkEntity(
val positionX: Float = 0f, // 页面内X位置
val positionY: Float = 0f, // 页面内Y位置
val createTime: Long = System.currentTimeMillis()
)
): Parcelable

View File

@ -272,12 +272,14 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback
title = getString(R.string.delete_all_file_title)
desc = getString(R.string.delete_all_file_desc)
}
PromptDialogFragment(
title, desc, onOkClick = {
val promptDialogFragment = PromptDialogFragment.newInstance(
title = title, desc = desc
)
promptDialogFragment.onOkClick ={
viewModel.deleteFiles(filesToDelete)
exitAllMultiSelect()
}, onCancelClick = {
}).show(supportFragmentManager, "deleteFiles")
}
promptDialogFragment.show(supportFragmentManager, "deleteFiles")
}
}
binding.multiSelectMergeBtn.setOnSingleClickListener {
@ -297,14 +299,17 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback
val selectedItems = recentlyFragment.adapter.getSelectedItems()
if (selectedItems.isNotEmpty()) {
val filePaths = selectedItems.map { it.filePath }
PromptDialogFragment(
getString(R.string.remove_dialog_title),
getString(R.string.remove_dialog_desc),
getString(R.string.remove),
onOkClick = {
val promptDialogFragment = PromptDialogFragment.newInstance(
title = getString(R.string.remove_dialog_title),
desc = getString(R.string.remove_dialog_desc),
okBtnText = getString(R.string.remove)
)
promptDialogFragment.onOkClick = {
viewModel.removeRecentAll(filePaths)
exitAllMultiSelect()
}).show(supportFragmentManager, "removeRecent")
}
promptDialogFragment.show(supportFragmentManager, "removeRecent")
}
}
binding.multiSelectUnFavoriteBtn.setOnSingleClickListener {
@ -564,10 +569,12 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback
private fun setupDoubleBackExit() {
onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
ExitDialogFragment(onExitClick = {
val exitDialogFragment = ExitDialogFragment()
exitDialogFragment.onExitClick = {
isEnabled = false // 解除拦截
onBackPressedDispatcher.onBackPressed() // 调用系统默认返回逻辑
}).show(supportFragmentManager, TAG)
}
exitDialogFragment.show(supportFragmentManager, TAG)
}
})
}

View File

@ -89,17 +89,19 @@ class MergePdfActivity : BaseActivity() {
*/
private suspend fun showPasswordDialogSuspend(file: File): String? =
suspendCancellableCoroutine { cont ->
PdfPasswordProtectionDialogFragment(
file, onOkClick = { password ->
if (cont.isActive) {
cont.resumeWith(Result.success(password))
}
}, onCancelClick = {
val pdfPasswordProtectionDialogFragment =
PdfPasswordProtectionDialogFragment.newInstance(file.absolutePath, true)
pdfPasswordProtectionDialogFragment.onCancelClick = {
if (cont.isActive) {
cont.resumeWith(Result.success(null))
}
}, isPrompt = true
).show(supportFragmentManager, TAG)
}
pdfPasswordProtectionDialogFragment.onOkClick = { password ->
if (cont.isActive) {
cont.resumeWith(Result.success(password))
}
}
pdfPasswordProtectionDialogFragment.show(supportFragmentManager, TAG)
}
private fun initView() {
@ -171,16 +173,17 @@ class MergePdfActivity : BaseActivity() {
override fun shouldInterceptBackPress(): Boolean = true
override fun onInterceptBackPressed() {
PromptDialogFragment(
getString(R.string.exit_merge),
getString(R.string.confirm_discard_changes),
getString(R.string.discard),
onOkClick = {
val promptDialogFragment = PromptDialogFragment.newInstance(
title = getString(R.string.exit_merge),
desc = getString(R.string.confirm_discard_changes),
okBtnText = getString(R.string.discard)
)
promptDialogFragment.onOkClick = {
backPressedCallback?.isEnabled = false
onBackPressedDispatcher.onBackPressed()
AnalyticsUtils.logEvent(AnalyticsUtils.Event.MERGE_BACK_CONFIRM)
}, onCancelClick = {
}).show(supportFragmentManager, getString(R.string.exit_merge))
}
promptDialogFragment.show(supportFragmentManager, getString(R.string.exit_merge))
}
companion object {

View File

@ -93,38 +93,51 @@ class PdfPickerActivity : BaseActivity() {
}
PdfPickerSource.LOCK -> {
PdfSetPasswordDialog(onOkClick = { password ->
val pdfSetPasswordDialog = PdfSetPasswordDialog.newInstance()
pdfSetPasswordDialog.onOkClick = { password ->
val intent = PdfResultActivity.createIntentLock(
this, pdf.filePath, password,
PdfPickerSource.LOCK
)
startActivity(intent)
finish()
}).show(supportFragmentManager, "PdfSetPasswordDialog")
}
pdfSetPasswordDialog.show(supportFragmentManager, "PdfSetPasswordDialog")
}
PdfPickerSource.UNLOCK -> {
PdfRemovePasswordDialog(pdf.filePath, onOkClick = { password ->
val pdfRemovePasswordDialog =
PdfRemovePasswordDialog.newInstance(pdf.filePath)
pdfRemovePasswordDialog.onOkClick = { password ->
val intent = PdfResultActivity.createIntentLock(
this, pdf.filePath, password,
PdfPickerSource.UNLOCK
)
startActivity(intent)
finish()
}).show(supportFragmentManager, "PdfRemovePasswordDialog")
}
pdfRemovePasswordDialog.show(
supportFragmentManager,
"PdfRemovePasswordDialog"
)
}
PdfPickerSource.IMAGES_TO_PDF -> {}
PdfPickerSource.TO_LONG_IMAGE -> {
val intent = PdfToImageActivity.createIntent(this, pdf.filePath,
PdfPickerSource.TO_LONG_IMAGE)
val intent = PdfToImageActivity.createIntent(
this, pdf.filePath,
PdfPickerSource.TO_LONG_IMAGE
)
startActivity(intent)
finish()
}
PdfPickerSource.NONE -> {}
PdfPickerSource.PDF_TO_IMAGES -> {
val intent = PdfToImageActivity.createIntent(this, pdf.filePath,
PdfPickerSource.PDF_TO_IMAGES)
val intent = PdfToImageActivity.createIntent(
this, pdf.filePath,
PdfPickerSource.PDF_TO_IMAGES
)
startActivity(intent)
finish()
}
@ -133,7 +146,10 @@ class PdfPickerActivity : BaseActivity() {
val result = printPdfFile(this, Uri.fromFile(File(pdf.filePath)))
when (result) {
PrintResult.DeviceNotSupported -> {
ToastUtils.show(this,getString(R.string.device_does_not_support_printing))
ToastUtils.show(
this,
getString(R.string.device_does_not_support_printing)
)
}
is PrintResult.Error -> {
@ -141,11 +157,17 @@ class PdfPickerActivity : BaseActivity() {
}
PrintResult.MalformedPdf -> {
ToastUtils.show(this,getString(R.string.cannot_print_malformed_pdf))
ToastUtils.show(
this,
getString(R.string.cannot_print_malformed_pdf)
)
}
PrintResult.PasswordRequired -> {
ToastUtils.show(this,getString(R.string.pdf_cant_print_password_protected))
ToastUtils.show(
this,
getString(R.string.pdf_cant_print_password_protected)
)
}
PrintResult.Success -> {

View File

@ -544,14 +544,14 @@ class PdfResultActivity : BaseActivity() {
override fun shouldInterceptBackPress(): Boolean = isProcessing
override fun onInterceptBackPressed() {
exitDialog = PromptDialogFragment(
exitDialog = PromptDialogFragment.newInstance(
getString(R.string.tip),
getString(R.string.confirm_discard_changes),
getString(R.string.discard),
onOkClick = {
getString(R.string.discard))
exitDialog?. onOkClick = {
backPressedCallback?.isEnabled = false
onBackPressedDispatcher.onBackPressed()
})
}
exitDialog?.show(supportFragmentManager, getString(R.string.exit_split))
}

View File

@ -134,11 +134,15 @@ class PdfToImageActivity : BaseActivity() {
isPdfEncrypted(file)
}
if (isEncrypted) {
PdfPasswordProtectionDialogFragment(file, onOkClick = { password ->
val pdfPasswordProtectionDialogFragment =
PdfPasswordProtectionDialogFragment.newInstance(file.absolutePath)
pdfPasswordProtectionDialogFragment.onOkClick = { password ->
initSplitDataWithPassword(file, password)
}, onCancelClick = {
}
pdfPasswordProtectionDialogFragment.onCancelClick = {
finish()
}).show(supportFragmentManager, TAG)
}
pdfPasswordProtectionDialogFragment.show(supportFragmentManager, TAG)
} else {
initSplitDataWithPassword(file)
}

View File

@ -11,18 +11,15 @@ import android.view.inputmethod.EditorInfo
import androidx.activity.OnBackPressedCallback
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import com.all.pdfreader.pdf.reader.PRApp
import com.all.pdfreader.pdf.reader.R
import com.all.pdfreader.pdf.reader.ad.AdsInsUtil
import com.all.pdfreader.pdf.reader.ad.BannerManager
import com.all.pdfreader.pdf.reader.ad.ShowListener
import com.all.pdfreader.pdf.reader.databinding.ActivityPdfViewBinding
import com.all.pdfreader.pdf.reader.model.FileActionEvent
import com.all.pdfreader.pdf.reader.room.entity.PdfDocumentEntity
import com.all.pdfreader.pdf.reader.ui.dialog.BookmarksDialogFragment
import com.all.pdfreader.pdf.reader.ui.dialog.ListMoreDialogFragment
import com.all.pdfreader.pdf.reader.ui.dialog.PdfPasswordProtectionDialogFragment
import com.all.pdfreader.pdf.reader.ui.dialog.PermissionDialogFragment
import com.all.pdfreader.pdf.reader.ui.dialog.ViewModelDialogFragment
import com.all.pdfreader.pdf.reader.ui.view.CustomScrollHandle
import com.all.pdfreader.pdf.reader.util.AnalyticsUtils
@ -32,7 +29,6 @@ import com.all.pdfreader.pdf.reader.util.AppUtils.showKeyboard
import com.all.pdfreader.pdf.reader.util.FileUtils
import com.all.pdfreader.pdf.reader.util.PDFHighlighter
import com.all.pdfreader.pdf.reader.util.PDFSearchManager
import com.all.pdfreader.pdf.reader.util.StoragePermissionHelper
import com.all.pdfreader.pdf.reader.viewmodel.PdfViewModel
import com.all.pdfreader.pdf.reader.viewmodel.observeEvent
import com.github.barteksc.pdfviewer.listener.OnErrorListener
@ -223,18 +219,21 @@ class PdfViewActivity : BaseActivity(), OnLoadCompleteListener, OnPageChangeList
ViewModelDialogFragment().show(supportFragmentManager, "ViewModelDialogFragment")
}
binding.bookmarksBtn.setOnClickListener {
BookmarksDialogFragment(pdfDocument, onJumpPage = {
val bookmarksDialogFragment = BookmarksDialogFragment.newInstance(pdfDocument)
bookmarksDialogFragment.onJumpPage = {
binding.pdfview.jumpTo(it)
binding.pdfview.postDelayed({
binding.pdfview.resetZoomWithAnimation()
}, 200)
}).show(supportFragmentManager, "BookmarksDialogFragment")
}
bookmarksDialogFragment.show(supportFragmentManager, "BookmarksDialogFragment")
}
binding.shareBtn.setOnClickListener {
AppUtils.shareFile(this, File(pdfDocument.filePath))
}
binding.moreBtn.setOnClickListener {
ListMoreDialogFragment(pdfDocument.filePath).show(supportFragmentManager, FRAG_TAG)
ListMoreDialogFragment.newInstance(pdfDocument.filePath)
.show(supportFragmentManager, FRAG_TAG)
}
binding.searchTextBtn.setOnClickListener {
showSearchTextView = true
@ -366,11 +365,15 @@ class PdfViewActivity : BaseActivity(), OnLoadCompleteListener, OnPageChangeList
}
private fun showPasswordDialog(file: File) {
PdfPasswordProtectionDialogFragment(file, onOkClick = { password ->
val pdfPasswordProtectionDialogFragment =
PdfPasswordProtectionDialogFragment.newInstance(file.absolutePath)
pdfPasswordProtectionDialogFragment.onOkClick = { password ->
tryLoadPdfWithPassword(file, password)
}, onCancelClick = {
}
pdfPasswordProtectionDialogFragment.onCancelClick = {
finish()
}).show(supportFragmentManager, TAG)
}
pdfPasswordProtectionDialogFragment.show(supportFragmentManager, TAG)
}
private fun tryLoadPdfWithPassword(file: File, password: String) {

View File

@ -134,15 +134,17 @@ class SearchActivity : BaseActivity() {
}
binding.clearHistory.setOnClickListener {
PromptDialogFragment(
getString(R.string.tip),
getString(R.string.clear_history_desc),
getString(R.string.clear),
onOkClick = {
val promptDialogFragment = PromptDialogFragment.newInstance(
title = getString(R.string.tip),
desc = getString(R.string.clear_history_desc),
okBtnText = getString(R.string.clear)
)
promptDialogFragment.onOkClick = {
searchHistory.clear()
saveHistoryList() // 保存空列表
showHistory()
}).show(supportFragmentManager, "clearHistory")
}
promptDialogFragment.show(supportFragmentManager, "clearHistory")
}
}
@ -173,25 +175,29 @@ class SearchActivity : BaseActivity() {
}
PdfPickerSource.LOCK -> {
PdfSetPasswordDialog(onOkClick = { password ->
val pdfSetPasswordDialog = PdfSetPasswordDialog.newInstance()
pdfSetPasswordDialog.onOkClick = { password ->
val intent = PdfResultActivity.createIntentLock(
this, pdf.filePath, password, PdfPickerSource.LOCK
)
startActivity(intent)
setResult(RESULT_OK)//通知选择界面关闭
finish()
}).show(supportFragmentManager, "PdfSetPasswordDialog")
}
pdfSetPasswordDialog.show(supportFragmentManager, "PdfSetPasswordDialog")
}
PdfPickerSource.UNLOCK -> {
PdfRemovePasswordDialog(pdf.filePath, onOkClick = { password ->
val pdfRemovePasswordDialog = PdfRemovePasswordDialog.newInstance(pdf.filePath)
pdfRemovePasswordDialog.onOkClick = { password ->
val intent = PdfResultActivity.createIntentLock(
this, pdf.filePath, password, PdfPickerSource.UNLOCK
)
startActivity(intent)
setResult(RESULT_OK)
finish()
}).show(supportFragmentManager, "PdfRemovePasswordDialog")
}
pdfRemovePasswordDialog.show(supportFragmentManager, "PdfRemovePasswordDialog")
}
PdfPickerSource.IMAGES_TO_PDF -> {}
@ -233,7 +239,7 @@ class SearchActivity : BaseActivity() {
}
}
}, onMoreClick = { pdf ->
ListMoreDialogFragment(pdf.filePath).show(supportFragmentManager, FRAG_TAG)
ListMoreDialogFragment.newInstance(pdf.filePath).show(supportFragmentManager, FRAG_TAG)
})
binding.recyclerView.layoutManager = LinearLayoutManager(this)

View File

@ -4,7 +4,6 @@ import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.activity.OnBackPressedCallback
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
@ -26,7 +25,6 @@ import com.all.pdfreader.pdf.reader.util.FileUtils.isPdfEncrypted
import com.all.pdfreader.pdf.reader.util.FileUtils.toUnderscoreDateTime
import com.all.pdfreader.pdf.reader.util.PdfUtils
import com.all.pdfreader.pdf.reader.util.ToastUtils
import com.gyf.immersionbar.ImmersionBar
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@ -104,11 +102,16 @@ class SplitPdfActivity : BaseActivity() {
binding.splitRv.adapter = adapter
selectedPdfAdapter = SplitSelectedPdfAdapter(selectedList, onEditClick = { item, pos ->
RenameDialogFragment(
RenameType.NAME, null, item.fileName, onOkClickString = { string ->
val renameDialogFragment = RenameDialogFragment.newInstance(
type = RenameType.NAME,
bookmark = null,
name = item.fileName
)
renameDialogFragment.onOkClickString = { string ->
selectedList[pos].fileName = string
selectedPdfAdapter.updateItem(pos)
}).show(supportFragmentManager, "SplitPdfActivity")
}
renameDialogFragment.show(supportFragmentManager, "SplitPdfActivity")
}, onDeleteClick = { item, pos ->
selectedList.remove(item)
selectedPdfAdapter.removeItem(pos)
@ -166,11 +169,15 @@ class SplitPdfActivity : BaseActivity() {
isPdfEncrypted(file)
}
if (isEncrypted) {
PdfPasswordProtectionDialogFragment(file, onOkClick = { password ->
val pdfPasswordProtectionDialogFragment =
PdfPasswordProtectionDialogFragment.newInstance(file.absolutePath)
pdfPasswordProtectionDialogFragment.onOkClick = { password ->
initSplitDataWithPassword(file, password)
}, onCancelClick = {
}
pdfPasswordProtectionDialogFragment.onCancelClick = {
finish()
}).show(supportFragmentManager, TAG)
}
pdfPasswordProtectionDialogFragment.show(supportFragmentManager, TAG)
} else {
initSplitDataWithPassword(file)
}
@ -299,16 +306,18 @@ class SplitPdfActivity : BaseActivity() {
when (currentViewState) {
ViewState.SPLIT_SELECTED -> {
// 已选页面列表,提示是否退出
PromptDialogFragment(
getString(R.string.exit_split),
getString(R.string.confirm_discard_changes),
getString(R.string.discard),
onOkClick = {
val promptDialogFragment = PromptDialogFragment.newInstance(
title = getString(R.string.exit_split),
desc = getString(R.string.confirm_discard_changes),
okBtnText = getString(R.string.discard)
)
promptDialogFragment.onOkClick = {
backPressedCallback?.isEnabled = false
onBackPressedDispatcher.onBackPressed()
AnalyticsUtils.logEvent(AnalyticsUtils.Event.SPLIT_LEAVE_CONFIRM)
}).show(supportFragmentManager, getString(R.string.exit_split))
}
promptDialogFragment.show(supportFragmentManager, getString(R.string.exit_split))
}
ViewState.SPLIT_LIST -> {

View File

@ -4,6 +4,7 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.all.pdfreader.pdf.reader.R
@ -17,9 +18,29 @@ import com.all.pdfreader.pdf.reader.util.ToastUtils
import com.all.pdfreader.pdf.reader.viewmodel.PdfViewModel
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
class BookmarksDialogFragment(
private val pdfDocument: PdfDocumentEntity, private val onJumpPage: (Int) -> Unit
) : BottomSheetDialogFragment() {
class BookmarksDialogFragment() : BottomSheetDialogFragment() {
companion object {
private const val ARG_FILE_PATH = "arg_file_path"
private const val ARG_LAST_READ_PAGE = "arg_last_read_page"
fun newInstance(pdfDocument: PdfDocumentEntity): BookmarksDialogFragment {
val fragment = BookmarksDialogFragment()
val args = Bundle()
args.putString(ARG_FILE_PATH, pdfDocument.filePath)
args.putInt(ARG_LAST_READ_PAGE, pdfDocument.lastReadPage)
fragment.arguments = args
return fragment
}
}
private val filePath: String
get() = arguments?.getString(ARG_FILE_PATH) ?: ""
private val lastReadPage: Int
get() = arguments?.getInt(ARG_LAST_READ_PAGE) ?: 0
var onJumpPage: ((Int) -> Unit)? = null
private lateinit var binding: DialogBookmarksBinding
private val viewModel: PdfViewModel by activityViewModels()//为PdfViewActivity的PdfViewModel
@ -28,7 +49,10 @@ class BookmarksDialogFragment(
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (savedInstanceState != null) {
dismissAllowingStateLoss()
return
}
/**
* BottomSheetDialogFragment 覆盖底部导航栏
* 原理
@ -41,10 +65,17 @@ class BookmarksDialogFragment(
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
if (savedInstanceState != null) return null
binding = DialogBookmarksBinding.inflate(layoutInflater)
return binding.root
}
override fun show(manager: FragmentManager, tag: String?) {
if (!manager.isStateSaved) {
super.show(manager, tag)
}
}
override fun onStart() {
super.onStart()
dialog?.window?.findViewById<View>(com.google.android.material.R.id.design_bottom_sheet)
@ -54,7 +85,7 @@ class BookmarksDialogFragment(
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
AnalyticsUtils.logEvent(AnalyticsUtils.Event.BOOKMARK_TK_SHOW)
if (pdfDocument.filePath.isEmpty()) {
if (filePath.isEmpty()) {
showToast(getString(R.string.file_not))
dismiss()
}
@ -70,15 +101,19 @@ class BookmarksDialogFragment(
private fun initView() {
adapter = BookmarkAdapter(list = mutableListOf(), onItemClick = { bookmark ->
onJumpPage(bookmark.pageNumber)
onJumpPage?.invoke(bookmark.pageNumber)
dismiss()
}, onEditClick = { bookmark, position ->
RenameDialogFragment(RenameType.BOOKMARK, bookmark, onOkClick = { updatedBookmark ->
val renameDialogFragment = RenameDialogFragment.newInstance(
RenameType.BOOKMARK, bookmark
)
renameDialogFragment.onOkClick = { updatedBookmark ->
bookmarks = bookmarks.map {//更新外部数据
if (it.id == updatedBookmark.id) updatedBookmark else it
}
adapter.updateItemChanged(updatedBookmark)//更新adapter数据
}).show(
}
renameDialogFragment.show(
parentFragmentManager, "BookmarksDialogFragment"
)
}, onDeleteClick = { bookmark, position ->
@ -102,7 +137,7 @@ class BookmarksDialogFragment(
binding.bookmarksDisplayLayout.visibility = View.VISIBLE
binding.addBtn.visibility = View.VISIBLE
// 检查当前页是否已存在书签
val alreadyBookmarked = bookmarks.any { it.pageNumber == pdfDocument.lastReadPage }
val alreadyBookmarked = bookmarks.any { it.pageNumber == lastReadPage }
binding.addBtn.isEnabled = !alreadyBookmarked
if (alreadyBookmarked) {
binding.addTv.text = getString(R.string.added)
@ -126,23 +161,25 @@ class BookmarksDialogFragment(
dialogAddBookMarks()
}
binding.deleteALLPageBtn.setOnClickListener {
PromptDialogFragment(
getString(R.string.delete_bookmarks_title),
getString(R.string.delete_bookmarks_desc),
onOkClick = {
viewModel.deleteAllBookmark(pdfDocument.filePath)
val promptDialogFragment = PromptDialogFragment.newInstance(
title = getString(R.string.delete_bookmarks_title),
desc = getString(R.string.delete_bookmarks_desc)
)
promptDialogFragment.onOkClick = {
viewModel.deleteAllBookmark(filePath)
adapter.removeAllItems()
bookmarks = emptyList()
updateUi()
}).show(parentFragmentManager, "deleteAllBookmark")
}
promptDialogFragment.show(parentFragmentManager, "deleteAllBookmark")
}
}
private fun dialogAddBookMarks() {
val bookmark = BookmarkEntity(
filePath = pdfDocument.filePath,
pageNumber = pdfDocument.lastReadPage,
label = getString(R.string.page) + " ${pdfDocument.lastReadPage + 1}"
filePath = filePath,
pageNumber = lastReadPage,
label = getString(R.string.page) + " ${lastReadPage + 1}"
)
viewModel.addBookMark(bookmark)
dismiss()

View File

@ -5,6 +5,7 @@ import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.FragmentManager
import com.all.pdfreader.pdf.reader.R
import com.all.pdfreader.pdf.reader.ad.AdsInsUtil
import com.all.pdfreader.pdf.reader.ad.NativeAdCache
@ -13,23 +14,33 @@ import com.all.pdfreader.pdf.reader.databinding.DialogExitBinding
import com.google.android.gms.ads.nativead.NativeAd
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
class ExitDialogFragment(
private val onExitClick: () -> Unit,
) : BottomSheetDialogFragment() {
class ExitDialogFragment() : BottomSheetDialogFragment() {
var onExitClick: (() -> Unit)? = null
private lateinit var binding: DialogExitBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (savedInstanceState != null) {
dismissAllowingStateLoss()
return
}
setStyle(STYLE_NORMAL, R.style.CustomBottomSheetDialogTheme)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View {
): View? {
if (savedInstanceState != null) return null
binding = DialogExitBinding.inflate(layoutInflater)
return binding.root
}
override fun show(manager: FragmentManager, tag: String?) {
if (!manager.isStateSaved) {
super.show(manager, tag)
}
}
override fun onStart() {
super.onStart()
dialog?.window?.findViewById<View>(com.google.android.material.R.id.design_bottom_sheet)
@ -51,7 +62,7 @@ class ExitDialogFragment(
private fun setupOnClick() {
binding.exitBtn.setOnClickListener {
onExitClick()
onExitClick?.invoke()
dismiss()
}
}

View File

@ -23,9 +23,7 @@ import com.all.pdfreader.pdf.reader.util.ToastUtils
import com.all.pdfreader.pdf.reader.viewmodel.PdfViewModel
import java.io.File
class GotoPageDialogFragment(
private val onOkClick: () -> Unit = {},
) : DialogFragment() {
class GotoPageDialogFragment() : DialogFragment() {
private lateinit var binding: DialogGotoPageBinding
private val viewModel: PdfViewModel by activityViewModels()

View File

@ -5,7 +5,6 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.activityViewModels
import com.all.pdfreader.pdf.reader.R
import com.all.pdfreader.pdf.reader.databinding.DialogListMoreBinding
@ -36,7 +35,20 @@ import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import java.io.File
class ListMoreDialogFragment(val filePath: String) : BottomSheetDialogFragment() {
class ListMoreDialogFragment() : BottomSheetDialogFragment() {
companion object {
private const val ARG_FILE_PATH = "arg_file_path"
fun newInstance(filePath: String): ListMoreDialogFragment {
val fragment = ListMoreDialogFragment()
val args = Bundle()
args.putString(ARG_FILE_PATH, filePath)
fragment.arguments = args
return fragment
}
}
private val filePath: String
get() = arguments?.getString(ARG_FILE_PATH) ?: ""
private lateinit var binding: DialogListMoreBinding
private val viewModel: PdfViewModel by activityViewModels()
@ -140,18 +152,21 @@ class ListMoreDialogFragment(val filePath: String) : BottomSheetDialogFragment()
dismiss()
}
binding.renameFileBtn.setOnClickListener {
RenameDialogFragment(RenameType.FILE).show(
val renameDialogFragment = RenameDialogFragment.newInstance(RenameType.FILE)
renameDialogFragment.show(
parentFragmentManager, "ListMoreDialogFragment"
)
dismiss()
}
binding.deleteFileBtn.setOnClickListener {
PromptDialogFragment(
getString(R.string.delete_file_title),
getString(R.string.delete_file_desc),
onOkClick = {
val promptDialogFragment = PromptDialogFragment.newInstance(
title = getString(R.string.delete_file_title),
desc = getString(R.string.delete_file_desc)
)
promptDialogFragment.onOkClick = {
viewModel.deleteFile(pdfDocument.filePath)
}).show(parentFragmentManager, "deleteFile")
}
promptDialogFragment.show(parentFragmentManager, "deleteFile")
dismiss()
}
binding.detailsBtn.setOnClickListener {
@ -194,26 +209,33 @@ class ListMoreDialogFragment(val filePath: String) : BottomSheetDialogFragment()
}
binding.setPasswordBtn.setOnClickListener {
if (pdfDocument.isPassword) {
PdfRemovePasswordDialog(pdfDocument.filePath, onOkClick = { password ->
val pdfRemovePasswordDialog = PdfRemovePasswordDialog.newInstance(pdfDocument.filePath)
pdfRemovePasswordDialog.onOkClick = { password ->
viewModel.removePassword(pdfDocument.filePath, password)
}).show(parentFragmentManager, "PdfRemovePasswordDialog")
}
pdfRemovePasswordDialog.show(parentFragmentManager, "PdfRemovePasswordDialog")
} else {
PdfSetPasswordDialog(onOkClick = { password ->
val pdfSetPasswordDialog = PdfSetPasswordDialog.newInstance()
pdfSetPasswordDialog.onOkClick = { password ->
viewModel.setPassword(pdfDocument.filePath, password)
}).show(parentFragmentManager, "PdfSetPasswordDialog")
}
pdfSetPasswordDialog.show(parentFragmentManager, "PdfSetPasswordDialog")
}
dismiss()
}
binding.removeRecentBtn.setOnClickListener {
AnalyticsUtils.logEvent(AnalyticsUtils.Event.REMOVE_CK)
PromptDialogFragment(
getString(R.string.remove_dialog_title),
getString(R.string.remove_dialog_desc),
getString(R.string.remove),
onOkClick = {
val promptDialogFragment = PromptDialogFragment.newInstance(
title = getString(R.string.remove_dialog_title),
desc = getString(R.string.remove_dialog_desc),
okBtnText = getString(R.string.remove)
)
promptDialogFragment.onOkClick = {
viewModel.removeRecent(pdfDocument.filePath)
AnalyticsUtils.logEvent(AnalyticsUtils.Event.REMOVE_SUCCESS)
}).show(parentFragmentManager, "removeRecent")
}
promptDialogFragment.show(parentFragmentManager, "removeRecent")
dismiss()
}
binding.splitBtn.setOnClickListener {

View File

@ -21,15 +21,39 @@ import com.all.pdfreader.pdf.reader.util.AppUtils.showKeyboard
import com.all.pdfreader.pdf.reader.util.FileUtils.isPdfPasswordCorrect
import java.io.File
class PdfPasswordProtectionDialogFragment(
private val file: File,
private val onOkClick: (String) -> Unit,
private val onCancelClick: () -> Unit,
private val isPrompt: Boolean = false
) : DialogFragment() {
class PdfPasswordProtectionDialogFragment() : DialogFragment() {
companion object {
private const val ARG_FILE_PATH = "arg_file_path"
private const val ARG_IS_PROMPT = "arg_is_prompt"
fun newInstance(filePath: String, isPrompt: Boolean = false): PdfPasswordProtectionDialogFragment {
val fragment = PdfPasswordProtectionDialogFragment()
val args = Bundle()
args.putString(ARG_FILE_PATH, filePath)
args.putBoolean(ARG_IS_PROMPT, isPrompt)
fragment.arguments = args
return fragment
}
}
// 外部设置回调
var onOkClick: ((String) -> Unit)? = null
var onCancelClick: (() -> Unit)? = null
private val file: File
get() = File(arguments?.getString(ARG_FILE_PATH) ?: "")
private val isPrompt: Boolean
get() = arguments?.getBoolean(ARG_IS_PROMPT) ?: false
private lateinit var binding: DialogPdfPasswordProtectionBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
@ -69,7 +93,7 @@ class PdfPasswordProtectionDialogFragment(
}
binding.cancelBtn.setOnClickListener {
onCancelClick()
onCancelClick?.invoke()
dismiss()
}
binding.okBtn.setOnClickListener {
@ -79,7 +103,7 @@ class PdfPasswordProtectionDialogFragment(
return@setOnClickListener
}
if (isPdfPasswordCorrect(requireActivity(), file, password)) {
onOkClick(password)
onOkClick?.invoke(password)
dismiss()
} else {
binding.tilPassword.error = getString(R.string.incorrect_password)

View File

@ -15,17 +15,41 @@ import com.all.pdfreader.pdf.reader.util.FileUtils.isPdfPasswordCorrect
import com.all.pdfreader.pdf.reader.util.ToastUtils
import java.io.File
class PdfRemovePasswordDialog(
val filePath: String,
val onOkClick: (password: String) -> Unit = {}
) :
DialogFragment() {
class PdfRemovePasswordDialog() : DialogFragment() {
companion object {
private const val ARG_FILE_PATH = "arg_file_path"
fun newInstance(filePath: String): PdfRemovePasswordDialog {
val fragment = PdfRemovePasswordDialog()
val args = Bundle()
args.putString(ARG_FILE_PATH, filePath)
fragment.arguments = args
return fragment
}
}
var onOkClick: ((password: String) -> Unit)? = null
private lateinit var binding: DialogPdfRemovePasswordBinding
private val filePath: String
get() = arguments?.getString(ARG_FILE_PATH) ?: ""
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 系统恢复时直接关闭,防止 crash
if (savedInstanceState != null) {
dismissAllowingStateLoss()
return
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
binding = DialogPdfRemovePasswordBinding.inflate(layoutInflater)
if (savedInstanceState != null) return null
binding = DialogPdfRemovePasswordBinding.inflate(inflater, container, false)
return binding.root
}
@ -33,10 +57,8 @@ class PdfRemovePasswordDialog(
super.onStart()
isCancelable = false
dialog?.window?.apply {
// 去掉系统默认的背景 padding
setBackgroundDrawable(Color.TRANSPARENT.toDrawable())
// 设置宽度为全屏减去 16dp
val margin = resources.getDimensionPixelSize(R.dimen.dialog_margin) // 16dp
val margin = resources.getDimensionPixelSize(R.dimen.dialog_margin)
val width = resources.displayMetrics.widthPixels - margin * 2
setLayout(width, ViewGroup.LayoutParams.WRAP_CONTENT)
}
@ -56,16 +78,13 @@ class PdfRemovePasswordDialog(
binding.okBtn.setOnClickListener {
val password = binding.etPassword.text.toString()
if (isPdfPasswordCorrect(requireActivity(), File(filePath), password)) {
onOkClick(password)
val file = File(filePath)
if (isPdfPasswordCorrect(requireActivity(), file, password)) {
onOkClick?.invoke(password)
dismiss()
} else {
binding.tilPassword.error = getString(R.string.incorrect_password)
}
}
}
private fun showToast(message: String) {
ToastUtils.show(requireActivity(), message)
}
}

View File

@ -15,15 +15,32 @@ import com.all.pdfreader.pdf.reader.util.AnalyticsUtils
import com.all.pdfreader.pdf.reader.util.AppUtils.showKeyboard
import com.all.pdfreader.pdf.reader.util.ToastUtils
class PdfSetPasswordDialog(
private val onOkClick: (password: String) -> Unit = {}
) : DialogFragment() {
class PdfSetPasswordDialog() : DialogFragment() {
companion object {
fun newInstance(): PdfSetPasswordDialog {
return PdfSetPasswordDialog()
}
}
var onOkClick: ((password: String) -> Unit)? = null
private lateinit var binding: DialogPdfSetPasswordBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 系统恢复时直接 dismiss 避免 crash
if (savedInstanceState != null) {
dismissAllowingStateLoss()
return
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
binding = DialogPdfSetPasswordBinding.inflate(layoutInflater)
if (savedInstanceState != null) return null
binding = DialogPdfSetPasswordBinding.inflate(inflater, container, false)
return binding.root
}
@ -31,10 +48,8 @@ class PdfSetPasswordDialog(
super.onStart()
isCancelable = false
dialog?.window?.apply {
// 去掉系统默认的背景 padding
setBackgroundDrawable(Color.TRANSPARENT.toDrawable())
// 设置宽度为全屏减去 16dp
val margin = resources.getDimensionPixelSize(R.dimen.dialog_margin) // 16dp
val margin = resources.getDimensionPixelSize(R.dimen.dialog_margin)
val width = resources.displayMetrics.widthPixels - margin * 2
setLayout(width, ViewGroup.LayoutParams.WRAP_CONTENT)
}
@ -57,7 +72,7 @@ class PdfSetPasswordDialog(
val password = binding.etPassword.text.toString()
val confirmPassword = binding.etConfirmPassword.text.toString()
if (validatePassword(password, confirmPassword)) {
onOkClick(password)
onOkClick?.invoke(password)
dismiss()
}
}
@ -97,19 +112,16 @@ class PdfSetPasswordDialog(
binding.tilPassword.error = null
binding.tilConfirmPassword.error = null
// 不允许空密码
if (password.isEmpty()) {
binding.tilPassword.error = getString(R.string.password_not_empty)
return false
}
// 密码长度验证
if (password.length < 4) {
binding.tilPassword.error = getString(R.string.password_too_short)
return false
}
// 密码匹配验证
if (password != confirmPassword) {
binding.tilConfirmPassword.error = getString(R.string.password_not_match)
return false
@ -117,8 +129,4 @@ class PdfSetPasswordDialog(
return true
}
private fun showToast(message: String) {
ToastUtils.show(requireActivity(), message)
}
}

View File

@ -12,55 +12,82 @@ import com.all.pdfreader.pdf.reader.R
import com.all.pdfreader.pdf.reader.databinding.DialogDeleteBinding
import com.all.pdfreader.pdf.reader.util.ToastUtils
class PromptDialogFragment(
private val title: String,
private val desc: String,
private val okBtnText: String? = null,
private val onOkClick: () -> Unit,
private val onCancelClick: () -> Unit = {}
) : DialogFragment() {
class PromptDialogFragment() : DialogFragment() {
companion object {
private const val ARG_TITLE = "arg_title"
private const val ARG_DESC = "arg_desc"
private const val ARG_OK_TEXT = "arg_ok_text"
fun newInstance(
title: String,
desc: String,
okBtnText: String? = null
): PromptDialogFragment {
val fragment = PromptDialogFragment()
val args = Bundle()
args.putString(ARG_TITLE, title)
args.putString(ARG_DESC, desc)
args.putString(ARG_OK_TEXT, okBtnText)
fragment.arguments = args
return fragment
}
}
var onOkClick: (() -> Unit)? = null
var onCancelClick: (() -> Unit)? = null
private val title: String
get() = arguments?.getString(ARG_TITLE) ?: ""
private val desc: String
get() = arguments?.getString(ARG_DESC) ?: ""
private val okBtnText: String?
get() = arguments?.getString(ARG_OK_TEXT)
private lateinit var binding: DialogDeleteBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 系统恢复时直接 dismiss 避免 crash
if (savedInstanceState != null) {
dismissAllowingStateLoss()
return
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
binding = DialogDeleteBinding.inflate(layoutInflater)
if (savedInstanceState != null) return null
binding = DialogDeleteBinding.inflate(inflater, container, false)
return binding.root
}
override fun onStart() {
super.onStart()
dialog?.window?.apply {
// 去掉系统默认的背景 padding
setBackgroundDrawable(Color.TRANSPARENT.toDrawable())
// 设置宽度为全屏减去 16dp
val margin = resources.getDimensionPixelSize(R.dimen.dialog_margin) // 16dp
val margin = resources.getDimensionPixelSize(R.dimen.dialog_margin)
val width = resources.displayMetrics.widthPixels - margin * 2
setLayout(width, ViewGroup.LayoutParams.WRAP_CONTENT)
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if (okBtnText.isNullOrEmpty()) {
binding.okBtnTv.text = getString(R.string.delete)
} else {
binding.okBtnTv.text = okBtnText
}
binding.deleteTitleTv.text = title
binding.deleteDescTv.text = desc
binding.okBtnTv.text = okBtnText ?: getString(R.string.delete)
setupOnClick()
}
private fun setupOnClick() {
binding.okBtn.setOnClickListener {
onOkClick()
onOkClick?.invoke()
dismiss()
}
binding.cancelBtn.setOnClickListener {
onCancelClick()
onCancelClick?.invoke()
dismiss()
}
}

View File

@ -22,17 +22,42 @@ import com.all.pdfreader.pdf.reader.util.ToastUtils
import com.all.pdfreader.pdf.reader.viewmodel.PdfViewModel
import java.io.File
class RenameDialogFragment(
private val type: RenameType,
private val bookmark: BookmarkEntity? = null,
private val name: String? = null,
private val onOkClick: (BookmarkEntity) -> Unit = {},
private val onOkClickString: (String) -> Unit = {}
) : DialogFragment() {
class RenameDialogFragment() : DialogFragment() {
companion object {
private const val ARG_TYPE = "arg_type"
private const val ARG_BOOKMARK = "arg_bookmark"
private const val ARG_NAME = "arg_name"
fun newInstance(
type: RenameType,
bookmark: BookmarkEntity? = null,
name: String? = null
): RenameDialogFragment {
val fragment = RenameDialogFragment()
val args = Bundle()
args.putString(ARG_TYPE, type.name)
if (bookmark != null) args.putParcelable(ARG_BOOKMARK, bookmark)
if (name != null) args.putString(ARG_NAME, name)
fragment.arguments = args
return fragment
}
}
private lateinit var binding: DialogRenameFileBinding
private val viewModel: PdfViewModel by activityViewModels()
private val type: RenameType
get() = RenameType.valueOf(arguments?.getString(ARG_TYPE) ?: RenameType.FILE.name)
private val bookmark: BookmarkEntity?
get() = arguments?.getParcelable(ARG_BOOKMARK)
private val name: String?
get() = arguments?.getString(ARG_NAME)
var onOkClick: ((BookmarkEntity) -> Unit)? = null
var onOkClickString: ((String) -> Unit)? = null
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
@ -114,7 +139,7 @@ class RenameDialogFragment(
if (validateEnter(text, oldName, filePath)) {
val new = bookmark?.copy(label = text)!!
viewModel.updateBookmark(new)
onOkClick(new)
onOkClick?.invoke(new)
dismiss()
}
}
@ -122,7 +147,7 @@ class RenameDialogFragment(
RenameType.NAME -> {
val text = binding.etName.text.toString()
if (validateEnter(text, oldName, filePath)) {
onOkClickString(text)
onOkClickString?.invoke(text)
dismiss()
}
}

View File

@ -5,6 +5,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import com.all.pdfreader.pdf.reader.R
import com.all.pdfreader.pdf.reader.databinding.DialogSortBinding
import com.all.pdfreader.pdf.reader.model.SortConfig
@ -16,10 +17,26 @@ import com.all.pdfreader.pdf.reader.ui.fragment.HomeFrag
import com.all.pdfreader.pdf.reader.util.AnalyticsUtils
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
class SortDialogFragment(
private val fragment: Fragment,
private val onOkClick: (String) -> Unit
) : BottomSheetDialogFragment() {
class SortDialogFragment() : BottomSheetDialogFragment() {
companion object {
private const val ARG_FRAGMENT_TAG = "arg_fragment_tag"
fun newInstance(fragmentTag: String): SortDialogFragment {
val frag = SortDialogFragment()
val args = Bundle()
args.putString(ARG_FRAGMENT_TAG, fragmentTag)
frag.arguments = args
return frag
}
}
private val fragmentTag: String
get() = arguments?.getString(ARG_FRAGMENT_TAG) ?: ""
var onOkClick: ((String) -> Unit)? = null // 可选回调,正常显示时使用
private lateinit var binding: DialogSortBinding
private lateinit var sortConfig: SortConfig
@ -28,16 +45,31 @@ class SortDialogFragment(
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 极端情况下这种类型的dialogFragment在恢复的时候会报错临时的dialog就不进行恢复处理防止崩溃
// 如果系统正在恢复这个 DialogFragment 直接 dismiss 避免 crash
if (savedInstanceState != null) {
dismissAllowingStateLoss()
return
}
setStyle(STYLE_NORMAL, R.style.CustomBottomSheetDialogTheme)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
// 如果是恢复状态,不创建 view
if (savedInstanceState != null) return null
binding = DialogSortBinding.inflate(layoutInflater)
return binding.root
}
override fun show(manager: FragmentManager, tag: String?) {
if (!manager.isStateSaved) {
super.show(manager, tag)
}
}
override fun onStart() {
super.onStart()
dialog?.window?.findViewById<View>(com.google.android.material.R.id.design_bottom_sheet)
@ -49,13 +81,10 @@ class SortDialogFragment(
AnalyticsUtils.logEvent(AnalyticsUtils.Event.SORT_SHOW)
val appStore = AppStore(requireActivity())
isCancelable = false
when(fragment){
is HomeFrag->{
sortConfig = SortConfig.fromPreferenceString(appStore.documentSortType)
}
is FavoriteFrag->{
sortConfig = SortConfig.fromPreferenceString(appStore.favoriteSortType)
}
sortConfig = when(fragmentTag) {
HomeFrag::class.java.simpleName -> SortConfig.fromPreferenceString(appStore.documentSortType)
FavoriteFrag::class.java.simpleName -> SortConfig.fromPreferenceString(appStore.favoriteSortType)
else -> SortConfig.fromPreferenceString(appStore.documentSortType)
}
updateUi(sortConfig)
selectedField = sortConfig.field
@ -90,10 +119,8 @@ class SortDialogFragment(
dismiss()
}
binding.okBtn.setOnClickListener {
val newConfig = SortConfig(
field = selectedField, direction = selectedDirection
)
onOkClick(newConfig.toPreferenceString())
val newConfig = SortConfig(field = selectedField, direction = selectedDirection)
onOkClick?.invoke(newConfig.toPreferenceString())
dismiss()
}
}

View File

@ -66,7 +66,7 @@ class FavoriteFrag : BaseFrag(){
val intent = PdfViewActivity.createIntent(requireContext(), pdf.filePath)
startActivity(intent)
}, onMoreClick = { pdf ->
ListMoreDialogFragment(pdf.filePath).show(parentFragmentManager, FRAG_TAG)
ListMoreDialogFragment.newInstance(pdf.filePath).show(parentFragmentManager, FRAG_TAG)
}, onLongClick = { pdf ->
setupMultiSelect()
}, onSelectModelItemClick = { number ->
@ -84,10 +84,12 @@ class FavoriteFrag : BaseFrag(){
}
binding.sortingBtn.setOnSingleClickListener {
SortDialogFragment(FavoriteFrag(), onOkClick = { it ->
updateSortUi(it)
onSortFavoriteTypeChanged(it)
}).show(parentFragmentManager, TAG)
val dialog = SortDialogFragment.newInstance(FavoriteFrag::class.java.simpleName)
dialog.onOkClick = { result ->
updateSortUi(result)
onSortFavoriteTypeChanged(result)
}
dialog.show(parentFragmentManager, TAG)
}
}

View File

@ -64,7 +64,7 @@ class HomeFrag : BaseFrag(){
val intent = PdfViewActivity.createIntent(requireContext(), pdf.filePath)
startActivity(intent)
}, onMoreClick = { pdf ->
ListMoreDialogFragment(pdf.filePath).show(parentFragmentManager, FRAG_TAG)
ListMoreDialogFragment.newInstance(pdf.filePath).show(parentFragmentManager, FRAG_TAG)
}, onLongClick = { pdf ->
setupMultiSelect()
}, onSelectModelItemClick = { number ->
@ -85,10 +85,12 @@ class HomeFrag : BaseFrag(){
}
binding.sortingBtn.setOnSingleClickListener {
SortDialogFragment(HomeFrag(), onOkClick = { it ->
updateSortUi(it)
onSortTypeChanged(it)
}).show(parentFragmentManager, TAG)
val dialog = SortDialogFragment.newInstance(HomeFrag::class.java.simpleName)
dialog.onOkClick = { result ->
updateSortUi(result)
onSortTypeChanged(result)
}
dialog.show(parentFragmentManager, TAG)
}
}

View File

@ -59,7 +59,7 @@ class RecentlyFrag : BaseFrag() {
val intent = PdfViewActivity.createIntent(requireContext(), pdf.filePath)
startActivity(intent)
}, onMoreClick = { pdf ->
ListMoreDialogFragment(pdf.filePath).show(parentFragmentManager, FRAG_TAG)
ListMoreDialogFragment.newInstance(pdf.filePath).show(parentFragmentManager, FRAG_TAG)
}, onLongClick = { pdf ->
setupMultiSelect()
}, onSelectModelItemClick = { number ->