vibra-periodic: Deserialize magnitude and fade-in-level manually
This allows us to add proper fallbacks Signed-off-by: Guido Günther <agx@sigxcpu.org>
This commit is contained in:
@@ -40,7 +40,39 @@ typedef struct _FbdFeedbackVibraPeriodic {
|
|||||||
guint fade_in_time;
|
guint fade_in_time;
|
||||||
} FbdFeedbackVibraPeriodic;
|
} FbdFeedbackVibraPeriodic;
|
||||||
|
|
||||||
G_DEFINE_TYPE (FbdFeedbackVibraPeriodic, fbd_feedback_vibra_periodic, FBD_TYPE_FEEDBACK_VIBRA);
|
static void json_serializable_iface_init (JsonSerializableIface *iface);
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_WITH_CODE (FbdFeedbackVibraPeriodic, fbd_feedback_vibra_periodic,
|
||||||
|
FBD_TYPE_FEEDBACK_VIBRA,
|
||||||
|
G_IMPLEMENT_INTERFACE (JSON_TYPE_SERIALIZABLE,
|
||||||
|
json_serializable_iface_init));
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
fbd_feedback_vibra_periodic_serializable_deserialize_property (JsonSerializable *serializable,
|
||||||
|
const gchar *property_name,
|
||||||
|
GValue *value,
|
||||||
|
GParamSpec *pspec,
|
||||||
|
JsonNode *property_node)
|
||||||
|
{
|
||||||
|
if (g_strcmp0 (property_name, "magnitude") == 0) {
|
||||||
|
if (JSON_NODE_TYPE (property_node) == JSON_NODE_VALUE) {
|
||||||
|
double magnitude = json_node_get_double (property_node);
|
||||||
|
|
||||||
|
g_value_set_double (value, magnitude);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
} else if (g_strcmp0 (property_name, "fade-in-level") == 0) {
|
||||||
|
if (JSON_NODE_TYPE (property_node) == JSON_NODE_VALUE) {
|
||||||
|
double fade_in_level = json_node_get_double (property_node);
|
||||||
|
|
||||||
|
g_value_set_double (value, fade_in_level);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
fbd_feedback_vibra_periodic_set_property (GObject *object,
|
fbd_feedback_vibra_periodic_set_property (GObject *object,
|
||||||
@@ -129,6 +161,14 @@ fbd_feedback_vibra_periodic_is_available (FbdFeedbackBase *base)
|
|||||||
return FBD_IS_DEV_VIBRA (dev);
|
return FBD_IS_DEV_VIBRA (dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
json_serializable_iface_init (JsonSerializableIface *iface)
|
||||||
|
{
|
||||||
|
iface->deserialize_property = fbd_feedback_vibra_periodic_serializable_deserialize_property;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
fbd_feedback_vibra_periodic_class_init (FbdFeedbackVibraPeriodicClass *klass)
|
fbd_feedback_vibra_periodic_class_init (FbdFeedbackVibraPeriodicClass *klass)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#define GMOBILE_USE_UNSTABLE_API
|
#define GMOBILE_USE_UNSTABLE_API
|
||||||
#include "fbd-feedback-manager.h"
|
#include "fbd-feedback-manager.h"
|
||||||
#include "fbd-feedback-vibra-pattern.h"
|
#include "fbd-feedback-vibra-pattern.h"
|
||||||
|
#include "fbd-feedback-vibra-periodic.h"
|
||||||
#include "fbd-feedback-vibra-rumble.h"
|
#include "fbd-feedback-vibra-rumble.h"
|
||||||
|
|
||||||
#include <json-glib/json-glib.h>
|
#include <json-glib/json-glib.h>
|
||||||
@@ -95,6 +96,42 @@ test_fbd_feedback_vibra_pattern (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_fbd_feedback_vibra_periodic (void)
|
||||||
|
{
|
||||||
|
/* Create manager upfront so we can dispose it, otherwise creating
|
||||||
|
* any feedback would create it implicitly */
|
||||||
|
FbdFeedbackManager *manager = fbd_feedback_manager_get_default ();
|
||||||
|
g_autoptr (GError) err = NULL;
|
||||||
|
g_autoptr (JsonNode) node = NULL;
|
||||||
|
GObject *object;
|
||||||
|
double magnitude, fade_in_level;
|
||||||
|
guint fade_in_time;
|
||||||
|
|
||||||
|
node = json_from_string("{"
|
||||||
|
" \"event-name\" : \"button-pressed\","
|
||||||
|
" \"type\" : \"VibraPeriodic\","
|
||||||
|
" \"magnitude\" : 0.7,"
|
||||||
|
" \"fade-in-level\" : 0.3"
|
||||||
|
"}", &err);
|
||||||
|
g_assert_no_error (err);
|
||||||
|
|
||||||
|
object = json_gobject_deserialize (FBD_TYPE_FEEDBACK_VIBRA_PERIODIC, node);
|
||||||
|
g_object_get (object,
|
||||||
|
"magnitude", &magnitude,
|
||||||
|
"fade-in-level", &fade_in_level,
|
||||||
|
"fade-in-time", &fade_in_time,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
g_assert_cmpfloat_with_epsilon (magnitude, 0.7, FLT_EPSILON);
|
||||||
|
g_assert_cmpfloat_with_epsilon (fade_in_level, 0.3, FLT_EPSILON);
|
||||||
|
g_assert_cmpint (fade_in_time, ==, 500);
|
||||||
|
|
||||||
|
g_assert_finalize_object (object);
|
||||||
|
g_assert_finalize_object (manager);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
gint
|
gint
|
||||||
main (gint argc, gchar *argv[])
|
main (gint argc, gchar *argv[])
|
||||||
{
|
{
|
||||||
@@ -102,6 +139,7 @@ main (gint argc, gchar *argv[])
|
|||||||
|
|
||||||
g_test_add_func("/feedbackd/fbd/feedback-vibra/rumble", test_fbd_feedback_vibra_rumble);
|
g_test_add_func("/feedbackd/fbd/feedback-vibra/rumble", test_fbd_feedback_vibra_rumble);
|
||||||
g_test_add_func("/feedbackd/fbd/feedback-vibra/pattern", test_fbd_feedback_vibra_pattern);
|
g_test_add_func("/feedbackd/fbd/feedback-vibra/pattern", test_fbd_feedback_vibra_pattern);
|
||||||
|
g_test_add_func("/feedbackd/fbd/feedback-vibra/periodic", test_fbd_feedback_vibra_periodic);
|
||||||
|
|
||||||
return g_test_run();
|
return g_test_run();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user