@@ -278,6 +278,10 @@ class BooksFragment : Fragment(), DrawerItem, OnViewHolderClickListener<BookView
278278 R .id.books_context_menu_delete -> {
279279 viewModel.deleteBookRequest(bookId)
280280 }
281+
282+ R .id.books_context_menu_show_diff -> {
283+ viewModel.showDiffBookRequest(bookId)
284+ }
281285 }
282286
283287 viewModel.appBar.toMode(APP_BAR_DEFAULT_MODE )
@@ -305,6 +309,35 @@ class BooksFragment : Fragment(), DrawerItem, OnViewHolderClickListener<BookView
305309 pickFileForBookExport.launch(defaultFileName)
306310 }
307311
312+ private fun showDiffDialog (book : BookView ) {
313+ val dialogBinding = DialogBookDeleteBinding .inflate(LayoutInflater .from(context))
314+
315+ dialogBinding.deleteLinkedCheckbox.setOnCheckedChangeListener { _, isChecked ->
316+ dialogBinding.deleteLinkedUrl.isEnabled = isChecked
317+ }
318+
319+ val dialogClickListener = DialogInterface .OnClickListener { _, which ->
320+ when (which) {
321+ DialogInterface .BUTTON_POSITIVE -> {
322+ val deleteLinked = dialogBinding.deleteLinkedCheckbox.isChecked
323+ viewModel.deleteBook(book.book.id, deleteLinked)
324+ }
325+ }
326+ }
327+
328+ val builder = MaterialAlertDialogBuilder (requireContext())
329+ .setTitle(getString(R .string.delete_with_quoted_argument, book.book.name))
330+ .setPositiveButton(R .string.delete, dialogClickListener)
331+ .setNegativeButton(R .string.cancel, dialogClickListener)
332+
333+ if (book.syncedTo != null ) {
334+ dialogBinding.deleteLinkedUrl.text = book.syncedTo.uri.toString()
335+ builder.setView(dialogBinding.root)
336+ }
337+
338+ dialog = builder.show()
339+ }
340+
308341 private fun deleteBookDialog (book : BookView ) {
309342 val dialogBinding = DialogBookDeleteBinding .inflate(LayoutInflater .from(context))
310343
@@ -427,6 +460,12 @@ class BooksFragment : Fragment(), DrawerItem, OnViewHolderClickListener<BookView
427460 }
428461 })
429462
463+ viewModel.showDiffEvent.observeSingle(viewLifecycleOwner, Observer { bookView ->
464+ if (bookView != null ) {
465+ showDiffDialog(bookView)
466+ }
467+ })
468+
430469 viewModel.bookToRenameEvent.observeSingle(viewLifecycleOwner, Observer { bookView ->
431470 if (bookView != null ) {
432471 renameBookDialog(bookView)
0 commit comments