def select_category(self, button): if self.provider: self.provider.stop() self.provider = None category, subcategory = button.text.split('-', 1) if category == 'sensor': try: self.provider = SensorListener(subcategory, self.on_sensor) except SensorNotFound: self.error('Sensor {} not available on this device'.format( subcategory)) return else: self.provider = GpsListener(self.on_gps) self.root.maininit = False self.root.maincontent.clear_widgets() self.root.maincontent.add_widget( Label(text='Waiting informations from the sensor')) self.provider.start() # just for a better "ui" button.state = 'down'
class AndroidDemoApp(App): categories = ListProperty() def on_gps(self, provider, eventname, *args): if provider is not self.provider: return print 'on_gps()', provider, eventname, args if eventname == 'provider-disabled': self.gps_values[1] = args[0] self.trigger_gps_update_values() elif eventname == 'location': location = args[0] self.gps_values[2:] = [ location.getLatitude(), location.getLongitude() ] self.trigger_gps_update_values() def gps_update_values(self, *args): self.root.maincontent.clear_widgets() content = self.root.maincontent if not self.root.maininit: for x in xrange(4): content.add_widget(Label()) values = self.gps_values content.children[0].text = 'Last status: {}'.format(values[0]) content.children[1].text = 'Provider disabled: {}'.format(values[1]) content.children[2].text = 'Latitude: {}'.format(values[2]) content.children[3].text = 'Longitude: {}'.format(values[3]) def on_sensor(self, provider, eventname, *args): if provider is not self.provider: return if eventname == 'accuracy-changed': sensor, accuracy = args[:2] elif eventname == 'sensor-changed': event = args[0] self.sensor_values = event.values self.trigger_sensor_update_values() def sensor_update_values(self, *args): values = self.sensor_values if not self.root.maininit: self.sensor_create_ui(values) self.sensor_fill_ui(values) def sensor_create_ui(self, values): self.root.maincontent.clear_widgets() for index in xrange(len(values)): self.root.maincontent.add_widget(NumberSlider()) self.root.maininit = True def sensor_fill_ui(self, values): for index, value in enumerate(values): self.root.maincontent.children[index].value = value def error(self, msg): self.root.maininit = False self.root.maincontent.clear_widgets() lbl = Label(text=str(msg), text_size=(sp(100), None)) self.root.maincontent.add_widget(lbl) def select_category(self, button): if self.provider: self.provider.stop() self.provider = None category, subcategory = button.text.split('-', 1) if category == 'sensor': try: self.provider = SensorListener(subcategory, self.on_sensor) except SensorNotFound: self.error('Sensor {} not available on this device'.format( subcategory)) return else: self.provider = GpsListener(self.on_gps) self.root.maininit = False self.root.maincontent.clear_widgets() self.root.maincontent.add_widget( Label(text='Waiting informations from the sensor')) self.provider.start() # just for a better "ui" button.state = 'down' def on_stop(self): if self.provider: self.provider.stop() super(AndroidDemoApp, self).on_stop() def on_pause(self): if self.provider: self.provider.stop() return True def on_resume(self): if self.provider: self.provider.start() def build(self): self.provider = None self.sensors_values = [] self.gps_values = ['', '', 0, 0] self.trigger_sensor_update_values = \ Clock.create_trigger(self.sensor_update_values, 0) self.trigger_gps_update_values = \ Clock.create_trigger(self.gps_update_values, 0) # search categories self.categories = ['gps-location'] for key in sensortypes: self.categories.append('sensor-{}'.format(key)) # create main ui root = MainUI() # fill the dropdown with all the categories for cat in self.categories: btn = ToggleButton(text=cat, size_hint_y=None, height='44sp', group='sensors') btn.bind(on_release=self.select_category) root.dropdown.add_widget(btn) return root
class AndroidDemoApp(App): categories = ListProperty() def on_gps(self, provider, eventname, *args): if provider is not self.provider: return print 'on_gps()', provider, eventname, args if eventname == 'provider-disabled': self.gps_values[1] = args[0] self.trigger_gps_update_values() elif eventname == 'location': location = args[0] self.gps_values[2:] = [location.getLatitude(), location.getLongitude()] self.trigger_gps_update_values() def gps_update_values(self, *args): self.root.maincontent.clear_widgets() content = self.root.maincontent if not self.root.maininit: for x in xrange(4): content.add_widget(Label()) values = self.gps_values content.children[0].text = 'Last status: {}'.format(values[0]) content.children[1].text = 'Provider disabled: {}'.format(values[1]) content.children[2].text = 'Latitude: {}'.format(values[2]) content.children[3].text = 'Longitude: {}'.format(values[3]) def on_sensor(self, provider, eventname, *args): if provider is not self.provider: return if eventname == 'accuracy-changed': sensor, accuracy = args[:2] elif eventname == 'sensor-changed': event = args[0] self.sensor_values = event.values self.trigger_sensor_update_values() def sensor_update_values(self, *args): values = self.sensor_values if not self.root.maininit: self.sensor_create_ui(values) self.sensor_fill_ui(values) def sensor_create_ui(self, values): self.root.maincontent.clear_widgets() for index in xrange(len(values)): self.root.maincontent.add_widget(NumberSlider()) self.root.maininit = True def sensor_fill_ui(self, values): for index, value in enumerate(values): self.root.maincontent.children[index].value = value def error(self, msg): self.root.maininit = False self.root.maincontent.clear_widgets() lbl = Label(text=str(msg), text_size=(sp(100), None)) self.root.maincontent.add_widget(lbl) def select_category(self, button): if self.provider: self.provider.stop() self.provider = None category, subcategory = button.text.split('-', 1) if category == 'sensor': try: self.provider = SensorListener(subcategory, self.on_sensor) except SensorNotFound: self.error('Sensor {} not available on this device'.format( subcategory)) return else: self.provider = GpsListener(self.on_gps) self.root.maininit = False self.root.maincontent.clear_widgets() self.root.maincontent.add_widget( Label(text='Waiting informations from the sensor')) self.provider.start() # just for a better "ui" button.state = 'down' def on_stop(self): if self.provider: self.provider.stop() super(AndroidDemoApp, self).on_stop() def on_pause(self): if self.provider: self.provider.stop() return True def on_resume(self): if self.provider: self.provider.start() def build(self): self.provider = None self.sensors_values = [] self.gps_values = ['', '', 0, 0] self.trigger_sensor_update_values = \ Clock.create_trigger(self.sensor_update_values, 0) self.trigger_gps_update_values = \ Clock.create_trigger(self.gps_update_values, 0) # search categories self.categories = ['gps-location'] for key in sensortypes: self.categories.append('sensor-{}'.format(key)) # create main ui root = MainUI() # fill the dropdown with all the categories for cat in self.categories: btn = ToggleButton(text=cat, size_hint_y=None, height='44sp', group='sensors') btn.bind(on_release=self.select_category) root.dropdown.add_widget(btn) return root