feedback-manager: Split out feedback level calculation
This allows to use it from other places too and while at that documents it. Signed-off-by: Guido Günther <agx@sigxcpu.org>
This commit is contained in:
+37
-10
@@ -351,6 +351,7 @@ parse_hints (GVariant *hints, FbdFeedbackProfileLevel *level, gboolean *hint_imp
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
fbd_feedback_manager_handle_trigger_feedback (LfbGdbusFeedback *object,
|
fbd_feedback_manager_handle_trigger_feedback (LfbGdbusFeedback *object,
|
||||||
GDBusMethodInvocation *invocation,
|
GDBusMethodInvocation *invocation,
|
||||||
@@ -364,9 +365,9 @@ fbd_feedback_manager_handle_trigger_feedback (LfbGdbusFeedback *object,
|
|||||||
GSList *feedbacks, *l;
|
GSList *feedbacks, *l;
|
||||||
guint event_id;
|
guint event_id;
|
||||||
const gchar *sender;
|
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 found_fb = FALSE;
|
||||||
gboolean hint_important = FALSE, can_important;
|
gboolean hint_important = FALSE;
|
||||||
|
|
||||||
sender = g_dbus_method_invocation_get_sender (invocation);
|
sender = g_dbus_method_invocation_get_sender (invocation);
|
||||||
g_debug ("Event '%s' for '%s' from %s", arg_event, arg_app_id, sender);
|
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);
|
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);
|
g_hash_table_insert (self->events, GUINT_TO_POINTER (event_id), event);
|
||||||
|
|
||||||
app_level = app_get_feedback_level (arg_app_id);
|
level = fbd_feedback_manager_get_effective_level (self, arg_app_id, hint_level, hint_important);
|
||||||
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);
|
|
||||||
|
|
||||||
feedbacks = fbd_feedback_theme_lookup_feedback (self->theme, level, event);
|
feedbacks = fbd_feedback_theme_lookup_feedback (self->theme, level, event);
|
||||||
|
|
||||||
if (feedbacks) {
|
if (feedbacks) {
|
||||||
for (l = feedbacks; l; l = l->next) {
|
for (l = feedbacks; l; l = l->next) {
|
||||||
FbdFeedbackBase *fb = FBD_FEEDBACK_BASE (l->data);
|
FbdFeedbackBase *fb = FBD_FEEDBACK_BASE (l->data);
|
||||||
@@ -662,3 +657,35 @@ fbd_feedback_manager_set_profile (FbdFeedbackManager *self, const gchar *profile
|
|||||||
|
|
||||||
return TRUE;
|
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;
|
||||||
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
#include "fbd-dev-vibra.h"
|
#include "fbd-dev-vibra.h"
|
||||||
#include "fbd-dev-leds.h"
|
#include "fbd-dev-leds.h"
|
||||||
#include "fbd-dev-sound.h"
|
#include "fbd-dev-sound.h"
|
||||||
|
#include "fbd-feedback-profile.h"
|
||||||
|
|
||||||
#include "lfb-gdbus.h"
|
#include "lfb-gdbus.h"
|
||||||
#include <glib-object.h>
|
#include <glib-object.h>
|
||||||
@@ -24,5 +25,9 @@ FbdDevSound *fbd_feedback_manager_get_dev_sound (FbdFeedbackManager *self);
|
|||||||
FbdDevLeds *fbd_feedback_manager_get_dev_leds (FbdFeedbackManager *self);
|
FbdDevLeds *fbd_feedback_manager_get_dev_leds (FbdFeedbackManager *self);
|
||||||
void fbd_feedback_manager_load_theme (FbdFeedbackManager *self);
|
void fbd_feedback_manager_load_theme (FbdFeedbackManager *self);
|
||||||
gboolean fbd_feedback_manager_set_profile (FbdFeedbackManager *self, const gchar *profile);
|
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
|
G_END_DECLS
|
||||||
|
|||||||
Reference in New Issue
Block a user