feedback-manager: End too noisy feedbacks on profile level change

When the profile gets lowered from e.g. quiet to silent we want to end
all ongoing feedbacks that belong to the quiet level.

This allows to e.g. silence an incoming phone call by switching the
feedback level via phosh's quick setting.

Closes: https://source.puri.sm/Librem5/feedbackd/-/issues/13
Closes: https://source.puri.sm/Librem5/feedbackd/-/issues/55
This commit is contained in:
Guido Günther
2024-06-21 19:57:29 +00:00
committed by Guido Günther
parent 3c02259156
commit 929d41b7db
2 changed files with 20 additions and 4 deletions
+18 -3
View File
@@ -201,8 +201,6 @@ on_profile_changed (FbdFeedbackManager *self, GParamSpec *psepc, gpointer unused
if (!fbd_feedback_manager_set_profile (self, pname))
g_warning ("Invalid profile '%s'", pname);
/* TODO: end running feedbacks that aren't allowed in new profile immediately */
}
static void
@@ -418,7 +416,7 @@ fbd_feedback_manager_handle_trigger_feedback (LfbGdbusFeedback *object,
feedbacks = fbd_feedback_theme_lookup_feedback (self->theme, level, event);
if (feedbacks) {
for (l = feedbacks; l; l = l->next) {
FbdFeedbackBase *fb = l->data;
FbdFeedbackBase *fb = FBD_FEEDBACK_BASE (l->data);
if (fbd_feedback_is_available (FBD_FEEDBACK_BASE (fb))) {
fbd_event_add_feedback (event, fb);
@@ -626,6 +624,20 @@ fbd_feedback_manager_load_theme (FbdFeedbackManager *self)
}
}
static void
cancel_running (FbdFeedbackManager *self)
{
g_autoptr (GList) running = g_hash_table_get_values (self->events);
for (GList *l = running; l ; l = l->next) {
FbdEvent *event = FBD_EVENT (l->data);
fbd_event_end_feedbacks_by_level (event, self->level);
}
}
gboolean
fbd_feedback_manager_set_profile (FbdFeedbackManager *self, const gchar *profile)
{
@@ -645,5 +657,8 @@ fbd_feedback_manager_set_profile (FbdFeedbackManager *self, const gchar *profile
self->level = level;
lfb_gdbus_feedback_set_profile (LFB_GDBUS_FEEDBACK (self), profile);
g_settings_set_string (self->settings, FEEDBACKD_KEY_PROFILE, profile);
cancel_running (self);
return TRUE;
}
+2 -1
View File
@@ -354,7 +354,8 @@ fbd_feedback_theme_lookup_feedback (FbdFeedbackTheme *self,
FbdFeedbackBase *feedback = fbd_feedback_profile_get_feedback (profile,
fbd_event_get_event (event));
if (feedback) {
feedbacks = g_slist_prepend (feedbacks, g_object_ref(feedback));
g_object_set_data (G_OBJECT (feedback), "fbd-level", GUINT_TO_POINTER (i));
feedbacks = g_slist_prepend (feedbacks, g_object_ref (feedback));
}
}