# Glass Platform Release Notes

|---|
| **Subscribe to Glass Platform Announcements** |
| Email: |

## XE22.0 - October 14, 2014

### User features

- Glass now supports Android notifications. For more information, see [Notification Sync](https://developers.google.com/glass/develop/gdk/notification-sync).

### GDK

Changes to [`CardBuilder`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/widget/CardBuilder):

- [`setAttributionIcon(android.graphics.Bitmap)`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/widget/CardBuilder#setAttributionIcon(android.graphics.Bitmap)), [`setAttributionIcon(android.graphics.drawable.Drawable)`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/widget/CardBuilder#setAttributionIcon(android.graphics.drawable.Drawable)), and [`setAttributionIcon(int)`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/widget/CardBuilder#setAttributionIcon(int)) have been added.
- [`setEmbeddedLayout()`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/widget/CardBuilder#setEmbeddedLayout(int)) has been added.
- [`showStackIndicator()`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/widget/CardBuilder#showStackIndicator(boolean)) has been added.
- Added new [`EMBED_INSIDE`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/widget/CardBuilder.Layout#EMBED_INSIDE) layout.

Other changes:

- Added [`Slider`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/widget/Slider) widget to support loading/progress animations.
- Added new voice triggers to [`VoiceTriggers.Command`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/VoiceTriggers.Command)
- Added new contextual voice commands to [`ContextualMenus.Command`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/ContextualMenus.Command)

## XE21.3 - September 24, 2014

### GDK

- [`CardScrollView`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/widget/CardScrollView) now has the scrollbar enabled by default. To disable it, call [`setHorizontalScrollBarEnabled(false)`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/widget/CardScrollView#setHorizontalScrollBarEnabled(boolean)).

## XE21.0 - September 8, 2014

### User features

- Advanced [developer settings](https://developers.google.com/glass/tools-downloads/developer-settings) are now available from the settings menu when debug mode is turned on.

### GDK

- Replaced [`Card`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card) with [`CardBuilder`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/widget/CardBuilder), which supports many more layouts. [`Card`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card) is now deprecated and will be removed in a future release.
- Added new voice triggers to [`VoiceTriggers.Command`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/VoiceTriggers.Command)
- Added new contextual voice commands to [`ContextualMenus.Command`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/ContextualMenus.Command)
- Added support for [contextual voice commands on
  `LiveCard`](https://developers.google.com/glass/develop/gdk/live-cards#supporting_contextual_voice).
- Added [animations](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/widget/CardScrollView.Animation) to the [`CardScrollView`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/widget/CardScrollView) widget.
- Deprecated the behavior of the [`GestureDetector.ScrollListener`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/touchpad/GestureDetector.ScrollListener): a future release will report scroll events regardless of the number of fingers on the touchpad. To keep the old behavior (i.e receiving scroll events only when exactly one finger is on the touchpad), use the new [`GestureDetector.OneFingerScrollListener`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/touchpad/GestureDetector.OneFingerScrollListener) and its related [setter](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/touchpad/GestureDetector#setOneFingerScrollListener(com.google.android.glass.touchpad.GestureDetector.OneFingerScrollListener)).
- Updated the [GDK samples](https://developers.google.com/glass/develop/gdk/quick-start) to be fully compatible with Android Studio.

## XE20.1 - August 21, 2014

### GDK

Fixed:

- [Issue #469](https://code.google.com/p/google-glass-api/issues/detail?id=469): MediaStore.ACTION_VIDEO_CAPTURE intent does not use duration limit or size limit
- [Issue #289](https://code.google.com/p/google-glass-api/issues/detail?id=289): Support ACTION_WEB_SEARCH intent to search using Glass UI
- [Issue #412](https://code.google.com/p/google-glass-api/issues/detail?id=412): Expose the Volume widget / card
- [Issue #555](https://code.google.com/p/google-glass-api/issues/detail?id=555): Tap to accept, is not working (MediaStore.ACTION_IMAGE_CAPTURE Intent)
- [Issue #578](https://code.google.com/p/google-glass-api/issues/detail?id=578): MediaRecorder fails to capture video after update XE19.1.

### Mirror API

Added new `timezone` setting to the
[Settings](https://developers.google.com/glass/v1/reference/settings) collection.

## XE19.1 - July 15, 2014

### GDK

Added support for USB webcam On-The-Go (OTG) on Glass. Known issues
include:

- Plug and play for the video node is not supported. Reboot Glass to detect attached webcam.
- If the attached accessories have a microphone, [contextual voice commands](https://developers.google.com/glass/develop/gdk/voice#contextual_voice_commands) may not work.
- Holding a partial wakelock is recommended to prevent the system from suspending access to attached webcam.

Check out the Google I/O 2014
[Innovate with the Glass Platform](https://www.google.com/events/io/schedule/session/6ae47f24-b9bf-e311-b297-00155d5066d7)
session for more information.

## XE18.1 - June 10, 2014

### GDK

- Added [Contextual voice commands](https://developers.google.com/glass/develop/gdk/voice#contextual_voice_commands) support for immersions.
- Added the [`ACTION_ON_HEAD_STATE_CHANGED`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/content/Intents#ACTION_ON_HEAD_STATE_CHANGED) broadcast `Intent` to notify you when the user is wearing or removing the device.
- Moved the Camera API `EXTRAS` from the [`CameraManager`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/media/CameraManager) class to the new [`Intents`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/content/Intents) class.

## XE17.3 - June 3, 2014

### GDK

- Some [`CardScrollView`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/widget/CardScrollView) methods are no longer private.

## XE17.1 - May 13, 2014

### GDK

- Added new voice commands to [`VoiceTriggers.Command`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/VoiceTriggers.Command)

## XE16.2 - April 29, 2014

### GDK

- Added new voice commands to [`VoiceTriggers.Command`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/VoiceTriggers.Command)

## XE16 - April 15, 2014

### GDK

Changes to [`Card`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card):

- `toView()` is no longer supported. Use one of the [`getView()`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card#getView()) methods instead.
- `addImage(android.net.Uri)` is no longer supported.
- [`addImage(android.graphics.Bitmap)`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card#addImage(android.graphics.Bitmap)) and [`addImage(android.graphics.drawable.Drawable)`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card#addImage(android.graphics.drawable.Drawable)) are now supported.
- [`getImage(int)`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card#getImage(int)) returns an `android.graphics.drawable.Drawable`.
- [`getText()`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card#getText()) returns and [`setText()`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card#setText(java.lang.CharSequence)) expects a `java.lang.CharSequence`.
- [`getFootnote()`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card#getFootnote()) returns and [`setFootnote()`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card#setFootnote(java.lang.CharSequence)) expects a `java.lang.CharSequence`.
- [`getTimeStamp()`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card#getTimestamp()) returns and [`setTimestamp()`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card#setTimestamp(java.lang.CharSequence)) expects a `java.lang.CharSequence`.
- [`getItemViewType()`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card#getItemViewType()) and [`getViewTypeCount()`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card#getViewTypeCount()) have been added for view recycling.

Changes to [`CardScrollView`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/widget/CardScrollView):

- `onPreActivate()` and `onPreDeactivate()` are no longer overridable.
- `getItemForChildAt(int)` is no longer supported.
- `isSettled()` is no longer supported.
- `updateViews(boolean)` is no longer supported, use [`BaseAdapter#notifyDataSetChanged()`](http://developer.android.com/reference/android/widget/BaseAdapter.html#notifyDataSetChanged()) instead.

Changes to `TimelineManager`:

The `TimelineManager` class and support for static cards from the GDK have been removed.

Changes to [`LiveCard`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/timeline/LiveCard):

- You now create a [`LiveCard`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/timeline/LiveCard) with the [`LiveCard(android.content.Context, java.lang.String)`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/timeline/LiveCard#LiveCard(android.content.Context,%20java.lang.String)) constructor.
- The [`navigate()`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/timeline/LiveCard#navigate()) method has been added to navigate to a published `LiveCard`.
- [`setRenderer(com.google.android.glass.timeline.GlRenderer)`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/timeline/LiveCard#setRenderer(com.google.android.glass.timeline.GlRenderer)) supports adding an OpenGL ES 2.0 renderer to a `LiveCard`.
- [`attach(android.app.Service)`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/timeline/LiveCard#attach(android.app.Service)) has been added and lets you run the live card service in the foreground.

Changes to [`CardScrollAdapter`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/widget/CardScrollAdapter):

- `findIdPosition()` and `findItemPosition()` have been replaced by [`getPosition(java.lang.Object)`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/widget/CardScrollAdapter#getPosition(java.lang.Object))
- `recycleView()` and `setItemOnCard()` have been removed.

Other changes

- The [`Sounds`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/media/Sounds) enum values have been updated.
- The [`GestureDetector`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/touchpad/GestureDetector) has two [`isForward()`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/touchpad/GestureDetector#isForward(com.google.android.glass.touchpad.Gesture)) helper static methods to detect whether or not a gesture is forward.

Voice Triggers

- [Production-ready voice commands](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/VoiceTriggers.Command) are required for submitting Glassware for review.
- [Unlisted voice commands](https://developers.google.com/glass/develop/gdk/starting-glassware#unlisted_commands) require development mode.

### Mirror

[`GET_MEDIA_INPUT`](https://developers.google.com/glass/v1/reference/timeline#menuItems.action) is now a supported
menu item action and lets you provide media payloads to Glassware from a menu item
(currently, only transcribed text from voice input is supported).

## XE12 - December 17, 2013

### User features

See the new user features at [support.google.com](https://support.google.com/glass/answer/4353446).

### GDK

The following GDK changes were made in the XE12 platform release:

Changes to [TimelineManager](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/timeline/TimelineManager):

- The timeline supports the insertion of [static cards](https://developers.google.com/glass/develop/gdk/ui/static-cards).
- `getLiveCard()` is now [`createLiveCard()`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/timeline/TimelineManager#createLiveCard(java.lang.String)).

Changes to [LiveCard](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/timeline/LiveCard):

- `enableDirectRendering()` is now [`setDirectRenderingEnabled()`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/timeline/LiveCard#setDirectRenderingEnabled(boolean)).
- `setNonSilent()` is removed. The [`publish()`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/timeline/LiveCard#publish(com.google.android.glass.timeline.LiveCard.PublishMode)) method now takes the [`LiveCard.PublishMode()`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/timeline/LiveCard.PublishMode) enum that determines whether the timeline publishes the card silently or publishes and gives the card focus.

Changes to [`Card`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card):

- `getTimestamp()` and `setTimestamp()` are removed.
- `getInfo()` and `setInfo()` are now [`getFootnote()`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card#getFootnote()) and [`setFootnote()`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card#setFootnote(int)).
- `getFullScreenImages()` and `setFullScreenImages()` are now [`getImageLayout()`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card#getImageLayout()) and [`setImageLayout()`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card#setImageLayout(com.google.android.glass.app.Card.ImageLayout)) using the [`Card.ImageLayout`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/app/Card.ImageLayout) enum to determine the card's image style.

Other changes:

- The `Camera` class is now [`CameraManager`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/media/CameraManager).
- `LiveCardCallback` is now [`DirectRenderingCallback`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/timeline/DirectRenderingCallback).
- Added the [`Sounds`](https://developers.google.com/glass/develop/gdk/reference/com/google/android/glass/media/Sounds) class, which provides constants that you can pass to [`AudioManager.playSoundEffect()`](http://developer.android.com/reference/android/media/AudioManager.html#playSoundEffect(int,%20float)) to play Glass system sounds.

### Mirror

The following Mirror API fixes were made in the XE12 platform release:

- [Issue 2](https://code.google.com/p/google-glass-api/issues/detail?id=2) fixed.
- [Issue 12](https://code.google.com/p/google-glass-api/issues/detail?id=12) fixed.
- [Issue 297](https://code.google.com/p/google-glass-api/issues/detail?id=297) fixed.
- [Issue 281](https://code.google.com/p/google-glass-api/issues/detail?id=281) fixed.
- [Issue 247](https://code.google.com/p/google-glass-api/issues/detail?id=247) fixed.

## XE11 - November 11, 2013

The following Mirror API changes were made in the XE11 platform release:

- The `VIEW_WEBSITE` menu item is no longer available.

## XE10 - October 7, 2013

The following Mirror API changes support new features in the XE10 platform release:

- Timeline items that contain a URL in the text property now automatically provide the `OPEN_URI` feature.
- The [sharingFeatures property](https://developers.google.com/glass/v1/reference/contacts#sharingFeatures) has been
  added to Contacts. It allows you to control the caption feature during the sharing flow.
  To enable captions, set it to `ADD_CAPTION`.

      {
        "displayName": "Chipotle Cat",
        "imageUrls": ["http://example.com/chipotle.jpg"],
        "sharingFeatures": ["ADD_CAPTION"]
      }

Issues resolved:

- [#197](https://code.google.com/p/google-glass-api/issues/detail?id=197) - Crashes related to sharing timeline items have been resolved.

## XE9 - September 9, 2013

The following Mirror API changes support new features in the XE9 platform release:

- Using `video/vnd.google-glass.stream-url` as an attachment's `contentType` is deprecated. To stream video, use the `PLAY_VIDEO` menu item action with the payload set to the streaming URL instead. See [Attaching video](https://developers.google.com/glass/timeline#attaching_video) for more information.
- If you override a built-in menu item's [displayName](https://developers.google.com/glass/reference/timeline#menuItems.values.displayName), then the default contextual voice command for the menu item is not functional.
- The [timeline](https://developers.google.com/glass/v1/reference/timeline) resource's `htmlPages` property is no longer supported. See [Paginating](https://developers.google.com/glass/timeline#paginating) for the currently supported method.
- `VIEW_WEBSITE` is deprecated and will be removed in a future release. Use [`OPEN_URI`](https://developers.google.com/glass/v1/reference/timeline#menuItems.action) instead.

Issues resolved:

- [#164](https://code.google.com/p/google-glass-api/issues/detail?id=164) - Video streaming now supports YouTube video URLs

## XE8 - August 12, 2013

The following Mirror API changes support new features in the XE8 platform release:

Glassware specified
[voice menu commands](https://developers.google.com/glass/contacts#declaring_voice_menu_commands)

- Add voice menu commands using the [`contacts`](https://developers.google.com/glass/reference/contacts) resource.
- Specify your voice command in the [`contacts.acceptCommands`](https://developers.google.com/glass/reference/contacts#acceptCommands) property.
- "Take a note" and "Post an update" are the only commands currently supported. To request support for other voice commands, fill out the [Suggest a Glass Voice Command form](https://services.google.com/fb/forms/glassvoicecommand/).

Improved [HTML pagination](https://developers.google.com/glass/timeline#paginating)

- Manual and automatic pagination from within the [`timelineItem.html`](https://developers.google.com/glass/reference/timeline#html) property.
- `timelineItem.htmlPages` is deprecated and will be removed in a future release.

New [`VIEW_WEBSITE`](https://developers.google.com/glass/reference/timeline#menuItems)
menu item:

- When activated from a timeline card, this opens the URL specified in [`menuItem.payload`](https://developers.google.com/glass/reference/timeline#menuItems.payload) with the Glass web browser.

Issues resolved:

- [#6](https://code.google.com/p/google-glass-api/issues/detail?id=6), [#63](https://code.google.com/p/google-glass-api/issues/detail?id=63) - Glassware can now register voice commands using the Mirror API
- [#91](https://code.google.com/p/google-glass-api/issues/detail?id=91) - Video is now playable from an HTML card, and thumbnail URL can now be specified
- [#115](https://code.google.com/p/google-glass-api/issues/detail?id=115) - Video playback is now handled by a menu item
- [#137](https://code.google.com/p/google-glass-api/issues/detail?id=137) - New built-in action: `VIEW_WEBSITE`
- [#160](https://code.google.com/p/google-glass-api/issues/detail?id=160) - Images with very long URLs now work

## XE7 - July 7, 2013

Issues resolved:

- [#53](https://code.google.com/p/google-glass-api/issues/detail?id=53) - Videos now preserve their aspect ratio

**June 13, 2013**

Share [contacts](https://developers.google.com/glass/contacts) no longer need to be enabled by users on MyGlass. All contacts are
now enabled by default.

If your Glassware includes documentation that advises your user to enable a share contact (for
example at the end of the authentication flow or as a welcome card) you should remove it.

## XE6 - June 4, 2013

The following Mirror API changes support new features in the XE6 platform release:

- Added `video/vnd.google-glass.stream-url` as a MIME type for timeline
  attachments. This MIME type allows you to specify a URL to stream video from.

  See [Attaching video](https://developers.google.com/glass/timeline#attaching_video) for more information.
- Added the ability for users to add captions to shared images. The caption is
  stored in the timeline item's `text` property.

  See [Captions for shared photos](https://developers.google.com/glass/contacts#captions_for_shared_photos)
  for more information.

Issues resolved:

- [#77](https://code.google.com/p/google-glass-api/issues/detail?id=77) - `htmlPages` now work within threaded bundles

**April 15, 2013**

Initial release of the [Mirror API](https://developers.google.com/glass/reference).