From 5aacc761e1305d8e33accce0b975fc0e8e968454 Mon Sep 17 00:00:00 2001 From: onde2rock Date: Mon, 9 Apr 2018 09:22:16 +0200 Subject: [PATCH] [UX] Implement back_to_exit option (#3838) Also goes back to File Manager as default view first. --- frontend/apps/filemanager/filemanager.lua | 25 ++++++++--- frontend/apps/reader/modules/readerback.lua | 3 +- frontend/apps/reader/readerui.lua | 4 +- .../elements/common_settings_menu_table.lua | 42 +++++++++++++++++++ .../ui/elements/filemanager_menu_order.lua | 1 + frontend/ui/elements/reader_menu_order.lua | 1 + 6 files changed, 69 insertions(+), 7 deletions(-) diff --git a/frontend/apps/filemanager/filemanager.lua b/frontend/apps/filemanager/filemanager.lua index 993b00077..833a43776 100644 --- a/frontend/apps/filemanager/filemanager.lua +++ b/frontend/apps/filemanager/filemanager.lua @@ -363,16 +363,31 @@ function FileManager:init() if Device:hasKeys() then self.key_events.Home = { {"Home"}, doc = "go home" } - if not Device:isSDL() then - --if not in the desktop emulator - --remove the old Back key to exit koreader - self.file_chooser.key_events.Close = nil - end + --Override the menu.lua way of handling the back key + self.file_chooser.key_events.Back = { {"Back"}, doc = "go back" } end self:handleEvent(Event:new("SetDimensions", self.dimen)) end +function FileChooser:onBack() + local back_to_exit = G_reader_settings:readSetting("back_to_exit") or "prompt" + if back_to_exit == "always" then + return self:onClose() + elseif back_to_exit == "disable" then + return true + elseif back_to_exit == "prompt" then + UIManager:show(ConfirmBox:new{ + text = _("Exit KOReader?"), + ok_text = _("Exit"), + ok_callback = function() + self:onClose() + end + }) + return true + end +end + function FileManager:tapPlus() local buttons = { { diff --git a/frontend/apps/reader/modules/readerback.lua b/frontend/apps/reader/modules/readerback.lua index 3c8a9e250..2a9ee4c47 100644 --- a/frontend/apps/reader/modules/readerback.lua +++ b/frontend/apps/reader/modules/readerback.lua @@ -3,6 +3,7 @@ local Event = require("ui/event") local EventListener = require("ui/widget/eventlistener") local logger = require("logger") local util = require("util") +local _ = require("gettext") local ReaderBack = EventListener:new{ location_stack = {}, @@ -74,7 +75,7 @@ function ReaderBack:onBack() end else logger.dbg("[ReaderBack] no location history, closing") - self.ui:handleEvent(Event:new("Close")) + self.ui:handleEvent(Event:new("Home")) end end diff --git a/frontend/apps/reader/readerui.lua b/frontend/apps/reader/readerui.lua index 1b69f22fa..b4c741f42 100644 --- a/frontend/apps/reader/readerui.lua +++ b/frontend/apps/reader/readerui.lua @@ -634,7 +634,9 @@ function ReaderUI:dealWithLoadDocumentFailure() end function ReaderUI:onHome() - return self:showFileManager() + self:onClose() + self:showFileManager() + return true end return ReaderUI diff --git a/frontend/ui/elements/common_settings_menu_table.lua b/frontend/ui/elements/common_settings_menu_table.lua index c515333c2..a6f201f8f 100644 --- a/frontend/ui/elements/common_settings_menu_table.lua +++ b/frontend/ui/elements/common_settings_menu_table.lua @@ -125,6 +125,48 @@ if Device:isAndroid() then table.insert(common_settings.screen.sub_item_table, require("ui/elements/screen_fullscreen_menu_table")) end +if Device:hasKeys() then + common_settings.navigation = { + text = _("Navigation"), + sub_item_table = { + { + text = _("Back key to exit KOReader"), + sub_item_table = { + { + text = _("Prompt"), + checked_func = function() + local setting = G_reader_settings:readSetting("back_to_exit") + return setting == "prompt" or setting == nil + end, + callback = function() + G_reader_settings:saveSetting("back_to_exit", "prompt") + end, + }, + { + text = _("Always"), + checked_func = function() + return G_reader_settings:readSetting("back_to_exit") + == "always" + end, + callback = function() + G_reader_settings:saveSetting("back_to_exit", "always") + end, + }, + { + text = _("Disable"), + checked_func = function() + return G_reader_settings:readSetting("back_to_exit") + == "disable" + end, + callback = function() + G_reader_settings:saveSetting("back_to_exit", "disable") + end, + }, + }, + }, + } + } +end common_settings.document = { text = _("Document"), sub_item_table = { diff --git a/frontend/ui/elements/filemanager_menu_order.lua b/frontend/ui/elements/filemanager_menu_order.lua index 883dd0680..06ad04ad6 100644 --- a/frontend/ui/elements/filemanager_menu_order.lua +++ b/frontend/ui/elements/filemanager_menu_order.lua @@ -27,6 +27,7 @@ local order = { "screen", "screensaver", "document", + "navigation", "----------------------------", "language", "time", diff --git a/frontend/ui/elements/reader_menu_order.lua b/frontend/ui/elements/reader_menu_order.lua index 1a811fe6b..56338cb96 100644 --- a/frontend/ui/elements/reader_menu_order.lua +++ b/frontend/ui/elements/reader_menu_order.lua @@ -43,6 +43,7 @@ local order = { "screen", "screensaver", "document", + "navigation", "----------------------------", "language", "time",