From cdf5fb2b2d66c171a97a6d5bfca6340ca74926f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Date: Wed, 11 Dec 2024 12:46:46 +0100 Subject: [PATCH] feedback-manager: Split out feedback level calculation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This allows to use it from other places too and while at that documents it. Signed-off-by: Guido Günther --- src/fbd-feedback-manager.c | 47 ++++++++++++++++++++++++++++++-------- src/fbd-feedback-manager.h | 5 ++++ 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/src/fbd-feedback-manager.c b/src/fbd-feedback-manager.c index 8a647de..19dbd06 100644 --- a/src/fbd-feedback-manager.c +++ b/src/fbd-feedback-manager.c @@ -351,6 +351,7 @@ parse_hints (GVariant *hints, FbdFeedbackProfileLevel *level, gboolean *hint_imp return TRUE; } + static gboolean fbd_feedback_manager_handle_trigger_feedback (LfbGdbusFeedback *object, GDBusMethodInvocation *invocation, @@ -364,9 +365,9 @@ fbd_feedback_manager_handle_trigger_feedback (LfbGdbusFeedback *object, GSList *feedbacks, *l; guint event_id; const gchar *sender; - FbdFeedbackProfileLevel app_level, level, hint_level = FBD_FEEDBACK_PROFILE_LEVEL_FULL; + FbdFeedbackProfileLevel level, hint_level = FBD_FEEDBACK_PROFILE_LEVEL_FULL; gboolean found_fb = FALSE; - gboolean hint_important = FALSE, can_important; + gboolean hint_important = FALSE; sender = g_dbus_method_invocation_get_sender (invocation); g_debug ("Event '%s' for '%s' from %s", arg_event, arg_app_id, sender); @@ -405,15 +406,9 @@ fbd_feedback_manager_handle_trigger_feedback (LfbGdbusFeedback *object, event = fbd_event_new (event_id, arg_app_id, arg_event, arg_timeout, sender); g_hash_table_insert (self->events, GUINT_TO_POINTER (event_id), event); - app_level = app_get_feedback_level (arg_app_id); - can_important = app_is_important (self, arg_app_id); - - if (hint_important && can_important) - level = hint_level; - else - level = get_max_level (self->level, app_level, hint_level); - + level = fbd_feedback_manager_get_effective_level (self, arg_app_id, hint_level, hint_important); feedbacks = fbd_feedback_theme_lookup_feedback (self->theme, level, event); + if (feedbacks) { for (l = feedbacks; l; l = l->next) { FbdFeedbackBase *fb = FBD_FEEDBACK_BASE (l->data); @@ -662,3 +657,35 @@ fbd_feedback_manager_set_profile (FbdFeedbackManager *self, const gchar *profile return TRUE; } + +/** + * fbd_feedback_manager_get_effective_level: + * @self: The feedback manager + * @app_id: The app-id of the app that triggered the feedback + * @want_level: The wanted level + * @important: Whether the important hint is set + * + * Calculates the effective feedback level taking the hints sent for the event + * and the system configuration into account + * + * Returns: The effective feedback level + */ +FbdFeedbackProfileLevel +fbd_feedback_manager_get_effective_level (FbdFeedbackManager *self, + const char *app_id, + FbdFeedbackProfileLevel want_level, + gboolean important) +{ + gboolean can_important; + FbdFeedbackProfileLevel app_level, level; + + app_level = app_get_feedback_level (app_id); + can_important = app_is_important (self, app_id); + + if (important && can_important) + level = want_level; + else + level = get_max_level (self->level, app_level, want_level); + + return level; +} diff --git a/src/fbd-feedback-manager.h b/src/fbd-feedback-manager.h index 76291d9..7614333 100644 --- a/src/fbd-feedback-manager.h +++ b/src/fbd-feedback-manager.h @@ -8,6 +8,7 @@ #include "fbd-dev-vibra.h" #include "fbd-dev-leds.h" #include "fbd-dev-sound.h" +#include "fbd-feedback-profile.h" #include "lfb-gdbus.h" #include @@ -24,5 +25,9 @@ FbdDevSound *fbd_feedback_manager_get_dev_sound (FbdFeedbackManager *self); FbdDevLeds *fbd_feedback_manager_get_dev_leds (FbdFeedbackManager *self); void fbd_feedback_manager_load_theme (FbdFeedbackManager *self); gboolean fbd_feedback_manager_set_profile (FbdFeedbackManager *self, const gchar *profile); +FbdFeedbackProfileLevel fbd_feedback_manager_get_effective_level (FbdFeedbackManager *self, + const char *app_id, + FbdFeedbackProfileLevel want_level, + gboolean important); G_END_DECLS