Internal platform changes that are not visible to capsule developers will be communicated via internal status updates.
Updated: June 19, 2019
With the new with-navigation-conversation-drivers
key, you can now add localized, system-provided conversation drivers for "Next" and "Previous" paging commands without being required to hard-code them in your capsule code.
Example
result-view {
match: MyStruct (this) {
from-output: ReadOneAction
}
render {
list-of (this) {
navigation-mode {
read-one {
with-navigation-conversation-drivers
page-content {
underflow-statement (This is the first candidate)
item-selection-question (Do you want this one?)
overflow-statement (That's all I have)
overflow-question (What would you want to do?)
}
}
}
where-each (item) {
spoken-summary ("#{value(item)}")
layout-match (item) {
mode (Summary)
}
}
}
}
}
Currently, system-provided conversation drivers only support the en-US
locale, though others will be added soon. If you use system-provided conversation drivers for other locales, they will not cause an error and will automatically appear when the specific locale is supported.
You must now explicitly import all Bixby-provided JavaScript libraries, such as console
and http
. For more information, see JavaScript API reference.
Learn more about the deprecation stages.
We've added the ability to add conversation drivers to the detail-view
of activity-support
.
As a result, we've reorganized the way you declare a detail-view
block, as shown below.
Examples
Deprecated:
activity-support {
match {
MyReceipt (this)
}
time(statusRefreshTime)
states {
if (orderState == 'Ordered') {
state (Scheduled) {
expires(statusRefreshTime)
summary-view {
title (--Scheduled summary title--)
message (Scheduled summary message)
details(**Scheduled summary details)
}
detail-view {
layout-match(this) {
mode(Details)
}
}
}
}
}
}
New:
activity-support {
match {
MyReceipt (this)
}
time(statusRefreshTime)
states {
if (orderState == 'Ordered') {
state (Scheduled) {
expires(statusRefreshTime)
summary-view {
title (--Scheduled summary title--)
details(**Scheduled summary details)
}
detail-view {
render {
layout-match (this) {
mode (Details)
}
}
conversation-drivers {
conversation-driver (conversation driver inside detail-view)
}
}
}
}
}
}
You now have the ability to add a duration-picker
within Input View components. A duration picker is a full-screen component that lets users select a duration of time.
Updated: June 7, 2019
We've added a new allow-dialogs-on-detail-pages
runtime flag that allows your capsule to show dialog when users progress from a summary view to a detail view.
To support the new allow-dialogs-on-details-pages
runtime flag, we've also introduced the isElement
Expression Language (EL) function, which returns true
if the node is an element of an array. This occurs when the node is being accessed with an array-style iterator such as for-each
and where-each
.
When rendering a details view for an item that is reached through list-of.where-each
, the isElement
function continues to return true
for that item. This allows you to use isElement
in result-view.message
blocks to determine if your result-view
is for a details view (in other words, an element selected from an array or collection of results).
Example
result-view {
match: Donut (result)
message {
if (size(result) == 0) {
template ("no donuts!")
} else-if (size(result) == 1) {
if (isElement(result)) {
template ("details for a donut!") // <--------- example of crafting a custom message for the details page
} else-if {
template ("only 1 donut!")
}
} else {
template ("#{size(result)} donuts!")
}
}
...
}
Read more about EL node evaluation functions.
We've made a number of updates to the capsule-info.bxb
file, which allows you to provide information about your capsule, such as the name, website, and branding images:
description
key to capsule-info
.companyName
with developer-name
.name
, which has been replaced with display-name
.iconUrl
has been deprecated, which has been replaced with icon-asset
.screenshots
.Learn more about setting up your capsule's capsule-info.bxb
file.
Examples
Deprecated:
description {
name (Tip Calculator)
displayName(Tip Calculator)
iconUrl (/images/icons/gratuity.png)
imageUrl (/images/icons/gratuity.png)
description (Calculate the appropriate gratuity for a given service.)
dispatch-name (tip calculator)
dispatch-aliases {
alias (tip calculator app)
alias (gratuity calculator)
alias (gratuity calculator app)
alias (tips)
alias (gratuity)
}
websiteUrl (http://bixby.samsung.com/)
}
New:
capsule-info {
display-name (Tip Calculator)
icon-asset (/images/icons/gratuity.png) // must be local asset
image-asset (/images/icons/gratuity.png) // must be local asset
description (Calculate the appropriate gratuity for a given service.)
dispatch-name (tip calculator)
dispatch-aliases {
alias (tip calculator app)
alias (gratuity calculator)
alias (gratuity calculator app)
alias (tips)
alias (gratuity)
}
website-url (http://bixby.samsung.com/)
screenshots {
asset (/foo/fi/foh/fum.jpg)
asset (https://example.com/image.jpg) // ERROR, only local assets
}
}
Learn more about the deprecation stages.
We've added the object-fit
option for image-carousel
. This new key determines how an image fits within a Bixby Views component.
Updated: May 22, 2019
We've added a new recognized-range
key, which is used with decimal
and integer
concepts to set a range of acceptable values with a lower bound (min-value
) and an upper bound (max-value
).
Because recognized-range
is part of features
, you can have related values inherited by sub-types that use role-of
or extends
if you set the concepts-inherit-super-type-features
runtime flag.
The previous method has been deprecated.
For more information, see Modeling Concepts.
Learn more about the deprecation stages.
We've added a few more reserved utterances related to ordinal selections. Examples include:
(first)[v:OrdinalSelector]
the (first)[v:OrdinalSelector] one
yes the (first)[v:OrdinalSelector] one
With ordinal selections, users can replace "first" with any number, such as "third" or "fifth", for example.
Read more about Reserved Utterances.
We are introducing the header
key, which replaces the title
key within list-of
in result views. You can also use a header
at the top of a selection-of
list in input views.
...
header {
title-area {
halign (Start)
slot1 {
single-line {
text {
style (Title_M)
value ("Address book")
}
}
}
}
}
...
Here is how the header appears on mobile:
Additionally, to help you specify the positioning of an image within an image content box, we've added a new object-position key to image-card, image, and thumbnail-card.
Finally, you can now add a background-color to images, which defaults to transparent but can be set to white.
We now show an error when you try to add or override properties within a concept that is a role-of
a parent concept. You should instead use extends
.
For more information, see Relationships Between Concepts.
Learn more about the deprecation stages.
Updated: May 10, 2019
We are deprecating the following keys related to refresh
and introducing the corresponding replacements to make refresh
more consistent with other parts of the Bixby platform and allow for cascading control flow.
refresh.condition
, replaced with inner control flow that uses standard conditionalsrefresh.delay
, replaced with refresh.spec.delay-seconds
. This key also permits expressions such as this.flightNumber + 1
.refresh.on-refresh
, replaced with refresh.spec.with-request
. This key also allows for cascading control flow.Examples
Deprecated:
refresh {
condition("(size(this) == 1) and (this.flightState == 'active')")
delay(60)
on-refresh {
intent {
goal {FlightStatus}
value {$expr(this.carrier)}
value {$expr(this.flightNumber)}
}
}
}
New:
refresh {
if ((size(this) == 1) and (this.flightState == 'active')) {
spec {
delay-seconds (this.flightNumber)
with-request {
if (true) { // obviously optional, for demonstration purposes only
intent {
goal {FlightStatus}
value {$expr(this.carrier)}
value {$expr(this.flightNumber)}
}
}
}
}
}
}
}
We’ve added new Template sample capsules that you can use as a starting point for your own capsules! There are currently two templates available: one for facts/jokes and one for quiz.
Updated: April 19, 2019
Bixby Views now supports a lightbox-enabled
toggle on an image
.
Lightbox mode enabled (true
):
Lightbox mode disabled (false
):
Additionally, you can now include a single-line
within any slot
of a title-area
.
We've introduced the new concepts-inherit-super-type-features
runtime flag that allows concepts to inherit features
(such as transient
or preferable
) when extending or being a role-of their parent type (also known as super-type):
Example:
capsule {
...
runtime-flags {
concepts-inherit-super-type-features
}
}
We've made several updates to Hands-Free List Navigation, especially related to navigation-mode
:
item-summary-join-mode
key controls how lists are concatenated in spoken summaries.spoken-summary
key provides a spoken summary of the current item in a where-each
loop.page-marker
key provides spoken guidance during list navigation to indicate which page of items the user is currently on. New isFirstNavPage
and isLastNavPage
pagination functions are available through Expression Language to support this key.overflow-statement
, underflow-statement
, item-selection-question
, and overflow-question
keys are now under a page-content
key, along with page-marker
and item-summary-join-mode
.Learn more about Hands-Free List Navigation.
We've added a few more reserved utterances (also known as meta-commands), which are commands that have specific meanings in particular situations:
Read more about Reserved Utterances.
Updated: April 11, 2019
Within Bixby Views, you can now have for-each
loops within a single-line
.
Additionally, you can add a shape
to an image
in single-line
.
You now have the ability to promote (or demote) capsule admins within the Developer Center.
Learn more on how to Add Capsule Admins and the things you can do as a capsule admin.