diff --git a/src/kivy_garden/zbarcam/zbarcam.py b/src/kivy_garden/zbarcam/zbarcam.py index 67d57e4..c443259 100644 --- a/src/kivy_garden/zbarcam/zbarcam.py +++ b/src/kivy_garden/zbarcam/zbarcam.py @@ -1,3 +1,4 @@ +import sys import os from collections import namedtuple @@ -207,6 +208,37 @@ def start(self): self.xcamera.play = True def stop(self): + """ + Stop xcamera, release device and unload + zbarcam.kv and xcamera.kv + """ self.xcamera.play = False + + # release device and unload kivy files + # in non android devices + if platform != "android": + self.xcamera._camera._device.release() + self._unload() + + # release device in android devices if platform == "android": self.xcamera._camera._release_camera() + + def _unload(self): + """ + Unload `zbarcam.kv` and `xcamera.kv` files + """ + if ZBarCam.kv_loaded: + # unload zbarcam.kv + zbar_kv_path = os.path.join(MODULE_DIRECTORY, 'zbarcam.kv') + Builder.unload_file(zbar_kv_path) + + # unload xcamera.kv + module_path = sys.modules['kivy_garden.xcamera'].__file__ + module_directory = os.path.dirname(module_path) + xcam_kv_path = os.path.join(module_directory, 'xcamera.kv') + Builder.unload_file(xcam_kv_path) + + # sets kv_loaded + ZBarcam.kv_loaded = False +