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

@ -1,6 +1,7 @@
local CenterContainer = require("ui/widget/container/centercontainer")
local ConfirmBox = require("ui/widget/confirmbox")
local DataStorage = require("datastorage")
local Device = require("device")
local Font = require("ui/font")
local InfoMessage = require("ui/widget/infomessage")
local InputContainer = require("ui/widget/container/inputcontainer")
@ -10,6 +11,7 @@ local MultiInputDialog = require("ui/widget/multiinputdialog")
local UIManager = require("ui/uimanager")
local dump = require("dump")
local isAndroid, android = pcall(require, "android")
local logger = require("logger")
local util = require("ffi/util")
local _ = require("gettext")
local Screen = require("device").screen
@ -34,7 +36,6 @@ local SetDefaults = InputContainer:new{
defaults_value = {},
results = {},
defaults_menu = {},
initialized = false,
changed = {},
settings_changed = false,
}
@ -56,28 +57,24 @@ end
function SetDefaults:init()
self.results = {}
if not self.initialized then
local defaults = {}
local load_defaults = loadfile(defaults_path)
local defaults = {}
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)
load_defaults()
end
local file = io.open(persistent_defaults_path, "r")
if file ~= nil then
file:close()
load_defaults = loadfile(persistent_defaults_path)
setfenv(load_defaults, defaults)
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
local idx = 1
for n, v in util.orderedPairs(defaults) do
self.defaults_name[idx] = n
self.defaults_value[idx] = v
idx = idx + 1
end
local menu_container = CenterContainer:new{
@ -99,8 +96,15 @@ function SetDefaults:init()
show_parent = menu_container,
_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)
self.defaults_menu.close_callback = function()
logger.dbg("Closing defaults menu")
self:saveBeforeExit()
UIManager:close(menu_container)
end
@ -109,7 +113,6 @@ function SetDefaults:init()
enabled = true,
callback = function()
self:close()
UIManager:show(menu_container)
end,
}
@ -136,7 +139,6 @@ function SetDefaults:init()
self.results[i].text = self:build_setting(i)
self:close()
self.defaults_menu:switchItemTable("Defaults", self.results, i)
UIManager:show(menu_container)
end
},
{
@ -150,7 +152,6 @@ function SetDefaults:init()
self.results[i].text = self:build_setting(i)
self.defaults_menu:switchItemTable("Defaults", self.results, i)
self:close()
UIManager:show(menu_container)
end
},
},
@ -203,7 +204,6 @@ function SetDefaults:init()
self:close()
self.defaults_menu:switchItemTable("Defaults", self.results, i)
UIManager:show(menu_container)
end,
},
},
@ -242,7 +242,6 @@ function SetDefaults:init()
end
self:close()
self.defaults_menu:switchItemTable("Defaults", self.results, i)
UIManager:show(menu_container)
end,
},
},
@ -356,4 +355,33 @@ function SetDefaults:saveSettings()
self.settings_changed = false
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

Loading…
Cancel
Save