-- Start with a empty stub, because 99.9% of users won't actually need this. local ReaderActivityIndicator = {} function ReaderActivityIndicator:isStub() return true end function ReaderActivityIndicator:init() end function ReaderActivityIndicator:onStartActivityIndicator() end function ReaderActivityIndicator:onStopActivityIndicator() end function ReaderActivityIndicator:coda() end -- Now, if we're on Kindle, and we haven't actually murdered Pillow, see what we can do... local Device = require("device") if Device:isKindle() then if os.getenv("PILLOW_HARD_DISABLED") or os.getenv("PILLOW_SOFT_DISABLED") then -- Pillow is dead, bye! return ReaderActivityIndicator end if not Device:isTouchDevice() then -- No lipc, bye! return ReaderActivityIndicator end else -- Not on Kindle, bye! return ReaderActivityIndicator end -- Okay, if we're here, it's basically because we're running on a Kindle on FW 5.x under KPV local EventListener = require("ui/widget/eventlistener") local util = require("ffi/util") -- lipc ReaderActivityIndicator = EventListener:new{} function ReaderActivityIndicator:isStub() return false end function ReaderActivityIndicator:init() local haslipc, lipc = pcall(require, "liblipclua") if haslipc then self.lipc_handle = lipc.init("com.github.koreader.activityindicator") end end function ReaderActivityIndicator:onStartActivityIndicator() if self.lipc_handle then -- check if activity indicator is needed if self.document.configurable.text_wrap == 1 then -- start indicator depends on pillow being enabled self.lipc_handle:set_string_property( "com.lab126.pillow", "activityIndicator", '{"activityIndicator":{ \ "action":"start","timeout":10000, \ "clientId":"com.github.koreader.activityindicator", \ "priority":true}}') self.indicator_started = true end end return true end function ReaderActivityIndicator:onStopActivityIndicator() if self.lipc_handle and self.indicator_started then -- stop indicator depends on pillow being enabled self.lipc_handle:set_string_property( "com.lab126.pillow", "activityIndicator", '{"activityIndicator":{ \ "action":"stop","timeout":10000, \ "clientId":"com.github.koreader.activityindicator", \ "priority":true}}') self.indicator_started = false util.usleep(1000000) end return true end function ReaderActivityIndicator:coda() if self.lipc_handle then self.lipc_handle:close() end end return ReaderActivityIndicator