Backend code for sensitivity
[pedometerwidget] / src / usr / lib / hildon-desktop / pedometer_widget_home.py
index 5c9412d..1cdde5d 100644 (file)
@@ -37,6 +37,7 @@ MODE = PATH + "/mode"
 HEIGHT = PATH + "/height"
 WEIGHT = PATH + "/weight"
 UNIT = PATH + "/unit"
+SENSITIVITY = PATH + "/sensitivity"
 ASPECT = PATH + "/aspect"
 SECONDVIEW = PATH + "/secondview"
 GRAPHVIEW = PATH + "/graphview"
@@ -64,6 +65,8 @@ class Singleton(object):
 class PedoIntervalCounter(Singleton):
     MIN_THRESHOLD = 500
     MIN_TIME_STEPS = 0.5
+    sensitivity = 100
+    mode = 0
     x = []
     y = []
     z = []
@@ -81,13 +84,17 @@ class PedoIntervalCounter(Singleton):
         #runnig, higher threshold to prevent fake steps
         self.mode = mode
         if mode == 1:
-            self.MIN_THRESHOLD = 650
+            self.MIN_THRESHOLD = 650.0 * (200 - self.sensitivity) / 100
             self.MIN_TIME_STEPS = 0.35
         #walking
         else:
-            self.MIN_THRESHOLD = 500
+            self.MIN_THRESHOLD = 500.0 * (200 - self.sensitivity) / 100
             self.MIN_TIME_STEPS = 0.5
 
+    def set_sensitivity(self, value):
+        self.sensitivity = value
+        self.set_mode(self.mode)
+
     def calc_mean(self, vals):
         sum = 0
         for i in vals:
@@ -544,6 +551,13 @@ class PedoController(Singleton):
     def get_weight(self):
         return self.weight
 
+    def set_sensitivity(self, value):
+        self.sensitivity = value
+        self.pedometerInterval.set_sensitivity(value)
+
+    def get_sensitivity(self):
+        return self.sensitivity
+
     def set_second_view(self, second_view):
         self.second_view = second_view
         self.load_values()
@@ -1097,6 +1111,7 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem):
     weight = 70
     unit = 0
     aspect = 0
+    sensitivity = 100
     second_view = 0
     graph_view = 0
     no_idle_time = False
@@ -1114,6 +1129,7 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem):
         self.height = self.client.get_int(HEIGHT)
         self.weight = self.client.get_int(WEIGHT)
         self.unit = self.client.get_int(UNIT)
+        self.sensitivity = self.client.get_int(SENSITIVITY)
         self.aspect = self.client.get_int(ASPECT)
         self.second_view = self.client.get_int(SECONDVIEW)
         self.graph_view = self.client.get_int(GRAPHVIEW)
@@ -1125,6 +1141,7 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem):
         self.controller.set_weight(self.weight)
         self.controller.set_mode(self.mode)
         self.controller.set_unit(self.unit)
+        self.controller.set_sensitivity(self.sensitivity)
         self.controller.set_second_view(self.second_view)
         self.controller.set_callback_ui(self.update_values)
         self.controller.set_no_idle_time(self.no_idle_time)
@@ -1388,15 +1405,26 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem):
             widget.controller.set_mode(widget.mode)
 
         def selectorH_changed(selector, data):
-            widget.height = selectorH.get_active(0)
+            widget.height = selector.get_active(0)
             widget.client.set_int(HEIGHT, widget.height)
             widget.controller.set_height(widget.height)
 
         def selectorUnit_changed(selector, data):
-            widget.unit = selectorUnit.get_active(0)
+            widget.unit = selector.get_active(0)
             widget.client.set_int(UNIT, widget.unit)
             widget.controller.set_unit(widget.unit)
 
+            if widget.unit == 0:
+                self.heightPicker.set_active(widget.height)
+                self.heightPicker.show()
+                self.heightPicker_English.hide()
+            else:
+                self.heightPicker_English.set_active(widget.height)
+                self.heightPicker_English.show()
+                self.heightPicker.hide()
+
+            update_weight_button()
+
         def selectorUI_changed(selector, data):
             widget.aspect = selectorUI.get_active(0)
             widget.client.set_int(ASPECT, widget.aspect)
@@ -1411,6 +1439,10 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem):
             widget.client.set_bool(NOIDLETIME, widget.no_idle_time)
             widget.controller.set_no_idle_time(widget.no_idle_time)
 
+        def update_weight_button():
+            weightButton.set_value(str(self.controller.get_weight()) + \
+                                           " " + self.controller.get_str_weight_unit() )
+
         def weight_dialog(button):
             dialog = gtk.Dialog("Weight", self.dialog)
             dialog.add_button("OK", gtk.RESPONSE_OK)
