diff --git a/app/src/main/java/com/all/pdfreader/pro/app/room/dao/BookmarkDao.kt b/app/src/main/java/com/all/pdfreader/pro/app/room/dao/BookmarkDao.kt index d58b270..ae7e657 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/room/dao/BookmarkDao.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/room/dao/BookmarkDao.kt @@ -33,4 +33,7 @@ interface BookmarkDao { @Query("DELETE FROM bookmarks WHERE filePath = :filePath AND pageNumber = :pageNumber") suspend fun deleteByPage(filePath: String, pageNumber: Int) + + @Query("UPDATE bookmarks SET filePath = :newFilePath WHERE filePath = :oldFilePath") + suspend fun updateFilePath(oldFilePath: String, newFilePath: String) } \ No newline at end of file diff --git a/app/src/main/java/com/all/pdfreader/pro/app/room/entity/BookmarkEntity.kt b/app/src/main/java/com/all/pdfreader/pro/app/room/entity/BookmarkEntity.kt index 607821b..c42c7c7 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/room/entity/BookmarkEntity.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/room/entity/BookmarkEntity.kt @@ -11,7 +11,8 @@ import androidx.room.PrimaryKey entity = PdfDocumentEntity::class, parentColumns = ["filePath"], childColumns = ["filePath"], - onDelete = ForeignKey.CASCADE + onDelete = ForeignKey.CASCADE, + onUpdate = ForeignKey.CASCADE )], indices = [Index(value = ["filePath"])] ) @@ -19,7 +20,7 @@ data class BookmarkEntity( @PrimaryKey(autoGenerate = true) val id: Long = 0, - val filePath: String, // 关联PdfDocumentEntity的fileHash + val filePath: String, // 关联PdfDocumentEntity的filePath val pageNumber: Int, // 页码(从0开始) val label: String, // 书签标签 val positionX: Float = 0f, // 页面内X位置 diff --git a/app/src/main/java/com/all/pdfreader/pro/app/room/entity/NoteEntity.kt b/app/src/main/java/com/all/pdfreader/pro/app/room/entity/NoteEntity.kt index 7a0eac8..d3139ff 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/room/entity/NoteEntity.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/room/entity/NoteEntity.kt @@ -11,7 +11,8 @@ import androidx.room.PrimaryKey entity = PdfDocumentEntity::class, parentColumns = ["filePath"], childColumns = ["filePath"], - onDelete = ForeignKey.CASCADE + onDelete = ForeignKey.CASCADE, + onUpdate = ForeignKey.CASCADE )], indices = [Index(value = ["filePath"])] ) diff --git a/app/src/main/java/com/all/pdfreader/pro/app/room/entity/RecentReadEntity.kt b/app/src/main/java/com/all/pdfreader/pro/app/room/entity/RecentReadEntity.kt index 11cf30d..7b4127d 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/room/entity/RecentReadEntity.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/room/entity/RecentReadEntity.kt @@ -11,7 +11,8 @@ import androidx.room.PrimaryKey entity = PdfDocumentEntity::class, parentColumns = ["filePath"], childColumns = ["filePath"], - onDelete = ForeignKey.CASCADE + onDelete = ForeignKey.CASCADE, + onUpdate = ForeignKey.CASCADE )], indices = [Index(value = ["filePath"])] ) diff --git a/app/src/main/java/com/all/pdfreader/pro/app/room/repository/PdfRepository.kt b/app/src/main/java/com/all/pdfreader/pro/app/room/repository/PdfRepository.kt index 58c90ba..f53a00b 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/room/repository/PdfRepository.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/room/repository/PdfRepository.kt @@ -124,6 +124,9 @@ class PdfRepository private constructor(context: Context) { // 书签相关操作 suspend fun addBookmark(bookmark: BookmarkEntity): Long = bookmarkDao.insert(bookmark) suspend fun updateBookmark(bookmark: BookmarkEntity): Int = bookmarkDao.update(bookmark) + suspend fun updateBookmarkFilePath(oldPath: String, newPath: String) = + bookmarkDao.updateFilePath(oldPath, newPath) + suspend fun deleteBookmark(bookmark: BookmarkEntity): Int = bookmarkDao.delete(bookmark) suspend fun deleteAllBookmark(filePath: String): Int { return bookmarkDao.deleteAllByPdf(filePath) diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfViewActivity.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfViewActivity.kt index 5bf057a..f0703e2 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfViewActivity.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfViewActivity.kt @@ -73,7 +73,10 @@ class PdfViewActivity : BaseActivity(), OnLoadCompleteListener, OnPageChangeList viewModel.pdfDocument.observe(this) { document -> document?.let { pdfDocument = it - loadPdf() + if (lastLoadedFilePath != pdfDocument.filePath) { + lastLoadedFilePath = pdfDocument.filePath + loadPdf() + } initView() } ?: run { showToast(getString(R.string.file_not)) @@ -108,6 +111,31 @@ class PdfViewActivity : BaseActivity(), OnLoadCompleteListener, OnPageChangeList showToast(getString(R.string.bookmark_add_fail)) } } + viewModel.fileActionEvent.observeEvent(this) { event -> + if (event.renameResult.success) { + showToast(getString(R.string.rename_successfully)) + event.renameResult.newFilePath?.let { + viewModel.getPDFDocument(it)//修改成功后更新当前页面的数据 + viewModel.getBookmarks(it) + } + } else { + showToast(event.renameResult.errorMessage.toString()) + } + } + viewModel.fileActionEvent.observeEvent(this) { event -> + if (event.file != null) { + showToast(getString(R.string.duplicate_created_successfully)) + } else { + showToast(getString(R.string.duplicate_created_failed)) + } + } + viewModel.fileActionEvent.observeEvent(this) { event -> + if (event.isFavorite) { + showToast(getString(R.string.added_to_favorites)) + } else { + showToast(getString(R.string.removed_from_favorites)) + } + } } private fun initView() { @@ -138,7 +166,7 @@ class PdfViewActivity : BaseActivity(), OnLoadCompleteListener, OnPageChangeList AppUtils.shareFile(this, File(pdfDocument.filePath)) } binding.moreBtn.setOnClickListener { -// ListMoreDialogFragment(pdfDocument.filePath).show(supportFragmentManager, FRAG_TAG) + ListMoreDialogFragment(pdfDocument.filePath).show(supportFragmentManager, FRAG_TAG) } } diff --git a/app/src/main/java/com/all/pdfreader/pro/app/viewmodel/PdfViewModel.kt b/app/src/main/java/com/all/pdfreader/pro/app/viewmodel/PdfViewModel.kt index 2748102..2f5f7f6 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/viewmodel/PdfViewModel.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/viewmodel/PdfViewModel.kt @@ -67,7 +67,6 @@ class PdfViewModel : ViewModel() { val newFilePath = File(parentDir, finalName).absolutePath.toString() Log.d("ocean", "renamePdf->newFilePath: $newFilePath, finalName=$finalName") pdfRepository.updateFilePathAndFileName(filePath, newFilePath, finalName) - val newResult = renameResult.copy(newFilePath = newFilePath) _fileActionEvent.postValue(FileActionEvent.Rename(newResult)) } else { diff --git a/app/src/main/res/layout/activity_pdf_view.xml b/app/src/main/res/layout/activity_pdf_view.xml index 6b2bd41..162a781 100644 --- a/app/src/main/res/layout/activity_pdf_view.xml +++ b/app/src/main/res/layout/activity_pdf_view.xml @@ -68,7 +68,7 @@ - - + + +