diff --git a/modules/firmware_apps/app_store.py b/modules/firmware_apps/app_store.py index 70e083f..54442cb 100644 --- a/modules/firmware_apps/app_store.py +++ b/modules/firmware_apps/app_store.py @@ -56,6 +56,7 @@ def __init__(self): self.app_store_index = [] self.to_install_app = None self.tarball = None + self.wait_one_cycle = False def cleanup_ui_widgets(self): widgets = [ @@ -69,7 +70,12 @@ def cleanup_ui_widgets(self): for widget in widgets: if widget: widget._cleanup() - widget = None + + self.menu = None + self.available_menu = None + self.installed_menu = None + self.update_menu = None + self.codeinstall = None def get_index(self): if not wifi.status(): @@ -86,8 +92,13 @@ def background_update(self, delta): return self.update_state("index_received") if self.to_install_app: - self.install_app(self.to_install_app) - self.to_install_app = None + # We wait one cycle after background_update is called to ensure the + # installation screen is drawn + if self.wait_one_cycle: + self.install_app(self.to_install_app) + self.to_install_app = None + self.wait_one_cycle = False + self.wait_one_cycle = True def handle_index(self): if not self.response: @@ -134,8 +145,7 @@ def prepare_available_menu(self): def on_select(_, i): self.to_install_app = self.app_store_index[i] self.update_state("installing_app") - if self.available_menu: - self.available_menu._cleanup() + self.cleanup_ui_widgets() def exit_available_menu(): self.cleanup_ui_widgets() @@ -152,11 +162,12 @@ def exit_available_menu(): def prepare_main_menu(self): def on_cancel(): + self.cleanup_ui_widgets() self.minimise() def on_select(value, idx): + self.cleanup_ui_widgets() if value == CODE_INSTALL: - self.cleanup_ui_widgets() self.codeinstall = CodeInstall( install_handler=lambda id: self.handle_code_input(id), app=self ) diff --git a/modules/system/eventbus.py b/modules/system/eventbus.py index 0d848be..f9a94e3 100644 --- a/modules/system/eventbus.py +++ b/modules/system/eventbus.py @@ -40,10 +40,16 @@ def remove(self, event_type, event_handler, app): if app in self.handlers: if event_type in self.handlers[app]: if event_handler in self.handlers[app][event_type]: + print( + f"Removed event handler for {event_type.__name__}: {app.__class__.__name__} - {event_handler.__name__}" + ) self.handlers[app][event_type].remove(event_handler) if app in self.async_handlers: if event_type in self.async_handlers[app]: if event_handler in self.async_handlers[app][event_type]: + print( + f"Removed event handler for {event_type.__name__}: {app.__class__.__name__} - {event_handler.__name__}" + ) self.async_handlers[app][event_type].remove(event_handler) def deregister(self, app):