@@ -1438,13 +1470,42 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem):
                         raise ValueError
                     self.controller.set_weight(value)
                     self.client.set_int(WEIGHT, value)
-                    weightButton.set_value(str(self.controller.get_weight()) + \
-                                           " " + self.controller.get_str_weight_unit() )
+                    update_weight_button()
                     break
                 except:
                     hildon.hildon_banner_show_information(self, "None", "Invalid weight")
             dialog.destroy()
 
+        def sensitivity_dialog(button):
+            def seekbar_changed(seekbar):
+                label.set_text(str(seekbar.get_position()) + " %")
+
+            dialog = gtk.Dialog("Sensitivity", self.dialog)
+            dialog.add_button("OK", gtk.RESPONSE_OK)
+            seekbar = hildon.Seekbar()
+            seekbar.set_size_request(400, -1)
+            seekbar.set_total_time(200)
+            seekbar.set_position(self.controller.get_sensitivity())
+            seekbar.connect("value-changed", seekbar_changed)
+
+            hbox = gtk.HBox()
+            hbox.add(seekbar)
+            label = gtk.Label(str(self.controller.get_sensitivity()) + " %")
+            label.set_size_request(30, -1)
+            hbox.add(label)
+
+            dialog.vbox.add(hbox)
+            dialog.show_all()
+
+            if dialog.run() == gtk.RESPONSE_OK:
+                value = seekbar.get_position()
+                self.client.set_int(SENSITIVITY, value)
+                self.controller.set_sensitivity(value)
+                widget.sensitivity = value
+                button.set_value(str(self.controller.get_sensitivity()) + " %")
+
+            dialog.destroy()
+
         dialog = gtk.Dialog()
         dialog.set_title("Settings")
         dialog.add_button("OK", gtk.RESPONSE_OK)
@@ -1485,12 +1546,30 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem):
         selectorH.append_text(" > 1.95 m")
         selectorH.connect("changed", selectorH_changed)
 
+        selectorH_English = hildon.TouchSelector(text=True)
+        selectorH_English.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE)
+        selectorH_English.append_text("< 5 ft")
+        selectorH_English.append_text("5 - 5.5 ft")
+        selectorH_English.append_text("5.5 - 6 ft")
+        selectorH_English.append_text("6 - 6.5 ft")
+        selectorH_English.append_text("> 6.5 ft")
+        selectorH_English.connect("changed", selectorH_changed)
+
         heightPicker = hildon.PickerButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
         heightPicker.set_alignment(0.0, 0.5, 1.0, 1.0)
         heightPicker.set_title("Height")
         heightPicker.set_selector(selectorH)
         heightPicker.set_active(widget.height)
 
+        heightPicker_English = hildon.PickerButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
+        heightPicker_English.set_alignment(0.0, 0.5, 1.0, 1.0)
+        heightPicker_English.set_title("Height")
+        heightPicker_English.set_selector(selectorH_English)
+        heightPicker_English.set_active(widget.height)
+
+        self.heightPicker = heightPicker
+        self.heightPicker_English = heightPicker_English
+
         weightButton = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
         weightButton.set_title("Weight")
         weightButton.set_alignment(0, 0.8, 1, 1)
@@ -1524,6 +1603,12 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem):
         UIPicker.set_selector(selectorUI)
         UIPicker.set_active(widget.aspect)
 
+        sensitivityButton = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
+        sensitivityButton.set_title("Sensitivity")
+        sensitivityButton.set_alignment(0, 0.8, 1, 1)
+        sensitivityButton.set_value(str(self.controller.get_sensitivity()) + " %")
+        sensitivityButton.connect("clicked", sensitivity_dialog)
+
         logButton = hildon.CheckButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT)
         logButton.set_label("Log data")
         logButton.set_active(widget.logging)
@@ -1539,8 +1624,10 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem):
         vbox.add(alarmButton)
         vbox.add(modePicker)
         vbox.add(heightPicker)
+        vbox.add(heightPicker_English)
         vbox.add(weightButton)
         vbox.add(unitPicker)
+        vbox.add(sensitivityButton)
         vbox.add(UIPicker)
         vbox.add(idleButton)
         vbox.add(resetButton)
@@ -1551,6 +1638,12 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem):
 
         dialog.vbox.add(pan_area)
         dialog.show_all()
+
+        if widget.unit == 0:
+            self.heightPicker_English.hide()
+        else:
+            self.heightPicker.hide()
+
         response = dialog.run()
         #hildon.hildon_banner_show_information(self, "None", "You have to Stop/Start the counter to apply the new settings")
         dialog.destroy()