From 7f53ddacbe568e9530d1a4792522b436a7c1b8ed Mon Sep 17 00:00:00 2001 From: chrox Date: Sun, 21 Apr 2013 16:54:59 +0800 Subject: [PATCH] add activity indicator when configuring in reflow mode For now pillow activityIndicator is used to draw animated waiting icon at the upper left corner of the screen. So pillow service should be enabled to use this feature, but eventually we should implement an activity indicator that is independent of native system. --- .../ui/reader/readeractivityindicator.lua | 43 +++++++++++++++++++ frontend/ui/reader/readerview.lua | 2 + frontend/ui/readerui.lua | 9 ++++ frontend/ui/widget/config.lua | 1 + 4 files changed, 55 insertions(+) create mode 100644 frontend/ui/reader/readeractivityindicator.lua diff --git a/frontend/ui/reader/readeractivityindicator.lua b/frontend/ui/reader/readeractivityindicator.lua new file mode 100644 index 000000000..7fbada16b --- /dev/null +++ b/frontend/ui/reader/readeractivityindicator.lua @@ -0,0 +1,43 @@ +require "ui/device" + +ReaderActivityIndicator = EventListener:new{} + +function ReaderActivityIndicator:init() + local dev_mod = Device:getModel() + if dev_mod == "KindlePaperWhite" or dev_mod == "KindleTouch" then + require "liblipclua" + 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 diff --git a/frontend/ui/reader/readerview.lua b/frontend/ui/reader/readerview.lua index 54958faa2..641e56108 100644 --- a/frontend/ui/reader/readerview.lua +++ b/frontend/ui/reader/readerview.lua @@ -109,6 +109,8 @@ function ReaderView:paintTo(bb, x, y) if self.flipping_visible then self.flipping:paintTo(bb, x, y) end + -- stop activity indicator + self.ui:handleEvent(Event:new("StopActivityIndicator")) end function ReaderView:drawPageBackground(bb, x, y) diff --git a/frontend/ui/readerui.lua b/frontend/ui/readerui.lua index 05b4ee66f..a041893fa 100644 --- a/frontend/ui/readerui.lua +++ b/frontend/ui/readerui.lua @@ -17,6 +17,7 @@ require "ui/reader/readerhinting" require "ui/reader/readerscreenshot" require "ui/reader/readerfrontlight" require "ui/reader/readerhyphenation" +require "ui/reader/readeractivityindicator" --[[ This is an abstraction for a reader interface @@ -209,6 +210,14 @@ function ReaderUI:init() document = self.document, } table.insert(self, coptlistener) + -- activity indicator + local activity_listener = ReaderActivityIndicator:new{ + dialog = self.dialog, + view = self[1], + ui = self, + document = self.document, + } + table.insert(self, activity_listener) end --DEBUG(self.doc_settings) -- we only read settings after all the widgets are initialized diff --git a/frontend/ui/widget/config.lua b/frontend/ui/widget/config.lua index 415181c68..64c966159 100644 --- a/frontend/ui/widget/config.lua +++ b/frontend/ui/widget/config.lua @@ -473,6 +473,7 @@ end function ConfigDialog:onConfigChoice(option_name, option_value) --DEBUG("config option value", option_name, option_value) self.configurable[option_name] = option_value + self.ui:handleEvent(Event:new("StartActivityIndicator")) end function ConfigDialog:onConfigEvent(option_event, option_arg)