Internal platform changes that are not visible to capsule developers will be communicated via internal status updates.
Updated: September 9, 2020
We've revamped Teams & Capsules, which is now called Bixby Developer Console. The Developer Console has a cleaner look and improved navigation. We've kept all of the existing features, and more updates are coming in the future. Learn more about the new Developer Console.
In continued preparation for Bixby's migration to match Samsung's OneUI, the Bixby Views components have been updated to match the available Android display themes, such as light and dark mode.
As such, we've introduced a new Bixby Views Sketch library, with all the updated components and specifications to match the upcoming new look-and-feel. The previous version of the Bixby Views Sketch library will be deprecated, and eventually removed.
All designs for new and existing capsules will eventually need to be updated to the new Sketch library.
To better refine how optional fragments/strings in dialog templates behave, we are changing the current behavior.
Fragments and template strings that behave optionally are:
If an optional block contains a non-optional fragment or template that returns an empty string, the block will fail. Take, for example, the following template and corresponding dialog:
template ("I'm looking for the best route [to #{value(location)}]")
dialog (Value) {
match: Location (this)
if (exists (this) && not empty (this.name)) {
template ("#{raw (this.name)}")
} else {
template ("")
}
}
In the example above, if Bixby cannot derive location.name
, the whole block fails and returns the empty string, resulting in the following dialog:
"I'm looking for the best route"
If location.name
can be derived, the result is something like this instead:
"I'm looking for the best route to San Jose"
However, if an optional block contains an optional component that returns an empty string, the block will not fail. Take this template, for example:
template ("Searching for #{value(search.color)} cars for sale")
Notice that there are no optional braces in the template above. If the fragment #{value(search.color)}
returned the empty string and the new allow-empty-fragments-in-dialog-templates
runtime flag is set to false
, the whole template would return the empty string; however, if the flag is true
, the final result is:
"Searching for cars for sale"
This behavior also holds for agreement expressions as well.
This runtime flag is enabled by default in runtime version 8 and later versions.
Learn more about the deprecation stages.
The Podcast Capsule Template now supports multiple RSS feeds. You can also tag feeds to help users play specific feeds.
Within Bixby Views, we've updated the maximum number of lines displayed per slot within title-area
. This limit varies varies by device, and you can see this new behavior in the title-area
interactive demo.
If you are having trouble submitting or executing a capsule, you can now check the Troubleshooting Common Issues with Permissions and Submissions topic for help with diagnosing your issue.
Updated: August 12, 2020
In preparation for coming support of Android display themes, you should ensure that your capsule has specific icons and images that account for these themes. Currently, you should account for the light theme and dark theme.
Some images in your capsule, particularly icons, might not be visible or legible when set against a different background in an alternate theme. You can specify alternate images for the light theme by using the light-theme
key, which is available in most View's components that let you specify an image by URL. There is also a corresponding dark-theme
key that can be used if the image does not have enough contrast for the dark theme.
To maintain backwards compatibility, we're also supporting the current theme for older devices and other non-mobile device types.
Examples
url (icon-default.jpg) {
light-theme (icon-light.jpg)
}
url (icon-default.jpg) {
dark-theme (icon-dark.jpg)
}
A new Black
background image color is now available to create additional contrast to your images in image-background-color
for images in cards or background-color
for standalone images.
Before submitting your capsule, if you have hints with constraints, you must also provide at least 3 working uncategorized
, visible (unconstrained) hints for each store country and device to the Marketplace. If the hints do not work, your capsule will be rejected.
In summary, you need one of the following:
For details, see Preparing for Release.
You can now opt out of capsule lock during specific result moments with the capsule-lock
key in that particular result view, which overrides the result-view-capsule-lock
flag in your runtime version.
Keep in mind that, if you do opt out of capsule lock, conversation drivers will appear on the result view page, but they might not behave as expected. This is true even if the device does not support capsule lock.
We've introduced two new EL node evaluation functions:
typeOf(node)
: Returns the type of the node. The return value is the fully qualified node name: in a capsule with a capsule ID of example.shoe
, the Accessory
model has a fully qualified name of example.shoe.Accessory
.
cast(node, type)
, node.cast(type)
: Returns a copy of the node cast to the specified type.
For more information, learn about Node Evaluation Functions.
You can now define a default-value
for a primitive-type property in structures. However, you cannot define a default value for a structure-type property. If defined and if a value cannot be found for that property, then the default value will be used. Structures inherit any default values defined for properties from a parent structure.
structure (Struct) {
property (int) {
type (viv.core.Integer)
min (Required)
default-value (5)
}
}
You now should declare which library permissions are needed with the autocomplete component, to ensure that component works correctly. Otherwise, your users get prompted multiple times. Adding library permissions in this situation ensures users are prompted for all permissions only once.
Keep in mind that, if you are declaring library permissions in an autocomplete component, you must declare it both in the capsule.bxb
file and in the permissions
block in auto-complete
.
Examples
...
auto-complete {
…
source {
collect-with (…) { … }
label (…)
where-each (…) { … }
permissions {
library-permission (self:profile)
library-permission (contact:contacts)
}
}
}
Updated: July 14, 2020
Public submissions are now available for bixby-fridge
targets in the US and South Korean Marketplaces.
While you can add new symbols to an enum
with extends
, you cannot do so with role-of
. An enum
can extend multiple concepts or have multiple roles only if all the target enum
concepts have identical symbol sets.
For information, read about Relationships Between Concepts in the Modeling Concepts topic.
Learn more about the deprecation stages.
With this release, if your capsule opts out of capsule lock, conversation drivers are always shown, even if the device itself doesn't support capsule lock.
Within Bixby Views, you can now only use card components within a list-of
or selection-of
list. For example, you can no longer use *-area
, paragraph
, and single-line
components within a list.
Deprecated:
list-of (this) {
where-each(item) {
paragraph: value ("#{value(item)}")
}
}
list-of (this) {
where-each(item) {
title-area {
slot1: text: value ("#{value(item)}")
}
}
}
New:
list-of (this) {
where-each(item) {
compound-card {
content {
paragraph: value ("#{value(item)}")
}
}
}
}
list-of (this) {
where-each(item) {
title-card {
title-area {
slot1: text: value ("#{value(item)}")
}
}
}
}
Learn more about the deprecation stages.
You can now customize the spacer
size in a single line component with the size
key.
You can now add a paragraph
to slot1
of title-area
.
Within Bixby Views, you can now conditionally set a component property, as well as explicitly set them.
Old:
image-card {
aspect-ratio (4:3)
image-url ("[#{value(param.image.url)}]")
text-position (Overlay) // can only be one of the allowed values [Below, Overlay]
}
New:
image-card {
aspect-ratio (4:3)
image-url ("[#{value(param.image.url)}]")
// either
text-position (Overlay) // can only be one of the allowed values [Below, Overlay]
// or
text-position {
if (param.textposition == 'cover') {
value (Overlay) // can only be one of the allowed values [Below, Overlay]
} else {
value (Bottom) // can only be one of the allowed values [Below, Overlay]
}
}
}
If you need to opt out of capsule lock only during specific result moments, you can now use the capsule-lock
key in that particular result view.