From 939538cc2518dbffd4e9fcc89b84256c6805468a Mon Sep 17 00:00:00 2001 From: Robert Date: Thu, 15 Aug 2019 14:49:15 +0200 Subject: [PATCH] [UX] Add gesture - poweroff and restart device (#5202) Also abstract canRestart, canReboot and CanPowerOff. --- frontend/apps/filemanager/filemanagermenu.lua | 2 +- .../apps/reader/modules/readergesture.lua | 22 ++++++++++++++++++- frontend/apps/reader/modules/readermenu.lua | 2 +- frontend/device/android/device.lua | 1 + frontend/device/cervantes/device.lua | 2 ++ frontend/device/generic/device.lua | 3 +++ frontend/device/kobo/device.lua | 2 ++ frontend/device/sony-prstux/device.lua | 2 ++ .../ui/elements/common_info_menu_table.lua | 4 +++- 9 files changed, 36 insertions(+), 4 deletions(-) diff --git a/frontend/apps/filemanager/filemanagermenu.lua b/frontend/apps/filemanager/filemanagermenu.lua index 19e1f1e41..1ccb6c96a 100644 --- a/frontend/apps/filemanager/filemanagermenu.lua +++ b/frontend/apps/filemanager/filemanagermenu.lua @@ -437,7 +437,7 @@ function FileManagerMenu:setUpdateItemTable() self:exitOrRestart(function() UIManager:restartKOReader() end) end, } - if Device:isAndroid() then + if not Device:canRestart() then self.menu_items.exit_menu = self.menu_items.exit self.menu_items.exit = nil self.menu_items.restart_koreader = nil diff --git a/frontend/apps/reader/modules/readergesture.lua b/frontend/apps/reader/modules/readergesture.lua index d506bb525..56dfe89a4 100644 --- a/frontend/apps/reader/modules/readergesture.lua +++ b/frontend/apps/reader/modules/readergesture.lua @@ -58,6 +58,8 @@ local action_strings = { suspend = _("Suspend"), exit = _("Exit KOReader"), restart = _("Restart KOReader"), + reboot = _("Reboot the device"), + poweroff = _("Power off"), show_menu = _("Show menu"), show_config_menu = _("Show bottom menu"), show_frontlight_dialog = _("Show frontlight dialog"), @@ -685,7 +687,9 @@ function ReaderGesture:buildMenu(ges, default) {"night_mode", true}, {"suspend", true}, {"exit", true}, - {"restart", not Device:isAndroid()}, + {"restart", Device:canRestart()}, + {"reboot", Device:canReboot()}, + {"poweroff", Device:canPowerOff()}, {"show_menu", true}, {"show_config_menu", not self.is_docless, true}, @@ -1415,6 +1419,22 @@ function ReaderGesture:gestureAction(action, ges) self.ui.menu:exitOrRestart() elseif action == "restart" then self.ui.menu:exitOrRestart(function() UIManager:restartKOReader() end) + elseif action == "reboot" then + UIManager:show(ConfirmBox:new{ + text = _("Are you sure you want to reboot the device?"), + ok_text = _("Reboot"), + ok_callback = function() + UIManager:nextTick(UIManager.reboot_action) + end, + }) + elseif action == "poweroff" then + UIManager:show(ConfirmBox:new{ + text = _("Are you sure you want to power off the device?"), + ok_text = _("Power off"), + ok_callback = function() + UIManager:nextTick(UIManager.poweroff_action) + end, + }) elseif action == "zoom_contentwidth" then self.ui:handleEvent(Event:new("SetZoomMode", "contentwidth")) elseif action == "zoom_contentheight" then diff --git a/frontend/apps/reader/modules/readermenu.lua b/frontend/apps/reader/modules/readermenu.lua index 4106937de..e068affdd 100644 --- a/frontend/apps/reader/modules/readermenu.lua +++ b/frontend/apps/reader/modules/readermenu.lua @@ -208,7 +208,7 @@ function ReaderMenu:setUpdateItemTable() self:exitOrRestart(function() UIManager:restartKOReader() end) end, } - if Device:isAndroid() then + if not Device:canRestart() then self.menu_items.exit_menu = self.menu_items.exit self.menu_items.exit = nil self.menu_items.restart_koreader = nil diff --git a/frontend/device/android/device.lua b/frontend/device/android/device.lua index 67f24ac85..f1a40dbe2 100644 --- a/frontend/device/android/device.lua +++ b/frontend/device/android/device.lua @@ -66,6 +66,7 @@ local Device = Generic:new{ hasEinkScreen = function() return android.isEink() end, hasColorScreen = function() return not android.isEink() end, hasFrontlight = yes, + canRestart = no, firmware_rev = android.app.activity.sdkVersion, display_dpi = android.lib.AConfiguration_getDensity(android.app.config), hasClipboard = yes, diff --git a/frontend/device/cervantes/device.lua b/frontend/device/cervantes/device.lua index 3228bd387..29b28daff 100644 --- a/frontend/device/cervantes/device.lua +++ b/frontend/device/cervantes/device.lua @@ -41,6 +41,8 @@ local Cervantes = Generic:new{ hasOTAUpdates = yes, hasKeys = yes, hasWifiManager = yes, + canReboot = yes, + canPowerOff = yes, -- do we support usb mass storage? canToggleMassStorage = function() return isMassStorageSupported() end, diff --git a/frontend/device/generic/device.lua b/frontend/device/generic/device.lua index 728b4961f..a5647733f 100644 --- a/frontend/device/generic/device.lua +++ b/frontend/device/generic/device.lua @@ -53,6 +53,9 @@ local Device = { isSonyPRSTUX = no, isSDL = no, isEmulator = no, + canRestart = yes, + canReboot = no, + canPowerOff = no, -- some devices have part of their screen covered by the bezel viewport = nil, diff --git a/frontend/device/kobo/device.lua b/frontend/device/kobo/device.lua index 249ce266f..af45228f1 100644 --- a/frontend/device/kobo/device.lua +++ b/frontend/device/kobo/device.lua @@ -25,6 +25,8 @@ local Kobo = Generic:new{ isTouchDevice = yes, -- all of them are hasOTAUpdates = yes, hasWifiManager = yes, + canReboot = yes, + canPowerOff = yes, -- most Kobos have X/Y switched for the touch screen touch_switch_xy = true, diff --git a/frontend/device/sony-prstux/device.lua b/frontend/device/sony-prstux/device.lua index 2022a1c67..67a62d02a 100644 --- a/frontend/device/sony-prstux/device.lua +++ b/frontend/device/sony-prstux/device.lua @@ -12,6 +12,8 @@ local SonyPRSTUX = Generic:new{ hasKeys = yes, hasOTAUpdates = yes, hasWifiManager = yes, + canReboot = yes, + canPowerOff = yes, } diff --git a/frontend/ui/elements/common_info_menu_table.lua b/frontend/ui/elements/common_info_menu_table.lua index fb0f955c1..a7d4b68e5 100644 --- a/frontend/ui/elements/common_info_menu_table.lua +++ b/frontend/ui/elements/common_info_menu_table.lua @@ -74,7 +74,7 @@ if Device:isCervantes() or Device:isKindle() or Device:isKobo() then end, } end -if Device:isCervantes() or Device:isKobo() or Device:isSonyPRSTUX() then +if Device:canReboot() then common_info.reboot = { text = _("Reboot the device"), keep_menu_open = true, @@ -88,6 +88,8 @@ if Device:isCervantes() or Device:isKobo() or Device:isSonyPRSTUX() then }) end } +end +if Device:canPowerOff() then common_info.poweroff = { text = _("Power off"), keep_menu_open = true,