WFF uses an expression language to enable:
- Transforming the appearance using
TransformorGyro - Conditional behavior through
Conditionstatements - String formatting in
Templateelements
The expression language is a scripting language which contains your typical operators and a range of functions that can be used.
Expressions can use data sources—represented using square brackets—to let you react to external inputs such as the current date and time, health and fitness metrics, or even the weather.
When using expressions, the primary difference between Transform or Template and
Condition usage, is that Transform and Template require the expression to result
in a value (for example, the new position of the enclosing element) whereas
Condition requires the expression to result in a boolean.
For example, a Condition might use:
[DAY_OF_WEEK] == 6 || [DAY_OF_WEEK] == 7
This evaluates to a boolean and determines whether it is a weekend or not,
using the DAY_OF_WEEK data source.
Functions are also supported—for example, an expression for rotating a
value up to 5 degrees in either direction—based on the x-value of the Wear OS
device's accelerometer:
(5/90)*clamp([ACCELEROMETER_ANGLE_X],0,90) +
(-5/90)*clamp([ACCELEROMETER_ANGLE_X],-90,0)
The clamp() function constrains a value within two bounds.
Expression re-evaluation
The frequency with which expressions are re-evaluated depends on the data
sources used in them. For example, the [DAY_OF_WEEK] == 6 || [DAY_OF_WEEK] ==
7 expression only re-evaluates when a new day starts. However, an expression
that uses the [SECOND] data source re-evaluates every second.
Re-evaluation may result in scene recalculations and rerendering, based on the change in the result of the expression. Therefore it is important to always use data sources that re-evaluate as infrequently as possible. For example, to determine whether it is afternoon:
// Bad - re-evaluates every second
[SECONDS_IN_DAY] > 43200
// Good - limits re-evaluation frequency (1 = PM, 0 = AM)
[AMPM_STATE] == 1
Configuration values in expressions
In addition to functions and data sources, configuration values can be used. For
example, if in the UserConfigurations a BooleanConfiguration named
showBackgroundInAfternoon has been defined, this can be used in an expression:
[CONFIGURATION.showBackgroundInAfternoon] == "TRUE" && [AMPM_STATE] == 1