diff --git a/buildozer.spec b/buildozer.spec index 94b3694..e3c30c2 100644 --- a/buildozer.spec +++ b/buildozer.spec @@ -85,7 +85,7 @@ fullscreen = 0 #android.presplash_color = #FFFFFF # (list) Permissions -android.permissions = INTERNET,ACCESS_FINE_LOCATION,ACCESS_COARSE_LOCATION,WAKE_LOCK +android.permissions = INTERNET,ACCESS_FINE_LOCATION,ACCESS_COARSE_LOCATION,WAKE_LOCK,READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE # (int) Target Android API, should be as high as possible. #android.api = 27 diff --git a/flockompass.kv b/flockompass.kv index 7c2f730..f09c374 100644 --- a/flockompass.kv +++ b/flockompass.kv @@ -166,7 +166,7 @@ max: 0.99 step: 0.05 orientation: 'horizontal' - value: 0.88 + value: app.session_data['settings_smoothing'] on_value: app.set_smoothing() BackgroundLabel: @@ -182,7 +182,7 @@ max: 0.9 step: 0.05 orientation: 'horizontal' - value: 0.777 + value: app.session_data['settings_compass_update'] on_value: app.set_compass_update() BackgroundLabel: diff --git a/main.py b/main.py index a56753f..efc691c 100644 --- a/main.py +++ b/main.py @@ -15,6 +15,8 @@ from math import atan2, sin, cos, degrees, floor from geopy.distance import geodesic +from os import path +import pickle class IconButton(ButtonBehavior, Image): pass @@ -63,13 +65,42 @@ class FlockompassApp(App): def dump(self, dt): print(dt, self.gps_data, self.session_data) + def read_settings(self): + app_folder = os.path.dirname(os.path.abspath(__file__)) + pickle_path = path.join(app_folder, 'settings.pickle') + + if path.isfile(pickle_path): + with open(pickle_path, 'rb') as f: + settings = pickle.load(f) + else: + settings = {'settings_smoothing': 0.88, + 'settings_compass_update': 0.777 + } + with open(pickle_path, 'wb') as f: + pickle.dump(settings, f) + + self.session_data.update(settings) + + def save_settings(self): + app_folder = os.path.dirname(os.path.abspath(__file__)) + pickle_path = path.join(app_folder, 'settings.pickle') + + settings = {k: self.session_data[k] + for k in self.session_data + if k.startswith('settings_')} + + with open(pickle_path, 'wb') as f: + pickle.dump(settings, f) + def set_smoothing(self): - self.session_data['smoothing'] = self.ss.ids.slider_smoothing.value + self.session_data['settings_smoothing'] = self.ss.ids.slider_smoothing.value + self.save_settings() def set_compass_update(self): - self.session_data['compass_update'] = self.ss.ids.slider_compass_update.value + self.session_data['settings_compass_update'] = self.ss.ids.slider_compass_update.value self.compass_disable() self.compass_enable() + self.save_settings() def set_destination(self): self.compass_enable() @@ -139,7 +170,7 @@ class FlockompassApp(App): if self.cs.facade.field != (None, None, None): x, y, z = self.cs.facade.field - smoothingFactor = self.session_data.get('smoothing', 0.88) + smoothingFactor = self.session_data.get('settings_smoothing', 0.88) angle = atan2(y, x) self.last_angle = smoothingFactor * self.last_angle + (1 - smoothingFactor) * angle @@ -182,7 +213,7 @@ class FlockompassApp(App): def compass_enable(self): self.cs.facade.enable() Clock.schedule_interval(self.get_field, - 1.0 - self.session_data.get('compass_update', 0.777)) + 1.0 - self.session_data.get('settings_compass_update', 0.777)) def compass_disable(self): self.cs.facade.disable() @@ -239,4 +270,5 @@ class FlockompassApp(App): if __name__ == '__main__': app = FlockompassApp() + app.read_settings() app.run()