diff --git a/src/kolibri_android/main_activity/activity.py b/src/kolibri_android/main_activity/activity.py index 3b4b0772..b0f2a726 100644 --- a/src/kolibri_android/main_activity/activity.py +++ b/src/kolibri_android/main_activity/activity.py @@ -104,7 +104,7 @@ def on_activity_stopped(self, activity): # run after thsi one, so we need to keep track of the webview's # URL before switching to the loading screen. self._last_kolibri_path = self._get_current_kolibri_path() - self._kolibri_bus.transition("IDLE") + self._kolibri_bus.stop_services() elif self._kolibri_bus.state != "IDLE": logging.warning( f"Kolibri is unable to stop because its state is '{self._kolibri_bus.state}" @@ -116,7 +116,9 @@ def on_activity_resumed(self, activity): if self._kolibri_bus is None: return - if self._kolibri_bus.can_transition("START"): + if self._kolibri_bus.state == "START": + self._kolibri_bus.start_services() + elif self._kolibri_bus.can_transition("START"): self._last_kolibri_path = None self._kolibri_bus.transition("START") elif self._kolibri_bus.state != "START": diff --git a/src/kolibri_android/main_activity/kolibri_bus.py b/src/kolibri_android/main_activity/kolibri_bus.py index 98d5be5c..94f25879 100644 --- a/src/kolibri_android/main_activity/kolibri_bus.py +++ b/src/kolibri_android/main_activity/kolibri_bus.py @@ -12,11 +12,37 @@ from magicbus.plugins import SimplePlugin +class PausableServicesPlugin(ServicesPlugin): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._started = False + self._stopped = False + + def START(self): + if not self._started: + logging.debug("PausableServicesPlugin full start'") + super().START() + self._started = True + elif self._stopped: + logging.debug("PausableServicesPlugin partial start'") + from kolibri.core.tasks.main import initialize_workers + + self.worker = initialize_workers() + self._stopped = False + else: + logging.debug("PausableServicesPlugin skip start'") + + def STOP(self): + super().STOP() + self._stopped = True + + class KolibriAppProcessBus(BaseKolibriProcessBus): def __init__(self, *args, enable_zeroconf=True, **kwargs): super(KolibriAppProcessBus, self).__init__(*args, **kwargs) - ServicesPlugin(self).subscribe() + self._services = PausableServicesPlugin(self) + self._services.subscribe() if enable_zeroconf: ZeroConfPlugin(self, self.port).subscribe() @@ -49,6 +75,12 @@ def is_kolibri_url(self, url): return False + def stop_services(self): + self._services.STOP() + + def start_services(self): + self._services.START() + def can_transition(self, to_state: str) -> bool: return (self.state, to_state) in self.transitions