[fix] Make set defaults self contained (#5419)

Fixes #5418.
pull/5373/head
Jörg Derungs 5 years ago committed by Frans de Jonge
parent 3de3ea04ff
commit c8a6c144fa

@ -10,6 +10,7 @@ local SetDefaults = require("apps/filemanager/filemanagersetdefaults")
local UIManager = require("ui/uimanager") local UIManager = require("ui/uimanager")
local Screen = Device.screen local Screen = Device.screen
local dbg = require("dbg") local dbg = require("dbg")
local lfs = require("libs/libkoreader-lfs")
local logger = require("logger") local logger = require("logger")
local util = require("util") local util = require("util")
local _ = require("gettext") local _ = require("gettext")
@ -324,7 +325,6 @@ function FileManagerMenu:setUpdateItemTable()
table.insert(self.menu_items.developer_options.sub_item_table, { table.insert(self.menu_items.developer_options.sub_item_table, {
text = _("Disable C blitter"), text = _("Disable C blitter"),
enabled_func = function() enabled_func = function()
local lfs = require("libs/libkoreader-lfs")
return lfs.attributes("libs/libblitbuffer.so", "mode") == "file" return lfs.attributes("libs/libblitbuffer.so", "mode") == "file"
end, end,
checked_func = function() checked_func = function()
@ -451,7 +451,9 @@ function FileManagerMenu:setUpdateItemTable()
self.menu_items.restart_koreader = { self.menu_items.restart_koreader = {
text = _("Restart KOReader"), text = _("Restart KOReader"),
callback = function() callback = function()
self:exitOrRestart(function() UIManager:restartKOReader() end) self:exitOrRestart(function()
UIManager:restartKOReader()
end)
end, end,
} }
if not Device:canRestart() then if not Device:canRestart() then
@ -487,30 +489,10 @@ dbg:guard(FileManagerMenu, 'setUpdateItemTable',
end) end)
function FileManagerMenu:exitOrRestart(callback) function FileManagerMenu:exitOrRestart(callback)
if SetDefaults.settings_changed then UIManager:close(self.menu_container)
UIManager:show(ConfirmBox:new{ self.ui:onClose()
text = _("You have unsaved default settings. Save them now?\nTap \"Cancel\" to return to KOReader."), if callback then
ok_text = _("Save"), callback()
ok_callback = function()
SetDefaults.settings_changed = false
SetDefaults:saveSettings()
self:exitOrRestart(callback)
end,
cancel_text = _("Don't save"),
cancel_callback = function()
SetDefaults.settings_changed = false
self:exitOrRestart(callback)
end,
other_buttons = {{
text = _("Cancel"),
}}
})
else
UIManager:close(self.menu_container)
self.ui:onClose()
if callback then
callback()
end
end end
end end

@ -1,6 +1,7 @@
local CenterContainer = require("ui/widget/container/centercontainer") local CenterContainer = require("ui/widget/container/centercontainer")
local ConfirmBox = require("ui/widget/confirmbox") local ConfirmBox = require("ui/widget/confirmbox")
local DataStorage = require("datastorage") local DataStorage = require("datastorage")
local Device = require("device")
local Font = require("ui/font") local Font = require("ui/font")
local InfoMessage = require("ui/widget/infomessage") local InfoMessage = require("ui/widget/infomessage")
local InputContainer = require("ui/widget/container/inputcontainer") local InputContainer = require("ui/widget/container/inputcontainer")
@ -10,6 +11,7 @@ local MultiInputDialog = require("ui/widget/multiinputdialog")
local UIManager = require("ui/uimanager") local UIManager = require("ui/uimanager")
local dump = require("dump") local dump = require("dump")
local isAndroid, android = pcall(require, "android") local isAndroid, android = pcall(require, "android")
local logger = require("logger")
local util = require("ffi/util") local util = require("ffi/util")
local _ = require("gettext") local _ = require("gettext")
local Screen = require("device").screen local Screen = require("device").screen
@ -34,7 +36,6 @@ local SetDefaults = InputContainer:new{
defaults_value = {}, defaults_value = {},
results = {}, results = {},
defaults_menu = {}, defaults_menu = {},
initialized = false,
changed = {}, changed = {},
settings_changed = false, settings_changed = false,
} }
@ -56,28 +57,24 @@ end
function SetDefaults:init() function SetDefaults:init()
self.results = {} self.results = {}
if not self.initialized then local defaults = {}
local defaults = {} local load_defaults = loadfile(defaults_path)
local load_defaults = loadfile(defaults_path) setfenv(load_defaults, defaults)
load_defaults()
local file = io.open(persistent_defaults_path, "r")
if file ~= nil then
file:close()
load_defaults = loadfile(persistent_defaults_path)
setfenv(load_defaults, defaults) setfenv(load_defaults, defaults)
load_defaults() load_defaults()
end
local file = io.open(persistent_defaults_path, "r") local idx = 1
if file ~= nil then for n, v in util.orderedPairs(defaults) do
file:close() self.defaults_name[idx] = n
load_defaults = loadfile(persistent_defaults_path) self.defaults_value[idx] = v
setfenv(load_defaults, defaults) idx = idx + 1
load_defaults()
end
local i = 1
for n, v in util.orderedPairs(defaults) do
self.defaults_name[i] = n
self.defaults_value[i] = v
i = i + 1
end
self.initialized = true
end end
local menu_container = CenterContainer:new{ local menu_container = CenterContainer:new{
@ -99,8 +96,15 @@ function SetDefaults:init()
show_parent = menu_container, show_parent = menu_container,
_manager = self, _manager = self,
} }
-- Prevent menu from closing when editing a value
function self.defaults_menu:onMenuSelect(item)
item.callback()
end
table.insert(menu_container, self.defaults_menu) table.insert(menu_container, self.defaults_menu)
self.defaults_menu.close_callback = function() self.defaults_menu.close_callback = function()
logger.dbg("Closing defaults menu")
self:saveBeforeExit()
UIManager:close(menu_container) UIManager:close(menu_container)
end end
@ -109,7 +113,6 @@ function SetDefaults:init()
enabled = true, enabled = true,
callback = function() callback = function()
self:close() self:close()
UIManager:show(menu_container)
end, end,
} }
@ -136,7 +139,6 @@ function SetDefaults:init()
self.results[i].text = self:build_setting(i) self.results[i].text = self:build_setting(i)
self:close() self:close()
self.defaults_menu:switchItemTable("Defaults", self.results, i) self.defaults_menu:switchItemTable("Defaults", self.results, i)
UIManager:show(menu_container)
end end
}, },
{ {
@ -150,7 +152,6 @@ function SetDefaults:init()
self.results[i].text = self:build_setting(i) self.results[i].text = self:build_setting(i)
self.defaults_menu:switchItemTable("Defaults", self.results, i) self.defaults_menu:switchItemTable("Defaults", self.results, i)
self:close() self:close()
UIManager:show(menu_container)
end end
}, },
}, },
@ -203,7 +204,6 @@ function SetDefaults:init()
self:close() self:close()
self.defaults_menu:switchItemTable("Defaults", self.results, i) self.defaults_menu:switchItemTable("Defaults", self.results, i)
UIManager:show(menu_container)
end, end,
}, },
}, },
@ -242,7 +242,6 @@ function SetDefaults:init()
end end
self:close() self:close()
self.defaults_menu:switchItemTable("Defaults", self.results, i) self.defaults_menu:switchItemTable("Defaults", self.results, i)
UIManager:show(menu_container)
end, end,
}, },
}, },
@ -356,4 +355,33 @@ function SetDefaults:saveSettings()
self.settings_changed = false self.settings_changed = false
end end
function SetDefaults:saveBeforeExit(callback)
local save_text = _("Save and quit")
if Device:canRestart() then
save_text = _("Save and restart")
end
if self.settings_changed then
UIManager:show(ConfirmBox:new{
text = _("KOReader needs to be restarted to apply the new default settings."),
ok_text = save_text,
ok_callback = function()
self.settings_changed = false
self:saveSettings()
if Device:canRestart() then
UIManager:restartKOReader()
else
UIManager:quit()
end
end,
cancel_text = _("Discard changes"),
cancel_callback = function()
logger.info("discard defaults")
pcall(dofile, defaults_path)
pcall(dofile, persistent_defaults_path)
self.settings_changed = false
end,
})
end
end
return SetDefaults return SetDefaults

Loading…
Cancel
Save