From f6020a7260a35be8d691107b7a28af125b7b27a8 Mon Sep 17 00:00:00 2001 From: hius07 <62179190+hius07@users.noreply.github.com> Date: Sat, 11 Sep 2021 12:04:48 +0300 Subject: [PATCH] Readerhighlight: manage actions (#8199) Discussion in #6409. Highlight action renamed to Long-press on text and moved from Gear - Document to Gear - Taps and gestures. Added action Do nothing. Removed menu item Typeset - Highlighting - Allow highlighting. Fixed untranslated strings in the Cycle highlight action notification. Long-press on images always opens ImageViewer. Closes #6409. --- .../apps/reader/modules/readerhighlight.lua | 130 ++++++++---------- .../elements/common_settings_menu_table.lua | 74 +--------- .../ui/elements/filemanager_menu_order.lua | 4 +- frontend/ui/elements/reader_menu_order.lua | 12 +- 4 files changed, 72 insertions(+), 148 deletions(-) diff --git a/frontend/apps/reader/modules/readerhighlight.lua b/frontend/apps/reader/modules/readerhighlight.lua index 9a11cac6e..81cd01fb1 100644 --- a/frontend/apps/reader/modules/readerhighlight.lua +++ b/frontend/apps/reader/modules/readerhighlight.lua @@ -4,7 +4,6 @@ local Device = require("device") local Event = require("ui/event") local InfoMessage = require("ui/widget/infomessage") local InputContainer = require("ui/widget/container/inputcontainer") -local MultiConfirmBox = require("ui/widget/multiconfirmbox") local Notification = require("ui/widget/notification") local TimeVal = require("ui/timeval") local Translator = require("ui/translator") @@ -260,10 +259,20 @@ function ReaderHighlight:onReaderReady() self:setupTouchZones() end +local long_press_action = { + {_("Ask with popup dialog"), "ask"}, + {_("Do nothing"), "nothing"}, + {_("Highlight"), "highlight"}, + {_("Translate"), "translate"}, + {_("Wikipedia"), "wikipedia"}, + {_("Dictionary"), "dictionary"}, + {_("Fulltext search"), "search"}, +} + function ReaderHighlight:addToMainMenu(menu_items) -- insert table to main reader menu menu_items.highlight_options = { - text = _("Highlighting"), + text = _("Highlight style"), sub_item_table = self:genHighlightDrawerMenu(), } if self.document.info.has_pages then @@ -273,6 +282,36 @@ function ReaderHighlight:addToMainMenu(menu_items) } end menu_items.translation_settings = Translator:genSettingsMenu() + menu_items.long_press = { + text = _("Long-press on text"), + sub_item_table = { + { + text = _("Dictionary on single word selection"), + checked_func = function() + return not self.view.highlight.disabled and G_reader_settings:nilOrFalse("highlight_action_on_single_word") + end, + enabled_func = function() + return not self.view.highlight.disabled + end, + callback = function() + G_reader_settings:flipNilOrFalse("highlight_action_on_single_word") + end, + separator = true, + }, + }, + } + for _, v in ipairs(long_press_action) do + table.insert(menu_items.long_press.sub_item_table, { + text = v[1], + checked_func = function() + return G_reader_settings:readSetting("default_highlight_action", "ask") == v[2] + end, + callback = function() + G_reader_settings:saveSetting("default_highlight_action", v[2]) + self.view.highlight.disabled = v[2] == "nothing" + end, + }) + end end local highlight_style = { @@ -328,9 +367,6 @@ function ReaderHighlight:genHighlightDrawerMenu() checked_func = function() return self.view.highlight.saved_drawer == style end, - enabled_func = function() - return not self.view.highlight.disabled - end, callback = function() self.view.highlight.saved_drawer = style end, @@ -341,19 +377,6 @@ function ReaderHighlight:genHighlightDrawerMenu() } end return { - { - text = _("Allow highlighting"), - checked_func = function() - return not self.view.highlight.disabled - end, - callback = function() - self.view.highlight.disabled = not self.view.highlight.disabled - end, - hold_callback = function() - self:toggleDefault() - end, - separator = true, - }, get_highlight_style("lighten"), get_highlight_style("underscore"), get_highlight_style("invert"), @@ -362,13 +385,12 @@ function ReaderHighlight:genHighlightDrawerMenu() return T(_("Highlight opacity: %1"), G_reader_settings:readSetting("highlight_lighten_factor", 0.2)) end, enabled_func = function() - return not self.view.highlight.disabled and self.view.highlight.saved_drawer == "lighten" + return self.view.highlight.saved_drawer == "lighten" end, callback = function() local SpinWidget = require("ui/widget/spinwidget") local curr_val = G_reader_settings:readSetting("highlight_lighten_factor", 0.2) local items = SpinWidget:new{ - width = math.floor(Screen:getWidth() * 0.6), value = curr_val, value_min = 0, value_max = 1, @@ -784,8 +806,6 @@ function ReaderHighlight:onHold(arg, ges) end end - -- disable hold gesture if highlighting is disabled - if self.view.highlight.disabled then return false end self:clear() -- clear previous highlight (delayed clear may not have done it yet) self.hold_ges_pos = ges.pos -- remember hold original gesture position self.hold_pos = self.view:screenToPageTransform(ges.pos) @@ -814,6 +834,7 @@ function ReaderHighlight:onHold(arg, ges) end -- otherwise, we must be holding on text + if self.view.highlight.disabled then return false end -- Long-press action "Do nothing" checked local ok, word = pcall(self.ui.document.getWordFromPosition, self.ui.document, self.hold_pos) if ok and word then logger.dbg("selected word:", word) @@ -1209,8 +1230,8 @@ function ReaderHighlight:onHoldRelease() end if self.selected_text then - local default_highlight_action = G_reader_settings:readSetting("default_highlight_action") - if long_final_hold or not default_highlight_action then + local default_highlight_action = G_reader_settings:readSetting("default_highlight_action", "ask") + if long_final_hold or default_highlight_action == "ask" then -- bypass default action and show popup if long final hold self:onShowHighlightMenu() elseif default_highlight_action == "highlight" then @@ -1238,26 +1259,21 @@ function ReaderHighlight:onHoldRelease() end function ReaderHighlight:onCycleHighlightAction() - local next_actions = { - highlight = "translate", - translate = "wikipedia", - wikipedia = "dictionary", - dictionary = "search", - search = nil, - } - if G_reader_settings:hasNot("default_highlight_action") then - G_reader_settings:saveSetting("default_highlight_action", "highlight") - UIManager:show(Notification:new{ - text = _("Default highlight action changed to 'highlight'."), - }) - else - local current_action = G_reader_settings:readSetting("default_highlight_action") - local next_action = next_actions[current_action] - G_reader_settings:saveSetting("default_highlight_action", next_action) - UIManager:show(Notification:new{ - text = T(_("Default highlight action changed to '%1'."), (next_action or "default")), - }) + local current_action = G_reader_settings:readSetting("default_highlight_action", "ask") + local next_action_num + for i, v in ipairs(long_press_action) do + if v[2] == current_action then + next_action_num = i + 1 + break + end + end + if next_action_num > #long_press_action then + next_action_num = 1 end + G_reader_settings:saveSetting("default_highlight_action", long_press_action[next_action_num][2]) + UIManager:show(Notification:new{ + text = T(_("Default highlight action changed to '%1'."), long_press_action[next_action_num][1]), + }) return true end @@ -1533,11 +1549,8 @@ end function ReaderHighlight:onReadSettings(config) self.view.highlight.saved_drawer = config:readSetting("highlight_drawer") or G_reader_settings:readSetting("highlight_drawing_style") or self.view.highlight.saved_drawer - if config:has("highlight_disabled") then - self.view.highlight.disabled = config:isTrue("highlight_disabled") - else - self.view.highlight.disabled = G_reader_settings:isTrue("highlight_disabled") - end + self.view.highlight.disabled = G_reader_settings:has("default_highlight_action") + and G_reader_settings:readSetting("default_highlight_action") == "nothing" -- panel zoom settings isn't supported in EPUB if self.document.info.has_pages then @@ -1563,7 +1576,6 @@ end function ReaderHighlight:onSaveSettings() self.ui.doc_settings:saveSetting("highlight_drawer", self.view.highlight.saved_drawer) - self.ui.doc_settings:saveSetting("highlight_disabled", self.view.highlight.disabled) self.ui.doc_settings:saveSetting("panel_zoom_enabled", self.panel_zoom_enabled) end @@ -1574,24 +1586,4 @@ function ReaderHighlight:onClose() self:clear() end -function ReaderHighlight:toggleDefault() - local highlight_disabled = G_reader_settings:isTrue("highlight_disabled") - UIManager:show(MultiConfirmBox:new{ - text = highlight_disabled and _("Would you like to enable or disable highlighting by default?\n\nThe current default (★) is disabled.") - or _("Would you like to enable or disable highlighting by default?\n\nThe current default (★) is enabled."), - choice1_text_func = function() - return highlight_disabled and _("Disable (★)") or _("Disable") - end, - choice1_callback = function() - G_reader_settings:makeTrue("highlight_disabled") - end, - choice2_text_func = function() - return highlight_disabled and _("Enable") or _("Enable (★)") - end, - choice2_callback = function() - G_reader_settings:makeFalse("highlight_disabled") - end, - }) -end - return ReaderHighlight diff --git a/frontend/ui/elements/common_settings_menu_table.lua b/frontend/ui/elements/common_settings_menu_table.lua index 9ecc8e9ab..467172f64 100644 --- a/frontend/ui/elements/common_settings_menu_table.lua +++ b/frontend/ui/elements/common_settings_menu_table.lua @@ -87,7 +87,8 @@ common_settings.time = { { text_func = function () local duration_format = G_reader_settings:readSetting("duration_format", "classic") - return T(_("Duration format (%1)"), duration_format) + local text = duration_format == "classic" and _("Classic") or _("Modern") + return T(_("Duration format: %1"), text) end, sub_item_table = { { @@ -588,7 +589,7 @@ common_settings.document = { separator = true, }, { - text = _("Ask with pop-up dialog"), + text = _("Ask with popup dialog"), checked_func = function() local setting = G_reader_settings:readSetting("end_document_action") return setting == "pop-up" or setting == nil @@ -674,75 +675,6 @@ common_settings.document = { }, } }, - { - text = _("Highlight action"), - sub_item_table = { - { - text = _("Enable on single word selection"), - checked_func = function() - return G_reader_settings:isTrue("highlight_action_on_single_word") - end, - callback = function() - G_reader_settings:flipNilOrFalse("highlight_action_on_single_word") - end, - separator = true, - }, - { - text = _("Ask with popup dialog"), - checked_func = function() - return G_reader_settings:nilOrFalse("default_highlight_action") - end, - callback = function() - G_reader_settings:saveSetting("default_highlight_action", nil) - end, - }, - { - text = _("Highlight"), - checked_func = function() - return G_reader_settings:readSetting("default_highlight_action") == "highlight" - end, - callback = function() - G_reader_settings:saveSetting("default_highlight_action", "highlight") - end, - }, - { - text = _("Translate"), - checked_func = function() - return G_reader_settings:readSetting("default_highlight_action") == "translate" - end, - callback = function() - G_reader_settings:saveSetting("default_highlight_action", "translate") - end, - }, - { - text = _("Wikipedia"), - checked_func = function() - return G_reader_settings:readSetting("default_highlight_action") == "wikipedia" - end, - callback = function() - G_reader_settings:saveSetting("default_highlight_action", "wikipedia") - end, - }, - { - text = _("Dictionary"), - checked_func = function() - return G_reader_settings:readSetting("default_highlight_action") == "dictionary" - end, - callback = function() - G_reader_settings:saveSetting("default_highlight_action", "dictionary") - end, - }, - { - text = _("Fulltext search"), - checked_func = function() - return G_reader_settings:readSetting("default_highlight_action") == "search" - end, - callback = function() - G_reader_settings:saveSetting("default_highlight_action", "search") - end, - }, - } - }, }, } common_settings.language = Language:getLangMenuTable() diff --git a/frontend/ui/elements/filemanager_menu_order.lua b/frontend/ui/elements/filemanager_menu_order.lua index d3d5c4ab8..fb71e4f79 100644 --- a/frontend/ui/elements/filemanager_menu_order.lua +++ b/frontend/ui/elements/filemanager_menu_order.lua @@ -59,7 +59,6 @@ local order = { "android_haptic_feedback", "android_back_button", "----------------------------", - "invert_page_turn_buttons", "opening_page_location_stack", }, network = { @@ -92,9 +91,10 @@ local order = { "gesture_manager", "gesture_intervals", "----------------------------", - "menu_activate", "ignore_hold_corners", "screen_disable_double_tab", + "----------------------------", + "menu_activate", }, tools = { "calibre", diff --git a/frontend/ui/elements/reader_menu_order.lua b/frontend/ui/elements/reader_menu_order.lua index d9eff10a2..c32817c7a 100644 --- a/frontend/ui/elements/reader_menu_order.lua +++ b/frontend/ui/elements/reader_menu_order.lua @@ -53,7 +53,8 @@ local order = { "speed_reading_module_perception_expander", "----------------------------", "highlight_options", - "panel_zoom_options" + "panel_zoom_options", + "djvu_render_mode", }, setting = { -- common settings @@ -71,7 +72,6 @@ local order = { "language", "device", "----------------------------", - "djvu_render_mode", "status_bar", }, device = { @@ -98,8 +98,6 @@ local order = { "android_haptic_feedback", "android_back_button", "----------------------------", - "invert_page_turn_gestures", - "invert_page_turn_buttons", "opening_page_location_stack", }, network = { @@ -133,13 +131,15 @@ local order = { "gesture_manager", "gesture_intervals", "----------------------------", + "ignore_hold_corners", + "screen_disable_double_tab", + "----------------------------", "follow_links", "----------------------------", "menu_activate", "page_turns", "scrolling", - "ignore_hold_corners", - "screen_disable_double_tab", + "long_press", }, tools = { "read_timer",