vibra-periodic: Add a fallback for the previous [0, 0xFFFF] range
This keeps old themes working Signed-off-by: Guido Günther <agx@sigxcpu.org>
This commit is contained in:
@@ -58,6 +58,13 @@ fbd_feedback_vibra_periodic_serializable_deserialize_property (JsonSerializable
|
||||
if (JSON_NODE_TYPE (property_node) == JSON_NODE_VALUE) {
|
||||
double magnitude = json_node_get_double (property_node);
|
||||
|
||||
/* Backward compat handling: Initially magnitude was given as [0, 0xFFFF] */
|
||||
if (magnitude > 1.0) {
|
||||
g_warning_once ("Too large magnitude %.2f detected, please update the theme", magnitude);
|
||||
magnitude = magnitude / 0xFFFF;
|
||||
}
|
||||
|
||||
|
||||
g_value_set_double (value, magnitude);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -65,6 +72,13 @@ fbd_feedback_vibra_periodic_serializable_deserialize_property (JsonSerializable
|
||||
if (JSON_NODE_TYPE (property_node) == JSON_NODE_VALUE) {
|
||||
double fade_in_level = json_node_get_double (property_node);
|
||||
|
||||
/* Backward compat handling: Initially duration was given as [0, 0xFFFF] */
|
||||
if (fade_in_level > 1.0) {
|
||||
g_warning_once ("Too large fade-in-level %.2f detected, please update the theme",
|
||||
fade_in_level);
|
||||
fade_in_level = fade_in_level / 0xFFFF;
|
||||
}
|
||||
|
||||
g_value_set_double (value, fade_in_level);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -132,6 +132,50 @@ test_fbd_feedback_vibra_periodic (void)
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
test_fbd_feedback_vibra_periodic_fallback (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\" : 65535,"
|
||||
" \"fade-in-level\" : 13107"
|
||||
"}", &err);
|
||||
g_assert_no_error (err);
|
||||
|
||||
g_test_expect_message ("fbd-feedback-vibra-periodic",
|
||||
G_LOG_LEVEL_WARNING,
|
||||
"Too large magnitude 65535.00 detected*");
|
||||
g_test_expect_message ("fbd-feedback-vibra-periodic",
|
||||
G_LOG_LEVEL_WARNING,
|
||||
"Too large fade-in-level 13107.00 detected*");
|
||||
object = json_gobject_deserialize (FBD_TYPE_FEEDBACK_VIBRA_PERIODIC, node);
|
||||
g_test_assert_expected_messages ();
|
||||
|
||||
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, 1.0, FLT_EPSILON);
|
||||
g_assert_cmpfloat_with_epsilon (fade_in_level, 0.2, FLT_EPSILON);
|
||||
g_assert_cmpint (fade_in_time, ==, 500);
|
||||
|
||||
g_assert_finalize_object (object);
|
||||
g_assert_finalize_object (manager);
|
||||
}
|
||||
|
||||
|
||||
gint
|
||||
main (gint argc, gchar *argv[])
|
||||
{
|
||||
@@ -140,6 +184,8 @@ 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/pattern", test_fbd_feedback_vibra_pattern);
|
||||
g_test_add_func("/feedbackd/fbd/feedback-vibra/periodic", test_fbd_feedback_vibra_periodic);
|
||||
g_test_add_func("/feedbackd/fbd/feedback-vibra/periodic/fallback",
|
||||
test_fbd_feedback_vibra_periodic_fallback);
|
||||
|
||||
return g_test_run();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user