Add option to select wake up sound

This commit is contained in:
Admar Schoonen 2023-01-08 22:11:18 +01:00
parent bb6f49d024
commit ab2906b1a6
1 changed files with 110 additions and 12 deletions

122
clock.py
View File

@ -9,6 +9,7 @@ from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.uix.slider import Slider
from kivy.uix.button import Button
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.graphics import Color, Line, Rectangle
@ -89,11 +90,10 @@ Builder.load_string('''
halign: "left"
valign: "middle"
text_size: self.size
Label:
text:"wake up sound"
halign: "left"
valign: "middle"
text_size: self.size
Button:
id: settings_menu_wake_up_sound_select_button
on_press: root.settings_menu_wake_up_sound_select_button_cb()
text: str(app.alarm_settings.sound_selected)
Label:
text:"Wake up brightness"
halign: "left"
@ -163,6 +163,47 @@ Builder.load_string('''
halign: "left"
valign: "middle"
text_size: self.size
FloatLayout
id: settings_menu_wake_up_sound
size_hint: None, None
pos_hint: {"center_x":0.5, "center_y":0.5}
size: 0.7*min(root.size), 0.7*min(root.size)
canvas:
Color:
rgb: 0.1, 0.1, 0.1
Rectangle:
size: self.size
pos: self.pos
BoxLayout:
orientation: "vertical"
pos_hint: {"center_x":0.5, "center_y":0.5}
Label:
text: "Select wake up sound"
GridLayout:
cols: 2
CheckBox:
group: "settings_menu_wake_up_sound"
on_active: root.settings_menu_wake_up_sound_cb(self, self.active, "Birds")
id: settings_menu_wake_up_sound_Birds
Label:
text: "Birds"
halign: "left"
valign: "middle"
text_size: self.size
active: True
CheckBox:
group: "settings_menu_wake_up_sound"
on_active: root.settings_menu_wake_up_sound_cb(self, self.active, "NPO Radio 1")
id: settings_menu_wake_up_sound_NpoRadio1
Label:
text: "NPO Radio 1"
halign: "left"
valign: "middle"
text_size: self.size
Button:
id: settings_menu_wake_up_sound_Ok_button
on_press: root.settings_menu_wake_up_sound_Ok_button_cb()
text: "Ok"
''')
Position = collections.namedtuple('Position', 'x y')
@ -181,7 +222,9 @@ class AlarmSettings():
alarm_modified = False
led_color = [0, 0, 0]
# sound_selected = "NPO Radio 1"
# sound_source = "https://icecast.omroep.nl/radio1-bb-mp3"
sound_selected = "Birds"
sound_source = "Woodpecker Chirps - QuickSounds.com.mp3"
seconds_to_sunrise = 30 * 60
@ -200,9 +243,17 @@ class MyClockWidget(FloatLayout):
seconds_to_next_alarm = 0
led_color = [0, 0, 0]
# view can be "clock" "set_alarm" "settings" or "calendar"
# view can be one of the following strings:
# - "clock"
# - "set_alarm"
# - "settings_menu"
# - "settings_menu_wake_up_sound"
# - "calendar"
view = "clock"
# we need a dirty hack to sensure that radio button is always in sync with selected setting
settings_menu_wake_up_sound_select_button_cb_hack = False
def hide_widget(self, widget, hide=True):
if hasattr(widget, 'saved_attrs'):
if not hide:
@ -298,7 +349,7 @@ class MyClockWidget(FloatLayout):
app = App.get_running_app()
alarm_settings = app.alarm_settings
if (self.view == "settings"):
if (self.view.startswith("settings_menu")):
source = 'settings_visible.png'
rgb = [0.9, 0.0, 0.0]
else:
@ -342,6 +393,9 @@ class MyClockWidget(FloatLayout):
if alarm_settings.alarm_activated == False:
return
if alarm_settings.sound_source == "":
return
if self.seconds_to_next_alarm < 0.1 and sound_process is None:
sound_process = Process(target=play_sound, args=(alarm_settings.sound_source,))
sound_process.start()
@ -414,7 +468,10 @@ class MyClockWidget(FloatLayout):
Line(points=[hands.center_x, hands.center_y, seconds_hand.x, seconds_hand.y], width=1, cap="round")
def update_settings(self):
self.hide_widget(self.ids["settings_menu"], False)
if self.view == "settings_menu":
self.hide_widget(self.ids["settings_menu"], False)
elif self.view == "settings_menu_wake_up_sound":
self.hide_widget(self.ids["settings_menu_wake_up_sound"], False)
def update_display(self, *args):
self.check_alarm()
@ -423,14 +480,55 @@ class MyClockWidget(FloatLayout):
self.hide_widget(self.ids["face"], True)
self.hide_widget(self.ids["hands"], True)
self.hide_widget(self.ids["settings_menu"], True)
self.hide_widget(self.ids["settings_menu_wake_up_sound"], True)
self.update_set_alarm_button()
self.update_settings_button()
if self.view == "clock" or self.view == "set_alarm":
self.update_clock()
elif self.view == "settings":
elif self.view.startswith("settings_menu"):
self.update_settings()
def settings_menu_wake_up_sound_select_button_cb(self):
self.settings_menu_wake_up_sound_select_button_cb_hack = True
alarm_settings = App.get_running_app().alarm_settings
self.ids["settings_menu_wake_up_sound_Birds"].active = False
self.ids["settings_menu_wake_up_sound_NpoRadio1"].active = False
print("sound selected: " + alarm_settings.sound_selected)
if alarm_settings.sound_selected == "Birds":
self.ids["settings_menu_wake_up_sound_Birds"].active = True
elif alarm_settings.sound_selected == "NPO Radio 1":
self.ids["settings_menu_wake_up_sound_NpoRadio1"].active = True
self.view = "settings_menu_wake_up_sound"
def settings_menu_wake_up_sound_Ok_button_cb(self):
alarm_settings = App.get_running_app().alarm_settings
self.ids["settings_menu_wake_up_sound_select_button"].text = alarm_settings.sound_selected
self.view = "settings_menu"
def settings_menu_wake_up_sound_cb(self, instance, value, sound):
alarm_settings = App.get_running_app().alarm_settings
if self.settings_menu_wake_up_sound_select_button_cb_hack:
self.settings_menu_wake_up_sound_select_button_cb_hack = False
if not (alarm_settings.sound_selected == "" and sound != ""):
return
if value == True:
print("You selected " + sound)
else:
print("You deselected " + sound)
alarm_settings.sound_source = ""
alarm_settings.sound_selected = ""
if self.ids["settings_menu_wake_up_sound_Birds"].active:
alarm_settings.sound_selected = sound
alarm_settings.sound_source = "Woodpecker Chirps - QuickSounds.com.mp3"
elif self.ids["settings_menu_wake_up_sound_NpoRadio1"].active:
alarm_settings.sound_selected = sound
alarm_settings.sound_source = "https://icecast.omroep.nl/radio1-bb-mp3"
def volume_slider_value(self, *args):
alarm_settings = App.get_running_app().alarm_settings
alarm_settings.volume = int(args[1])
@ -475,8 +573,8 @@ class MyClockWidget(FloatLayout):
def on_settings_button_pressed(self):
print("settings button pressed from view " + self.view)
if self.view != "settings":
self.view = "settings"
if self.view != "settings_menu":
self.view = "settings_menu"
else:
self.view = "clock"
print("view updated to " + self.view)
@ -574,7 +672,7 @@ class MyClockWidget(FloatLayout):
elif (hours_hand.x - 0.1 * self.size[0] <= touch.pos[0] <= hours_hand.x + 0.1 * self.size[0]) and \
(hours_hand.y - 0.1 * self.size[1] <= touch.pos[1] <= hours_hand.y + 0.1 * self.size[1]):
self.grabbed = "hour"
elif self.view == "settings":
elif self.view == "settings_menu":
pass
elif self.view == "clock":
if sound_process is not None: